解決修改表結構,添加外鍵時出現“約束沖突”的錯誤


由於表結構更改,使用新建表,現有部分表需要更改外鍵,將引用更改到新建表的相應字段。在更改過程中,部分表出現如下錯誤提示:

ALTER TABLE 語句與 COLUMN FOREIGN KEY 約束 '' 沖突。該沖突發生於數據庫 “***”,表 “***”, column “***”。

反復查看后,包括字段類型、長度等完全一致。不得其解,在網上找了下,發現有如下文章[1]提示:

根源: XXX表有數據

解決:刪掉XXX表的數據再執行sql語句

恍然大悟,查看引用表數據與被引用表數據做比較,才發現,原來是相應字段數據不一致的問題。即引用表中的相應字段數據,在被引用表中並不存在,無法建立實際上的外鍵關系,這是引用完整性的要求。早在讀書時就學到的東西,今天居然忘記了。看來,知識只有在用了之后才屬於自己。

此外,在主次表引用設置后,也可能會出現正面的情況。即主表中的外鍵,在次表中已經失效,或不存在。

如表A:

aid aname
1 Lucy
2 Lily
3 Kimi

表B引用表A的aid作為外鍵

bcode aid(FK from A) bvalue
001 1 bone
002 2 btwo
003 5 bthree

由於表B中的“aid”字段引用了表A的“aid”,因此,如果此時想修改表B的定義結構,即會出現文章最開始出錯的信息,修改失敗。就是因為表B中的第三條數據,引用的“aid”為“5”的那條記錄,因為表A中不存在這條記錄,修改表之前的驗證無法通過。只有刪除了這條數據之后,再次修改表B才會成功。

PS:正常情況下,如何使用了“強制外鍵約束”,則不會出現上面的問題。因為存在外鍵引用,是無法刪除被引用表某些數據的。如果將“強制外鍵約束”選項是“否”。則可以刪除相應的數據。


參考文獻:

[1] ALTER TABLE 語句與 COLUMN FOREIGN KEY 約束 '' 沖突 ,大尾巴狼專欄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM