mysql 主外來鍵 策略 mysql外來鍵策略

2021-10-17 19:30:20 字數 1785 閱讀 3092

1.外來鍵

建表時新增外來鍵:constraint 外鍵名 foreign key 從表字段 references 主表字段 級聯操作

create table dage( create table xiaodi(

dage_idint primary key, xiaodi_id int,

namechar(10) name char(10),

); dage_idint,

constraint fk foreign key(dage_id) references dage(dage_id));

建表後新增外來鍵:alter table 表名 add constraint 外鍵名 foreign key(欄位1) references 表名2(欄位名) 級聯操作

檢視:①desc 表名; ②show create table 表名

刪除:alter table 表名 drop foreign key 外鍵名

注意:設定了外來鍵的表是從表,它關聯的表被稱為主表;給從表插入資料時,插入資料必須是主表的被關聯字段出現的資料;先建主表再建從表;先刪從表再刪主表。

2.級聯操作

on delete cascade:主表中的資料被刪,從表中相關資料也會被刪

on update cascade:主表中的資料被改後,從表中的相關資料也會被修改

on delete cascade on update cascade:刪除和修改有級聯操作

on delete set null:主表總資料被刪除後,從表中相關資料為null

on update set null

3.示例

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

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

#tb_user中的一條記錄1chy abcd

#tb_order中一條記錄,10是tb_order的id,1是所屬user的id10 ...... 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(為了資料安全)。

mysql建立主外來鍵關聯 mysql主外來鍵建立心得

mysql主主外來鍵建立 1 確保參照的表和字段是存在的 2 關聯表必須是innodb儲存型別 3 必須設定主關聯表主鍵 4 主鍵與外來鍵資料型別和字元編碼 unsigned 必須一致 5 確保以上宣告的句法是正確的 附 mysql建立表預設型別為 myisam 如果要改變預設表型別可在my.inf...

mysql主外來鍵

自己的 總提示 error 1005 can t create table errno 150 的錯誤鬱悶了好幾天,看了下面的文章終於成功了,犯了下面提到的三情況中的第三種,太不細心了,居然忽略了 unsigned 大家也要多留意呀!參照完整性 referentialintegrity 是資料庫設計...

mysql查詢主外來鍵

查詢資料庫的所有主外來鍵 select table name 表名 constraint name 主 外來鍵名稱 column name 欄位名 referenced table name 主表名稱 referenced column name 主表字段 from information sche...