在 My SQL 中不断收到外键约束失败消息
Posted
技术标签:
【中文标题】在 My SQL 中不断收到外键约束失败消息【英文标题】:Keep getting foreign key constraint failed message in My SQL 【发布时间】:2018-05-19 13:42:34 【问题描述】:我尝试将数据插入表 Bookratings
,但我不断收到此错误消息。这是因为当我尝试插入时,它会在 Bookratings
表中创建重复项,这是 PRIMARY 键约束所不允许的?
mysql 错误 1452 - 无法添加或更新子行:外键约束失败
我的实际代码:
如果存在 amazon2 则删除数据库;
如果amazon2不存在则创建数据库;
使用亚马逊2;
create table books(
ISBN varchar(13),
Title varchar(255),
Author varchar(255),
Year int(10),
Puplisher varchar(255),
ImageURL varchar(255),
Genre varchar(12),
unitprice decimal(6,2),
primary key (ISBN)
);
create table users(
UserID int(11),
Country varchar(250),
Age int(11),
primary key (UserID)
);
create table bookratings(
UserID int(11) not null,
ISBN varchar(13) not null,
Rating int(11),
primary key (UserID, ISBN),
foreign key (ISBN) references books (ISBN) on delete cascade on update cascade,
foreign key (UserID) references users (UserID) on delete cascade on update cascade
);
create table orders(
OrderID int(11),
UserID int(11) not null,
Year int(10),
totalpay decimal(6,2),
primary key (OrderID),
foreign key (UserID) references users (UserID)
);
create table trans(
OrderID int(11) not null,
ISBN varchar(13) not null,
Quantity int(11),
primary key (OrderID, ISBN),
foreign key (OrderID) references orders (OrderID),
foreign key (ISBN) references books (ISBN)
);
我必须澄清一点:任务给定,我不允许添加任何其他属性或删除现有属性。
【问题讨论】:
不要链接到您的代码异地。把人们需要的一切都放在问题中以了解您的问题。 我很确定您的Users
主键必须是not null
。另外,我建议您也为您的books
表使用ID
(int
) 主键;您的 ISBN 可能会更改!理想情况下,主键应该是auto increment
。
请发布实际代码本身,而不是它的图像。很难用图像进行测试:)
我已经发布了!
现在请去掉多余的图像。
【参考方案1】:
外键约束违规意味着您尝试更新的表包含对其他表的引用,并且您以某种方式破坏了该引用。
如果我有一张桌子电影
+----------+---------------+
| Movie_ID | Movie_Name |
+----------+---------------+
| 1 | Jaws |
| 2 | Star-Wars |
| 3 | Jurassic Park |
+----------+---------------+
还有一个表 User_Reviews
+---------+----------+-------+
| User_ID | Movie_ID | Score |
+---------+----------+-------+
| 1 | 1 | 2.5 |
| 2 | 1 | 5 |
| 3 | 2 | 4 |
| 4 | 2 | 3 |
| 5 | 2 | 4.5 |
| 6 | 3 | 5 |
+---------+----------+-------+
在 User_Reviews 表中,Movie_ID 是一个外键。
我无法对 Movie_ID = 10 进行评论,因为电影表中不存在该电影。如果我确实尝试这样做,我会收到外键约束错误。
【讨论】:
以上是关于在 My SQL 中不断收到外键约束失败消息的主要内容,如果未能解决你的问题,请参考以下文章
一般错误:1005 无法创建表 errno:150“外键约束格式不正确”)