回覆列表
  • 1 # 滴逃逃

    按書上P82的圖3.2 學生-課程資料庫的資料示例(b)的Course表的內容,插入課程號為1的資料時提示違反了外來鍵約束。

    插入語句:insert into course(cno,cname,cpno,ccredit)

    values("1","資料庫","5",4);分析:

    先根據Course表的定義,看哪一個是外來鍵。

    表定義的SQL語句在P85的例6。

    create table course (cno

    char(4) primary key,

    cname char(40),

    cpno char(4),

    ccredit smallint,

    foreign key cpno references course(cno));

    從上面的SQL語句可以看出,cpno是外來鍵,而且引用的是該表的主鍵cno。

    根據書上P51的規則2.2,參照完整性規則,外來鍵cpno的取值不為空的情況下(如上cpno="5"),與其對應的主鍵cno必須存在。因為,第一個插入的就是cno="1"的資料,cno="5"的還沒有插入,很顯然不滿足參照完整性規則。

    解決方法:

    第一種解決方法是插入資料的時候,所有的cpno暫時都置為null,所有資料插入以後,再依次更新這些資料的cpno的值。該方法的優點是複雜性低,容易實現。

    第二種解決方法是插入資料的時候,不是按表中cno的順序插入。而是根據資料依賴的關係插入資料。比如,根據表裡的資料,分析得出可以按cno=2、6、4、7、5、1、3的順序插入資料。

  • 中秋節和大豐收的關聯?
  • 咖哩醬的比例及做法?