MySql - 无法添加或更新子外键约束失败[重复]
Posted
技术标签:
【中文标题】MySql - 无法添加或更新子外键约束失败[重复]【英文标题】:MySql - Cannot add or update a child foreign key constraint fails [duplicate] 【发布时间】:2015-10-08 21:05:42 【问题描述】:我有两张桌子,“booking”和“isBooked”。我想向 isBooked 表添加值。但我不断收到错误消息“无法添加或更新子外键约束失败”。
CREATE TABLE booking (
bookingID INT AUTO_INCREMENT,
customerID INT,
startDate DATE,
endDate DATE,
dateBookedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
employeeID int,
PRIMARY KEY (bookingID),
INDEX idx_start (startDate),
INDEX idx_end (endDate),
FOREIGN KEY (customerID) REFERENCES customer(CustomerID)
);
CREATE TABLE isBooked(
BookingID int,
DogID int,
RunID int,
foreign key (RunID) references Run(RunID),
foreign key (DogID) references Dog(dogID),
foreign key (BookingID) references Booking(BookingID)
);
insert into isbooked values(1, 1, 1);
谁能告诉我为什么在尝试将值插入“isBooked”时会出现此错误。
【问题讨论】:
您正在尝试在 isBooked 中插入引用的表预订中不存在的值。 你仅仅拥有 FK 就应该得到支持 插入尝试违反了 Run、dog 或 booking 限制(至少 1 个) @DrewPierce,是的,它违反了其中之一,但用户只显示了 2 张桌子! 即使他给我们展示了3个父表,我们也看不到3个中缺失的数据 【参考方案1】:您的 isbooked 表对其他三个表的引用具有外键约束:
foreign key (RunID) references Run(RunID),
foreign key (DogID) references Dog(dogID),
foreign key (BookingID) references Booking(BookingID)
此约束确保您输入的任何值都需要与引用表中的行之一匹配。
因此,您收到此错误的原因是在一个(或所有)引用表中没有匹配的记录。首先,您需要使用您在插入中使用的 ID 添加 Run、Dog 和 Booking,然后才能将记录添加到 isbooked。
【讨论】:
这就是你的答案 好,清晰,完整,时尚!以上是关于MySql - 无法添加或更新子外键约束失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章