2010-06-08 58 views
3

我正试图在MySQL的表中创建一个外键,并且出现了一个奇怪的错误,那里似乎没有任何关于我的搜索的信息。在MySQL中创建外键会产生错误:

我创建这个关键(从MySQL工作台5.2发射):

ALTER TABLE `db`.`appointment` 
    ADD CONSTRAINT `FK_appointment_CancellationID` 
    FOREIGN KEY (`CancellationID`) REFERENCES `db`.`appointment_cancellation` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
, ADD INDEX `FK_appointment_CancellationID` (`CancellationID` ASC) ; 

在这一点我得到的错误:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (alarmtekcore ., CONSTRAINT FK_lead_appointment_CancellationID FOREIGN KEY (CancellationID) REFERENCES lead_appointment_cancellation (`)

我检查here

但表中没有数据。

+0

当你说没有数据 - 你的意思是'appointment_cancellation'表吗? – 2010-06-08 22:10:30

+0

@OMG小马:确实。 – 2010-06-08 22:12:55

回答

4

您不能在具有父表中不存在的预先存在的数据的列上应用外键约束。

如果您运行填充appointment_cancellation表下,你应该能够在事后申请外键:

INSERT INTO appointment_cancellation 
SELECT DISTINCT a.CancellationID 
    FROM appointment 
+0

也许我不明白; appointment_cancellation表是DB的新增加(并且没有记录)。在约会表中,CancellationID的所有值都为空(默认值)。 – 2010-06-08 22:25:56

+0

@SnOrfus:在'appointment_cancellation'中必须存在一个记录,即使该值为空 - 这就是外键约束。它确保父项中已存在的唯一值可存在于子项中。 – 2010-06-08 22:29:16

0

两个领域 - appointmentCancellationIDappointment_cancellationID - 需要完全一样的类型。如果一个是INT,另一个是INT UNSIGNED,你会得到这个错误。

+0

感谢您的意见,这是我检查的第一件事情之一(过去发生在我身上的确切场景)。 – 2010-06-09 02:10:12