restrict的中文意思?
restrict和cascade都是在外碼定義時(shí)指定的關(guān)鍵字。
外碼所指定的字段取值受限制,可以取兩種值:
所參照主碼中出現(xiàn)過(guò)的值;
可以取空值。
外碼所指定的字段中數(shù)據(jù)的增刪改是受到外碼約束的限制的,在數(shù)據(jù)增刪改時(shí)會(huì)檢查是否滿足外碼約束條件,當(dāng)不滿足外碼的條件時(shí),所做的處理與定義外碼時(shí)指定的restrict關(guān)鍵字或者cascade關(guān)鍵字有關(guān)。
下面以一個(gè)具體例子說(shuō)明:
設(shè)有兩張表:student和class,表定義語(yǔ)句為:
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中出現(xiàn)過(guò),或者取空值。注意,在外碼定義時(shí)指定了restrict關(guān)鍵字,此時(shí),如果從class表中刪除一條數(shù)據(jù)(即刪除一個(gè)班級(jí)),student表中恰好有該班級(jí)的學(xué)生,則會(huì)報(bào)錯(cuò),不允許刪除。
如果在student表的外碼定義時(shí)指定的是cascade,即
create table student(sno int primary key, sname varchar(10), cno int, foreign key(cno) references class(cno) on delete cascade)
則表示級(jí)聯(lián)刪除,刪除class表中的一條數(shù)據(jù)時(shí),會(huì)把student表中對(duì)應(yīng)的數(shù)據(jù)一起刪除掉。此外,在外碼定義時(shí)還可以指定on delete set null,表示刪除class表中的一條數(shù)據(jù)時(shí),如果student表中有對(duì)應(yīng)的數(shù)據(jù),則把這些對(duì)應(yīng)的數(shù)據(jù)的cno設(shè)置為空值NULL。