
如圖顯示,Course表的Cpno是外建,主鍵是Cno。
但是當插入資料的時候,出現問題。
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`lzx`.`course`, CONSTRAINT `course_ibfk_1` FOREIGN KEY (`Cpno`) REFERENCES `course` (`cno`))
經過驗證發現:
單獨實作:insert into Course values ('2','數學',null,2);
但是當實作所有的時候:
insert into Course values
('1','資料庫','5',4),
('2','數學',null,2),
('3','資訊系統','1',4),
('4','作業系統','6',3),
('5','資料結構','7',4),
('6','資料處理',null,2),
('7','PASCAL語言','6',4);
就會報錯。
在SQLserver是可以的,請問各位大神怎么解決?
uj5u.com熱心網友回復:
表結構有點醉,一定要這樣的話,批量insert時,cpno全設定成null,insert完后,再updateuj5u.com熱心網友回復:
嗯嗯.....這表結構真的讓人很醉,我沒看錯的話你這表對著自己做約束.....??如果先不論表內欄位意圖為何?單看這結構我的建議如下:
1. 先回答這問題在於,你一次性新增多筆紀錄,以這筆紀錄來說('1','資料庫','5',4), 資料庫本身還未新增 ('5','資料結構','7',4) 紀錄又怎麼會通過外部鍵限制約束條件勒?
2. 你的約束欄位 Cpno 就會出現 Null 值了,又何須加入限制約束勒?
3.呈上,我猜想這表應該是想做成選課和預選課之用,或者無論是何種類型用,我建議先建立一份 "選課表",另做一份預選課用表,如果有需要,在預選課表建立外部鍵指向選課表與之產生關聯,這樣當選課表紀錄被刪除或變更時,也能同步確認預選課表內記錄
4. 還是需要你描述清楚到底要做什麼,才會得到更精確的答案
uj5u.com熱心網友回復:
最簡單的辦法,刪掉外鍵,做了小二十年的資料庫了,外鍵那個東東,弊遠大于利,沒必要給自己找麻煩。uj5u.com熱心網友回復:
想問一下,如果原表為空,這個參考表和目標表是同一張表,會不會出現沖突轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/23214.html
標籤:MySQL
