问题描述
这是我在Jupyter笔记本中拥有的代码:
CREATE TABLE warehouse(
code VARCHAR(100) not null,ISBN varchar(225),number int,address varchar(30),phone varchar(20),PRIMARY KEY(code)
);
CREATE TABLE book(
ISBN varchar(225),title varchar(255),year decimal(4,0),price decimal(10,2),in_stock int,in_basket int,PRIMARY KEY(ISBN),FOREIGN KEY (ISBN,in_stock) REFERENCES warehouse(ISBN,number)
);
CREATE TABLE shopping_basket(
basket_id varchar(40),number_in_basket int,PRIMARY KEY(basket_id),number_in_basket) REFERENCES book(ISBN,in_basket)
);
我的错误:
DatabaseError: (MysqL.connector.errors.DatabaseError) 1822 (HY000): Failed to add the foreign key constraint. Missing index for constraint 'book_ibfk_1' in the referenced table 'warehouse'
[sql: CREATE TABLE book(
ISBN varchar(225),UNIQUE KEY(in_stock),number)
);]
现在,我确定它们都具有相同类型的变量。 谁能帮我解决这个错误?我正在学习,所以我了解有限 谢谢
解决方法
所有受害的外键都需要一个索引,该索引是必需的。
因此您的代码必须看起来像
您使用的是组合外键,因此索引也必须组合
CREATE TABLE warehouse(
code VARCHAR(100) not null,ISBN varchar(225),number int,address varchar(30),phone varchar(20),PRIMARY KEY(code),KEY(ISBN,number)
);
CREATE TABLE book(
ISBN varchar(225),title varchar(255),year decimal(4,0),price decimal(10,2),in_stock int,in_basket int,PRIMARY KEY(ISBN),FOREIGN KEY (ISBN,in_stock) REFERENCES warehouse(ISBN,number),KEY (ISBN,in_basket)
);
CREATE TABLE shopping_basket(
basket_id varchar(40),number_in_basket int,PRIMARY KEY(basket_id),number_in_basket) REFERENCES book(ISBN,in_basket)
);