innodb儲存引擎支援外來鍵,外來鍵約束型別有:
1.restrict(mysql預設):拒絕更新或刪除(是拒絕更新還是刪除看外來鍵的具體設定)主表被外來鍵引用的列。
2.no action:同restrict
3.set null:更新或刪除主表對應列,會使子表對應列的值變成null(子表該列不能預設為not null)。
4.cascade:聯動,即主表的改動會引發子表的改動。
5.set default:(innodb不支援)
主表是職員表,子表為工資表且外來鍵為(`工資表_ibfk_1`,可以在建立表時設定或自動生成)
那麼,修改約束型別如下:
mysql> alter table `工資表` drop foreign key `工資表_ibfk_1`; //先刪除原來的外來鍵。
mysql> alter table `工資表`
add constraint `fk_2` foreign key `工資表`(`工號`) references `職員表`(`工號`)
on delete cascade on update cascade;//再用alter語句重新新增外來鍵。
這裡發生了一件囧事,我想驗證級聯修改是否生效,沒注意到上面的語句是on delete cascade on update cascade,結果發現怎麼插入資料,子表都沒變化,硬是各種查詢資料、動手驗證,終於乙個小時後瞄了一眼這個語句,哭暈。。。。
疑問:能否直接用alter在原有基礎上修改外來鍵呢?(就是直接省去drop這一步) mysql 外來鍵約束 型別
restrict方式 同no action,都是立即檢查外來鍵約束 限制,指的是如果字表引用父表的某個欄位的值,那麼不允許直接刪除父表的該值 cascade方式 在父表上update delete記錄時,同步update delete掉子表的匹配記錄 on delete cascade從mysql3...
mysql約束與外來鍵 MySQL 外來鍵與約束
外來鍵的建立 建表如下 create table parent id int not null,primary key id type innodb create table child id int,parent id int,foreign key parent id references pa...
MySQL 外來鍵約束
建立測試主表.id 是主鍵.create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary k...