一早就知道有mysql有外來鍵這回事,但是貌似平時的專案中用到的並不多,以至於我沒有去研究過這個東西,也不知道該怎麼用。當然也不清楚對效能的影響。這篇文章先搞清楚外來鍵的作用。
首先來新增一張表,做為測試要用的一張參考表。
create table `user` (
`id` int(11) not null auto_increment,
`name` varchar(255) default null,
`***` tinyint(4) default null,
`create_time` datetime default null,
primary key (`id`)
) engine=innodb auto_increment=3 default charset=utf8;
接著建一張包含外來鍵的表。
create table `user_article` (
`id` int(11) not null auto_increment,
`user_id` int(11) default null,
`content` varchar(255) default null,
`create_time` datetime default null,
`modify_time` datetime default null,
primary key (`id`),
key `user_id` (`user_id`),
constraint `user_article_ibfk_1` foreign key (`user_id`) references `user` (`id`)
) engine=innodb auto_increment=2 default charset=utf8;
接著就測試一下外來鍵的作用。分別在user表和user_article表建立一點資料。
user表
idname
***create_time
admin
2016-09-08 16:36:55
xiaoming
2016-09-08 16:37:07
user_article表
iduser_id
content
create_time
modify_time
hello word
2016-09-08 16:39:11
null
現在目的是要保持user表和user_article表的資料完整性,所以在刪除user的時候,如果user_article存在資料的話,那麼禁止刪除。user表和user_article表是通過user_id關聯的。在建表的時候就已經為user_article表的user_id欄位建立了外來鍵,參考字段就是user表的id,更新和刪除時選項都為 restrict。
現在我執行刪除語句delete from user where id=1;會報如下錯誤:
cannot delete or update a parent row: a foreign key constraint fails (`test`.`user_article`, constraint `user_article_ibfk_1` foreign key (`user_id`) references `user` (`id`))
因為在user_article中存在user_id為1的資料,所以這裡禁止參考表刪除這條資料。
更新和刪除時的選項可以根據自己的實際情況進行修改,下面是更新和修改時的觸發機制:
on delete和on update , 可設引數:
cascade(跟隨外來鍵改動)
restrict(限制外表中的外來鍵改動)
set null(設空值)
set default(設預設值)
no action [預設]
具體的使用還需要自己多測試多使用就能理解了,其實外來鍵也不難搞懂,只是接觸的少了。平時的**中實現這一類邏輯基本是用**去實現的,所以一般不會用到外來鍵。那麼外來鍵的優勢和劣勢在**,這個估計要親身體驗才能知道了吧,
自己是自己的品牌
一 太極與水 天之道,損有餘而補不足。得太極之道,陰陽平衡,相互滲透,相互依賴,又獨守 重心 學太極之道,還是稚童,當需求真務實。以太極禪道引導自身,穩住自己的生活重心。為人處世,更若水一般 處低處,積蓄能量 一旦能力得當,當奔流入海,萬死不辭。也應如水一般,滋潤萬物,不求回報,只為實現自己的價值 ...
mysql外來鍵的應用 MySQL外來鍵應用
mysql外來鍵應用,所有tables必須是innodb型,它們不能是臨時表.因為在mysql中只有innodb型別的表才支援外來鍵.mysql版本 5.5.28 系統平台 rhel 5.8 32位 1 外來鍵的使用 外來鍵的作用,主要有兩個 乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性 ...
mysql 所有外來鍵 mysql中的外來鍵
mysql中的外來鍵 1.預設的外來鍵存在之後,會對資料進行約束。1 約束1 如果子表中新增的資料,外來鍵字段對應的資料如果在父表中不存在,那麼新增失敗。有資料之後 2 約束2 父表不能刪除 或者修改 乙個被子表引用的資料記錄 3.外來鍵約束 預設的使用者所能看到的約束都是外來鍵的一種約束 嚴格模式...