微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加外键约束的规则

如何解决添加外键约束的规则

我正在学习数据库。我需要在这图片中的MysqL中创建表

Relationship

这是我在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)
 );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。