添加兩張已存在數據的表的關系外鍵時,報如下圖所示的錯誤:
出現這種錯誤,無非是兩張表的關聯字段的名稱、類型、長度等不一致,又或者表中已存在的數據不匹配造成的。
我們可以通過minus關鍵字查詢2張表的差值,確實存在!!!
解決方法有兩種:
(1).刪除多余的數據,保持2張表數據統一,在執行 alter table 表1 add constraint FK_XXX foreign key(字段1) references 表2 (字段2);就不會報錯了;
(ps:這種方式在實際生產過程中不實際,生產環境數據不能隨便刪除的,所以這種方式不現實,不推薦)
(2).在alter語句之后加上enable novalidate即可,即alter table 表1 add constraint FK_XXX foreign key(字段1) references 表2 (字段2) enable novalidate;
(ps:enable novalidate指的是允許已有記錄不滿足約束條件,但新增/修改的記錄則必須滿足約束條件)
這是其他3種修飾關鍵詞的含義:
Enable Validate與Enable相同,檢查已有記錄和新增記錄,確保都符合約束;
Disable Validate禁用約束,刪除約束上的索引,不允許修改任何被約束的記錄;
Disable Novalidate與Disable相同,禁用約束,刪除約束上的索引,且允許修改被約束的記錄。