詳細(xì)說明可以百度搜我的博客: mysql foreign外鍵詳細(xì)使用方法和使用事項(xiàng)_2018_lcf
創(chuàng)新互聯(lián)建站始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)整合營銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:航空箱等企業(yè),備受客戶贊譽(yù)。
---------下面是使用方法
使用外鍵的前提:
1. 表儲(chǔ)存引擎必須是innodb,否則創(chuàng)建的外鍵無約束效果。
2. 外鍵的列類型必須與父表的主鍵類型完全一致。
3. 外鍵的名字不能重復(fù)(一般使用。
建外鍵表兩種方式(創(chuàng)建表時(shí)關(guān)聯(lián)/添加外鍵)
1) 第一種方式創(chuàng)建表時(shí)加外鍵使用實(shí)例:
mysql create table A( name char(12), id int(8) ,index(id))engine=innodb; //先建立A表,
mysql create table B( //建立B表,同時(shí)做外鍵
- id int(9),
- money int(9),
- index(id),
- foreign key(id) references A (id) //這個(gè)是必加項(xiàng),foreign key(B表要關(guān)聯(lián)的字段),references A表名 (對(duì)應(yīng)字段)
- on delete cascade on update cascade //這里是可選項(xiàng)的,只加一項(xiàng)或都不加都可以的,看需求.
- )engine=innodb; //這個(gè)必須是innodb類型,并且和A表的一致
第二方式在已有的表上做和A表關(guān)聯(lián)的外鍵(最好是新建好沒有記錄的,不然會(huì)因?yàn)橛涗泴?duì)不上而創(chuàng)建不成功)
mysql create table C( //這里先創(chuàng)建一個(gè)空表C
- id int(7),
- money int(5),
- index(id)
- )engine=innodb;
mysql alter table Cadd constraint abc //在C表上添加和表A關(guān)聯(lián)的外鍵,constraint 外鍵名(自己任意取)
- foreign key(id) references A(id) //和創(chuàng)建時(shí)一樣的輸入
- on delete cascade on update cascade; //一樣是可選項(xiàng),這行不寫也可以通過.
注: @以上的cascade是上面介強(qiáng)的四種模式之一,是可以替換成其它模式的,如寫成on update set null
@還可以同時(shí)做兩個(gè)外鍵,如寫成foreign key(id,money) references A(id,money) 即可
@兩張表關(guān)聯(lián)字段名可以取不一樣名字,但類型必須一致
alter table table_name add constraint fk_column_id foreign key(column) references 主鍵表 (column_id);
create table t1
(id int primary key,
name varchar(20)
);
create table t2
(
remark varchar(50),
p_id int references t1(id) /*表示列p_id外鍵關(guān)聯(lián)于表t1的列id*/
);
需要注意的問題:
1、t1的id必須為key
2、關(guān)聯(lián)的2個(gè)列的數(shù)據(jù)類型必須一致且必須長度完全一樣。
數(shù)據(jù)庫mysql
建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。
外鍵作用:使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!
指定主鍵關(guān)鍵字:foreignkey(列名)
引用外鍵關(guān)鍵字:references外鍵表名(外鍵列名)
事件觸發(fā)限制:ondelete和onupdate,可設(shè)參數(shù)cascade(跟隨外鍵改動(dòng)),restrict(限制外表中的外鍵改動(dòng)),setNull(設(shè)空值),setDefault(設(shè)默認(rèn)值),[默認(rèn)]noaction
例如:
outTable表主鍵id類型int
創(chuàng)建含有外鍵的表:
createtabletemp(
idint,
namechar(20),
foreignkey(id)referencesoutTable(id)ondeletecascadeonupdatecascade);
說明:把id列設(shè)為外鍵參照外表outTable的id列當(dāng)外鍵的值刪除本表中對(duì)應(yīng)的列篩除當(dāng)外鍵的值改變本表中對(duì)應(yīng)的列值改變。
自己實(shí)踐才能完全了解外鍵的作用關(guān)鍵是:事件觸發(fā)限制的作用
mysql添加外鍵:
為已經(jīng)添加好的數(shù)據(jù)表添加外鍵:
語法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對(duì)應(yīng)的表的主鍵字段名);
例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
//FK_ID是外鍵的名稱
/*
CREATE TABLE `tb_active` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `user_id_2` (`user_id`),
CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
*/