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(為了資料安全),
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62733.html
標籤:MySQL
上一篇:mysql學習總結(一)
