詳細(xì)說(shuō)明可以百度搜我的博客: mysql foreign外鍵詳細(xì)使用方法和使用事項(xiàng)_2018_lcf
成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站制作公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!
---------下面是使用方法
使用外鍵的前提:
1. 表儲(chǔ)存引擎必須是innodb,否則創(chuàng)建的外鍵無(wú)約束效果。
2. 外鍵的列類(lèi)型必須與父表的主鍵類(lèi)型完全一致。
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類(lèi)型,并且和A表的一致
第二方式在已有的表上做和A表關(guān)聯(lián)的外鍵(最好是新建好沒(méi)有記錄的,不然會(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),這行不寫(xiě)也可以通過(guò).
注: @以上的cascade是上面介強(qiáng)的四種模式之一,是可以替換成其它模式的,如寫(xiě)成on update set null
@還可以同時(shí)做兩個(gè)外鍵,如寫(xiě)成foreign key(id,money) references A(id,money) 即可
@兩張表關(guān)聯(lián)字段名可以取不一樣名字,但類(lèi)型必須一致
當(dāng)發(fā)生此類(lèi)的錯(cuò)誤的時(shí)候,從三個(gè)角度入手:
1、確保主表有主鍵。
2、確保主從表數(shù)據(jù)引擎為InnoDB類(lèi)型。
3、確定從表外鍵字段類(lèi)型與主表一致。
1)主鍵是什么,主鍵在數(shù)據(jù)表中是唯一的標(biāo)示,主鍵在一個(gè)表中是不允許重復(fù)的;
2)外鍵是什么,外鍵是主鍵表的一個(gè)對(duì)應(yīng)關(guān)系表的連接標(biāo)示;
在建立外鍵前你要確定,外鍵表是否已經(jīng)建立;
從你的sql語(yǔ)句中可以看出你的錯(cuò)誤:不說(shuō)你關(guān)聯(lián)表是不是存在;
先看你主鍵建立:gid int not null primary key,
你在這里已經(jīng)把gid這個(gè)屬性定義為主鍵了,
在下面foreign key (gid) references goods (gid),gid字段設(shè)置為外鍵就明顯的有語(yǔ)法錯(cuò)誤;