mysql 自己是自己的外來鍵 mysql外來鍵的使用

2021-10-17 12:50:58 字數 2018 閱讀 6818

一早就知道有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.外來鍵約束 預設的使用者所能看到的約束都是外來鍵的一種約束 嚴格模式...