5.2.3參照完整性—內容提要


參照完整性的本質

  • 通過添加一張父表的形式,給當前操作的表(子表)添加一個約束(字典)。

即:要求子表的某字段(外鍵),必須在父表的對應字段范圍內取值(即寫的字,一定要是字典里有的)。

  • 約定了父表進行刪除(on delete)或修改(on update)的時候,子表如何保持約束有效(嚴格/級聯/不動作/設空/設默認值)。

即:改變字典的內容時,文章里對應的字將如何變化。

通常設置 [嚴格(默認)/級聯/設空/設默認值],對應關鍵字(無/cascade/set null/set default),含義為(禁止修改字典/文章里的字跟着改/文章里的字設為空/文章里的字設為默認值)

設置參照完整性后,對兩表的一切操作,都應滿足上面第一點的描述,且按照第二點的規則工作。


 定義參照完整性

思想:

  1. 子表中選出一列做外鍵(默認會被添加普通索引),跟父表的索引(主鍵或唯一)關聯。
  2. 可以起個名字,最好起個名字。(默認的名字不直觀)
  3. 可以設置父表的刪改規則,不指定默認“嚴格”。

語法:

  •  完整寫法舉例
    CONSTRAINT xh1 FOREIGN KEY (xh) REFERENCES t1(xh) ON DELETE cascade ON UPDATE cascade

    含義:把當前表的xh字段和t1表的xh字段關聯,起個名字叫xh1,刪除規則是級聯,更新規則是級聯。

  • 最簡寫法舉例
    FOREIGN KEY (xh) REFERENCES t1(xh)

    含義:把當前表的xh字段和t1表的xh字段關聯,名字是mysql亂起的,刪除規則是嚴格,更新規則是嚴格。

使用:

可以把上面參照完整性的內容,當作字段,在創建表(create table)或修改表(alter table)的命令里使用。

CREATE TABLE t2 (xh char(1) DEFAULT NULL,km varchar(2) DEFAULT NULL,cj int DEFAULT NULL, KEY xh (xh),CONSTRAINT xh FOREIGN KEY (xh) REFERENCES t1 (xh))

alter table t2 add CONSTRAINT xh FOREIGN KEY (xh) REFERENCES t1(xh) ON DELETE cascade ON UPDATE cascade;

 刪除的時候必須用到名字

alter table t2 drop CONSTRAINT xh;

小技巧:對於系統的自動命名,可以通過顯示建表命令來查看名稱。

show create table t1;

示例:

 t1為基本情況表,t2為成績表

 

 

 內容:

 

 

 借助t1的xh字段,為t2的xh字段添加參照完整性規則:

alter table t2 add FOREIGN KEY (xh) REFERENCES t1(xh);

這是“默認命名”的“嚴格”規則。運行結果:

 

 

t2的xh字段在此時也被自動添加了普通索引:

 

 

  

分別嘗試修改t2的最后一條記錄和t1的最后一條記錄,把學號改為'4',可以看到修改被拒絕:

 

 

 在提示中,也可以看到系統給出的默認約束名稱:t2_ibfk_1。

把修改和刪除規則改為級聯。思想:刪除,添加新的規則:

 

 修改父表時,可以看到子表內容也被修改:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM