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 - 无法添加或更新子外键约束失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“无法添加或更新子行:外键约束失败”[重复]

MySQL - 无法添加或更新子行:外键约束失败

如何修复部署到Linux服务器后MySql中的“无法添加或更新子行:外键约束失败”?

ERROR 1452:无法添加或更新子行:外键约束失败

Hibernate:无法添加或更新子行:外键约束失败

Magento DB错误:完整性约束违规:1452无法添加或更新子行:外键约束失败