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這一步)