【问题标题】:MySql - Cannot add or update a child foreign key constraint fails [duplicate]MySql - 无法添加或更新子外键约束失败[重复]
【发布时间】: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个中缺失的数据

标签: mysql


【解决方案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。

【讨论】:

  • 这就是你的答案
  • 好,清晰,完整,时尚!
猜你喜欢
  • 2015-07-26
  • 2012-10-09
  • 2015-06-06
  • 2016-08-09
  • 2011-03-31
  • 2013-08-10
  • 1970-01-01
  • 2016-05-23
  • 2018-06-17
相关资源
最近更新 更多