2010-06-08 57 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