1. 程式人生 > >資料庫中restrict和casecade是什麼意思?

資料庫中restrict和casecade是什麼意思?

restrict和cascade都是在外碼定義時指定的關鍵字。

外碼所指定的欄位取值受限制,可以取兩種值:
1.所參照主碼中出現過的值;
2.可以取空值。

外碼所指定的欄位中資料的增刪改是受到外碼約束的限制的,在資料增刪改時會檢查是否滿足外碼約束條件,

當不滿足外碼的條件時,所做的處理與定義外碼時指定的restrict關鍵字或者cascade關鍵字有關。

下面以一個具體例子說明:
設有兩張表:student和class,表定義語句為:
create table class(cno int primary key, cname varchar(20))
create table student(sno int primary key, sname varchar(10), cno int, foreign key(cno) references class(cno) on delete restrict)
第一張表class中,cno是主碼,第二張表student中,sno是主碼,cno是外碼,外碼的取值必須在class的主碼cno中出現過,或者取空值。注意,在外碼定義時指定了restrict關鍵字,此時,如果從class表中刪除一條資料(即刪除一個班級),student表中恰好有該班級的學生,則會報錯,不允許刪除。
如果在student表的外碼定義時指定的是cascade,即
create table student(sno int primary key, sname varchar(10), cno int, foreign key(cno) references class(cno) on delete cascade)
則表示級聯刪除,刪除class表中的一條資料時,會把student表中對應的資料一起刪除掉。此外,在外碼定義時還可以指定on delete set null,表示刪除class表中的一條資料時,如果student表中有對應的資料,則把這些對應的資料的cno設定為空值NULL。