如图显示,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是可以的,请问各位大神怎么解决?

解决方案 »

  1.   

    表结构有点醉,一定要这样的话,批量insert时,cpno全设置成null,insert完后,再update
      

  2.   

    嗯嗯.....這表結構真的讓人很醉,我沒看錯的話你這表對著自己做約束.....??
    如果先不論表內欄位意圖為何?單看這結構我的建議如下:
    1. 先回答這問題在於,你一次性新增多筆紀錄,以這筆紀錄來說('1','数据库','5',4), 資料庫本身還未新增 ('5','数据结构','7',4) 紀錄又怎麼會通過外部鍵限制約束條件勒?
    2. 你的約束欄位 Cpno 就會出現 Null 值了,又何須加入限制約束勒?
    3.呈上,我猜想這表應該是想做成選課和預選課之用,或者無論是何種類型用,我建議先建立一份 "選課表",另做一份預選課用表,如果有需要,在預選課表建立外部鍵指向選課表與之產生關聯,這樣當選課表紀錄被刪除或變更時,也能同步確認預選課表內記錄
    4. 還是需要你描述清楚到底要做什麼,才會得到更精確的答案