【问题标题】:I keep getting "foreign key references invalid column?我不断收到“外键引用无效列?
【发布时间】:2019-11-16 16:50:27
【问题描述】:

我引用的是表的主键,它也是一个外键。我得到的确切错误是: “外键 'customer_username' 在引用表 'CustomerAddstoCartProduct' 中引用了无效列 'customer_username'。”

create table Customers(
username varchar(20) PRIMARY KEY,
points int
FOREIGN KEY(username) REFERENCES Users ON DELETE CASCADE ON UPDATE CASCADE

)
create table CustomerAddstoCartProduct (
serial_no int, 
customer_name varchar (20)
PRIMARY KEY(serial_no, customer_name)
FOREIGN KEY(serial_no) REFERENCES Products ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(customer_username) REFERENCES Customers ON DELETE CASCADE ON UPDATE CASCADE
)

【问题讨论】:

    标签: mysql sql foreign-keys database-schema


    【解决方案1】:

    您的所有外键声明格式不正确,它们缺少目标表中的引用列。

    例如,在表CustomerAddstoCartProduct 中,您应该有:

    FOREIGN KEY(customer_username) REFERENCES Customers(username) 
        ON DELETE CASCADE ON UPDATE CASCADE
    

    代替:

    FOREIGN KEY(customer_username) REFERENCES Customers 
        ON DELETE CASCADE ON UPDATE CASCADE
    

    另一件事是,在表Customers 中,您的主键列具有外键约束。虽然这可能有效,但这可能表明存在设计问题。如果CustomersUsers 之间存在1:1 的关系,您可能应该将所有列存储在同一个表中。

    【讨论】:

    • @LobnaHishamEldeeb:表的声明中有3个外键声明,它们都有相同的问题。你需要把它们都修好。
    【解决方案2】:

    包括被引用的列并使用正确的列名:

    create table CustomerAddstoCartProduct (
        serial_no int, 
        customer_name varchar(20)
        PRIMARY KEY(serial_no, customer_name)
        FOREIGN KEY(serial_no) REFERENCES Products (serial_no) ON DELETE CASCADE ON UPDATE CASCADE,
        FOREIGN KEY (customer_name) REFERENCES Customers (username) ON DELETE CASCADE ON UPDATE CASCADE
    );
    

    Here 是一个 dbfiddle -- 无关的表引用被注释掉了。

    【讨论】:

    • Products 是否不需要字段说明符,因为那里也有 serial_no 键?
    • @DanielFarrell 。 . .是的,它应该有一个。
    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多