2017-04-19 499 views
0
我有關於SQLyog的外鍵關係創造一個問題,當我執行這個查詢

SQLyog的創建外鍵錯誤

錯誤:

Cannot add or update a child row: a foreign key constraint fails (zestagio . #sql-6dc_4b6151 , CONSTRAINT FK_CARRO FOREIGN KEY (CARRO) REFERENCES km_carro (IDCARRO))

MySQL查詢:

ALTER TABLE `zestagio`.`km_colaboradores` 
    ADD COLUMN `CARRO` int(11) NOT NULL after `TIPO`, 
    ADD CONSTRAINT `FK_CARRO` FOREIGN KEY (`CARRO`) REFERENCES `zestagio`.`km_carro`(`IDCARRO`) 
+0

是否將'km_carro'('IDCARRO')列聲明爲主鍵? –

+0

是的,當我創建其他FOREIGN KEYS時,它沒有給我任何錯誤。就在這一個,我不知道爲什麼。 –

+0

請爲'km_carro'和'km_colaboradores'發佈'SHOW CREATE TABLE'。請參見[14.7.5.10 SHOW CREATE TABLE語法](https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html)。 – wchiquito

回答

1

錯誤消息僅表示您有km_colaboradores表中的記錄不滿足由FK_CARRO外鍵設置的限制。

看到字段CARRO被定義爲intnot null並且沒有指定默認值。這個語句沒有引發任何錯誤,但外鍵確實表明嚴格的sql模式沒有被啓用。您可能已經在表格中有數據,因此通過這種方式添加CARRO字段導致它將所有記錄設置爲0。在嚴格的sql模式下,這會導致錯誤消息,因此嚴格的sql模式無法啓用。

但是,當您嘗試添加外鍵時,則MySQL在km_carro表中找不到任何記錄,其中IDCARRO爲0,因此現有記錄會打破外鍵約束。

我建議允許CARRO暫時具有空值,添加外鍵,根據需要更新CARRO值到適當的值,然後不允許空值。

另一種替代方法是爲CARRO定義明確的默認值,該值存在於IDCARRO字段中。