#1215 - 无法添加外键约束

时间:2016-03-21 18:11:36

标签: mysql

  --Items table
CREATE TABLE IF NOT EXISTS items(
    ID int NOT NULL AUTO_INCREMENT,
    itemID varchar(10),
    itemName varchar(40),
    description varchar(100),
    unitPrice int (10),
    CONSTRAINT Items_pk PRIMARY KEY(ID,itemID)
)ENGINE=INNODB



  --Stock Table
CREATE TABLE IF NOT EXISTS stock(
    ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    availableQty int(10),
    itemID varchar(10),
    CONSTRAINT Items_fk FOREIGN KEY (itemID) REFERENCES items(itemID)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)ENGINE=INNODB

1 个答案:

答案 0 :(得分:0)

您正在尝试将外键约束添加到不是键的内容中。请注意约束:

CONSTRAINT Items_fk FOREIGN KEY (itemID) REFERENCES items(itemID)

并注意items上的关键字:

CONSTRAINT Items_pk PRIMARY KEY(ID,itemID)

itemID不是items上的关键。您需要两个这些值才能引用密钥。像这样:

CREATE TABLE IF NOT EXISTS stock(
    ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    availableQty int(10),
    itemID int,
    itemItemID varchar(10),
    CONSTRAINT Items_fk FOREIGN KEY (itemID, itemItemID) REFERENCES items(ID, itemID)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)ENGINE=INNODB

当然,您可能希望使用更好的命名。这一点有点不直观,因为对于任何给定的“项目”,你有两个叫做“ID”的东西。