MySQL 外鍵關聯策略


 

eg.一個用戶可有擁有多個訂單,一個訂單只能屬於一個用戶,一對多,在tb_order中使用外鍵user_id關聯tb_user的id。

當刪除、更新tb_user中的主鍵時,與之關聯的tb_order要受到影響,比如

#tb_user中的一條記錄
1  chy  abcd

#tb_order中一條記錄,10是tb_order的id,1是所屬user的id
10 ......  1

刪除tb_user中id=1這條記錄,或者更新id字段的值,mysql會如何處理tb_order中與之關聯的記錄?

 

 

 

 

設計外鍵時,mysql提供了4種外鍵關聯策略

1、RESTRICT   限制(默認策略)

要刪除tb_user中的記錄,或者更新主鍵字段的值,如果tb_order中有記錄與之關聯,則不能刪除、更新(執行操作時會報錯)

 

 

2、CASCADE   級聯

刪除tb_user中的記錄時,會自動刪除tb_order中與之關聯的記錄;

修改tb_user中id字段的值時,會自動修改tb_order中與之關聯的記錄的外鍵字段的值(同步變化)。

 

 

3、NO ACTION   什么也不做

刪除tb_user中的記錄,或者修改id字段的值,但tb_order中有記錄與之關聯,可以刪除、更新,tb_order中與之關聯的記錄不作任何處理(數據不發生變化)。

此種策略需要存儲引擎支持,如果存儲引擎不支持,會自動換為RESTRICT。

 

 

4、SET NULL   置為NULL

刪除tb_user的記錄,或更新主鍵字段的值,會自動將tb_order中與之關聯的記錄的外鍵字段的值置為NULL。

這種方式有一個要求:設計tb_order時,外鍵user_id不能使用NOT NULL約束。

 

 

CASCADE用得最多,其次是RESTRICT,未設置外鍵關聯策略時默認為RESTRICT(為了數據安全)。

 


免責聲明!

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



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