一張表中的主鍵只能有一個,外鍵可以有多個,如果一張表中多個列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個問題的需求可以考慮用如下方法解決:
成都創(chuàng)新互聯(lián)專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,四川樂山服務(wù)器托管,四川樂山服務(wù)器托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
把a(bǔ)表中的bookid和authorid都設(shè)置為非空并且唯一,即
create table a(bookid int not null unique, authorid int not null unique);
然后在book表和author表中就可以分別設(shè)置外鍵來參照a表中兩個不同的字段了。
打開我的navicat,然后找到我的teacher表,選中它,然后點擊菜單欄上的‘design table'
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。
3. 然后會出現(xiàn)一個設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁ame’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫?!甊eference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null.
4. 設(shè)置完成后點擊‘save’保存退出,也可以點擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點擊菜單欄上的‘design table’。如下圖:
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。如下圖:
3. 然后會出現(xiàn)一個設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁ame’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫?!甊eference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null。如圖
4. 設(shè)置完成后點擊‘save’保存退出,也可以點擊‘a(chǎn)dd Foreign Key’再添加一個外鍵。k如圖:
工具/原料
電腦??MySQL
方法/步驟
設(shè)置主鍵:
1、通過終端進(jìn)入到mysql命令行工具。
2、通過use關(guān)鍵字進(jìn)行到目標(biāo)數(shù)據(jù)庫里。
3、如原表已有主鍵,先把原來的主鍵刪除掉,通過DROPPRIMARYKEY命令:ALTERTABLE`jingyan`DROPPRIMARYKEY;。
4、主鍵已經(jīng)沒有了。
5、通過命令:ADDPRIMARYKEY來添加ALTERTABLE`jingyan`ADDPRIMARYKEY(`id`)。
6、輸入后按下回車鍵即可看到queryok執(zhí)行成功的字符。
7、回到數(shù)據(jù)庫的可視化工具,即可顯示現(xiàn)在的表在id列上添加了主鍵了。
設(shè)置外鍵:
1、創(chuàng)建好主從表。
2、選擇主表,點擊設(shè)計表,進(jìn)入到表設(shè)計界面。
3、點擊外鍵,進(jìn)入到外鍵設(shè)置界面。
4、先設(shè)置外鍵名稱和選擇主表的外鍵字段。
5、然后在設(shè)置外鍵字段對應(yīng)從表的數(shù)據(jù)庫、表名和字。
6、點擊保存就完成外鍵設(shè)置了。
詳細(xì)說明可以百度搜我的博客: mysql foreign外鍵詳細(xì)使用方法和使用事項_2018_lcf
---------下面是使用方法
使用外鍵的前提:
1. 表儲存引擎必須是innodb,否則創(chuàng)建的外鍵無約束效果。
2. 外鍵的列類型必須與父表的主鍵類型完全一致。
3. 外鍵的名字不能重復(fù)(一般使用。
建外鍵表兩種方式(創(chuàng)建表時關(guān)聯(lián)/添加外鍵)
1) 第一種方式創(chuàng)建表時加外鍵使用實例:
mysql create table A( name char(12), id int(8) ,index(id))engine=innodb; //先建立A表,
mysql create table B( //建立B表,同時做外鍵
- id int(9),
- money int(9),
- index(id),
- foreign key(id) references A (id) //這個是必加項,foreign key(B表要關(guān)聯(lián)的字段),references A表名 (對應(yīng)字段)
- on delete cascade on update cascade //這里是可選項的,只加一項或都不加都可以的,看需求.
- )engine=innodb; //這個必須是innodb類型,并且和A表的一致
第二方式在已有的表上做和A表關(guān)聯(lián)的外鍵(最好是新建好沒有記錄的,不然會因為記錄對不上而創(chuàng)建不成功)
mysql create table C( //這里先創(chuàng)建一個空表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)建時一樣的輸入
- on delete cascade on update cascade; //一樣是可選項,這行不寫也可以通過.
注: @以上的cascade是上面介強(qiáng)的四種模式之一,是可以替換成其它模式的,如寫成on update set null
@還可以同時做兩個外鍵,如寫成foreign key(id,money) references A(id,money) 即可
@兩張表關(guān)聯(lián)字段名可以取不一樣名字,但類型必須一致
create
table
volunteer(
志愿者編號
varchar(6)
not
null,
志愿者姓名
varchar(8),
班級編號
varchar(4),
constraint
PK_V
primary
key
(志愿者編號));
create
table
class(
班級編號
varchar(4),
班級名稱
varchar(20),
學(xué)院
varchar(20),
constraint
PK_C
primary
key(班級編號),
班級編號
varchar
foreign
key
references
volunteer(班級編號));
你這個試下,我試了可以的
希望可以幫到你
SQL
創(chuàng)建外鍵語句的方法:constraint
外鍵名字
foreign
key
references
外鍵表(外鍵字段)
數(shù)據(jù)庫mysql
建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。
外鍵作用:使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!
指定主鍵關(guān)鍵字:foreignkey(列名)
引用外鍵關(guān)鍵字:references外鍵表名(外鍵列名)
事件觸發(fā)限制:ondelete和onupdate,可設(shè)參數(shù)cascade(跟隨外鍵改動),restrict(限制外表中的外鍵改動),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)外鍵的值刪除本表中對應(yīng)的列篩除當(dāng)外鍵的值改變本表中對應(yīng)的列值改變。
自己實踐才能完全了解外鍵的作用關(guān)鍵是:事件觸發(fā)限制的作用