MySQL中外鍵的創(chuàng)建、約束以及刪除
在MySQL 3.23.44版本后,InnoDB引擎類型的表支持了外鍵約束。
外鍵的使用條件:
1.兩個表必須是InnoDB表,MyISAM表暫時不支持外鍵(據(jù)說以后的版本有可能支持,但至少目前不支持);
2.外鍵列必須建立了索引,MySQL 4.1.2以后的版本在建立外鍵時會自動創(chuàng)建索引,但如果在較早的版本則需要顯示建立;
3.外鍵關系的兩個表的列必須是數(shù)據(jù)類型相似,也就是可以相互轉換類型的列,比如int和tinyint可以,而int和char則不可以;
外鍵的好處:可以使得兩張表關聯(lián),保證數(shù)據(jù)的一致性和實現(xiàn)一些級聯(lián)操作;
一、外鍵的創(chuàng)建
語法一:后續(xù)添加方法
alter table 表名 add constraint 約束名 foreign key(當前表中約束的字段) references 主表表名(要約束的字段名); alter table student add constraint fk_class_student foreign key(cls_id) class(cls_id) on update cascade on delete no action;
語法二:創(chuàng)建表的方法
CREATE TABLE student( sid int PRIMARY KEY, cls_id int not null, sname varchar(10) not null, constraint fk_class_student foreign key(cls_id) references class(cls_id) on update cascade on delete no action )ENGINE=InnoDB DEFAULT CHARSET=utf8;
一個額外點:
SHOW CREATE TABLE class
可以查詢表的建表信息
CREATE TABLE `class` ( `cls_id` int NOT NULL, `cls_name` varchar(15) NOT NULL, PRIMARY KEY (`cls_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
下面的演示我們就使用剛剛創(chuàng)建的這個學生表和班級表
內容如下
二,關于四種約束方式
在父表上進行update/delete操作時,子表的操作類型
- CASCADE 子表會刪除包含與已刪除鍵值有參照關系的所有數(shù)據(jù)
- SET NULL 父表delete、update的時候,子表會將關聯(lián)記錄的外鍵字段所在列設為null
- RESTRICT 拒絕有關聯(lián)關系的字段的刪除要求(這是默認設置,也是最安全的設置)
- NO ACTION 和RESTRICT 類似
以我們剛剛設置的外鍵為例(on update cascade on delete no action)
當我們嘗試進行刪除操作時
delete from class WHERE cls_id=1
結果如下
可以看到由于外鍵約束中on delete no action的存在,不允許對主表進行刪除操作。但是子表可以
delete from student WHERE cls_id=1
當我們對父表的關聯(lián)鍵進行更新操作時,由于on update cascade的存在,可以正常更新
UPDATE class set cls_id=4 where cls_id=1
并且隨著主表的更新,子表中的外鍵字段也進行了更新
三,刪除外鍵的方法
alter table 子表名 drop foreign key 外鍵約束名 alter table student drop foreign key fk_class_student
當我們將外鍵刪除之后,父表的操作就變得可以正常進行了
總結
到此這篇關于MySQL中外鍵創(chuàng)建、約束以及刪除的文章就介紹到這了,更多相關MySQL外鍵創(chuàng)建、約束及刪除內容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。