1、只有InnoDB類型的表才可以使用外鍵。mysql默認(rèn)是MyISAM,這種類型不支持外鍵約束
創(chuàng)新互聯(lián)公司是一家網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),提供網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需網(wǎng)站開(kāi)發(fā),網(wǎng)站開(kāi)發(fā)公司,2013年開(kāi)創(chuàng)至今是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開(kāi)發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專業(yè)建議和思路。
2、外鍵的好處:可以使得兩張表關(guān)聯(lián),保證數(shù)據(jù)的一致性和實(shí)現(xiàn)一些級(jí)聯(lián)操作。
3、外鍵的作用:
保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。 使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值。
4、建立外鍵的前提:
兩個(gè)表必須是InnoDB表類型。
使用在外鍵關(guān)系的域必須為索引型(Index)。
使用在外鍵關(guān)系的域必須與數(shù)據(jù)類型相似。
5、創(chuàng)建的步驟
指定主鍵關(guān)鍵字: foreign key(列名)。
引用外鍵關(guān)鍵字: references 外鍵表名(外鍵列名)。
6、事件觸發(fā)限制:on delete和on update , 可設(shè)參數(shù)cascade(跟隨外鍵改動(dòng))。
restrict(限制外表中的外鍵改動(dòng)),set
Null(設(shè)空值),set Default(設(shè)默認(rèn)值)。
[默認(rèn)]no action
7、舉例
outTable表 主鍵 id 類型 int
創(chuàng)建含有外鍵的表:
代碼如下:
create table temp(
id int,
name
char(20),
foreign key(id) references outTable(id) on delete cascade on update
cascade);
說(shuō)明:把id列 設(shè)為外鍵 參照外表outTable的id列 當(dāng)外鍵的值刪除 本表中對(duì)應(yīng)的列篩除 當(dāng)外鍵的值改變 本表中對(duì)應(yīng)的列值改變。
代碼如下:
create table temp( id int, name char(20),
foreign key(id) references outTable(id) on delete cascade on update
cascade);
mysql增加外鍵的方法:1、在CREATE TABLE語(yǔ)句中,通過(guò)FOREIGN KEY關(guān)鍵字來(lái)添加外鍵;2、在ALTER TABLE語(yǔ)句中,通過(guò)ADD和FOREIGN KEY關(guān)鍵字來(lái)添加外鍵。
推薦課程:MySQL教程。
MySQL 外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用。對(duì)于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)。
外鍵用來(lái)建立主表與從表的關(guān)聯(lián)關(guān)系,為兩個(gè)表的數(shù)據(jù)建立連接,約束兩個(gè)表中數(shù)據(jù)的一致性和完整性。比如,一個(gè)水果攤,只有蘋果、桃子、李子、西瓜等 4 種水果,那么,你來(lái)到水果攤要買水果就只能選擇蘋果、桃子、李子和西瓜,其它的水果都是不能購(gòu)買的。
主表刪除某條記錄時(shí),從表中與之對(duì)應(yīng)的記錄也必須有相應(yīng)的改變。一個(gè)表可以有一個(gè)或多個(gè)外鍵,外鍵可以為空值,若不為空值,則每一個(gè)外鍵的值必須等于主表中主鍵的某個(gè)值。
定義外鍵時(shí),需要遵守下列規(guī)則:
主表必須已經(jīng)存在于數(shù)據(jù)庫(kù)中,或者是當(dāng)前正在創(chuàng)建的表。如果是后一種情況,則主表與從表是同一個(gè)表,這樣的表稱為自參照表,這種結(jié)構(gòu)稱為自參照完整性。
必須為主表定義主鍵。
主鍵不能包含空值,但允許在外鍵中出現(xiàn)空值。也就是說(shuō),只要外鍵的每個(gè)非空值出現(xiàn)在指定的主鍵中,這個(gè)外鍵的內(nèi)容就是正確的。
在主表的表名后面指定列名或列名的組合。這個(gè)列或列的組合必須是主表的主鍵或候選鍵。
外鍵中列的數(shù)目必須和主表的主鍵中列的數(shù)目相同。
外鍵中列的數(shù)據(jù)類型必須和主表主鍵中對(duì)應(yīng)列的數(shù)據(jù)類型相同。
在創(chuàng)建表時(shí)設(shè)置外鍵約束
在 CREATE TABLE 語(yǔ)句中,通過(guò) FOREIGN KEY 關(guān)鍵字來(lái)指定外鍵,具體的語(yǔ)法格式如下:
1
2
[CONSTRAINT 外鍵名] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES 主表名 主鍵列1 [,主鍵列2,…]
例 1
為了展現(xiàn)表與表之間的外鍵關(guān)系,本例在 test_db 數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)部門表 tb_dept1,表結(jié)構(gòu)如下表所示。
創(chuàng)建 tb_dept1 的 SQL 語(yǔ)句和運(yùn)行結(jié)果如下所示。
1
2
3
4
5
6
7
mysql CREATE TABLE tb_dept1
- (
- id INT(11) PRIMARY KEY,
- name VARCHAR(22) NOT NULL,
- location VARCHAR(50)
- );
Query OK, 0 rows affected (0.37 sec)
創(chuàng)建數(shù)據(jù)表 tb_emp6,并在表 tb_emp6 上創(chuàng)建外鍵約束,讓它的鍵 deptId 作為外鍵關(guān)聯(lián)到表 tb_dept1 的主鍵 id,SQL 語(yǔ)句和運(yùn)行結(jié)果如下所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql CREATE TABLE tb_emp6
- (
- id INT(11) PRIMARY KEY,
- name VARCHAR(25),
- deptId INT(11),
- salary FLOAT,
- CONSTRAINT fk_emp_dept1
- FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
- );
Query OK, 0 rows affected (0.37 sec)
mysql DESC tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field? | Type??????? | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id???? | int(11)???? | NO?? | PRI | NULL??? |?????? |
| name?? | varchar(25) | YES? |???? | NULL??? |?????? |
| deptId | int(11)???? | YES? | MUL | NULL??? |?????? |
| salary | float?????? | YES? |???? | NULL??? |?????? |
+--------+-------------+------+-----+---------+-------+
4 rows in set (1.33 sec)
以上語(yǔ)句執(zhí)行成功之后,在表 tb_emp6 上添加了名稱為 fk_emp_dept1 的外鍵約束,外鍵名稱為 deptId,其依賴于表 tb_dept1 的主鍵 id。
注意:從表的外鍵關(guān)聯(lián)的必須是主表的主鍵,且主鍵和外鍵的數(shù)據(jù)類型必須一致。例如,兩者都是 INT 類型,或者都是 CHAR 類型。如果不滿足這樣的要求,在創(chuàng)建從表時(shí),就會(huì)出現(xiàn)“ERROR 1005(HY000): Can't create table”錯(cuò)誤。
在修改表時(shí)添加外鍵約束
外鍵約束也可以在修改表時(shí)添加,但是添加外鍵約束的前提是:從表中外鍵列中的數(shù)據(jù)必須與主表中主鍵列中的數(shù)據(jù)一致或者是沒(méi)有數(shù)據(jù)。
在修改數(shù)據(jù)表時(shí)添加外鍵約束的語(yǔ)法格式如下:
閱讀剩余部分
相關(guān)閱讀
mysql日期如何轉(zhuǎn)字符串
【mysql數(shù)據(jù)庫(kù)】第三章解讀:服務(wù)器性能剖析(上)
mysql case when的用法是什么
mysql關(guān)閉后自動(dòng)重啟怎么辦
mysql精講之二:dml數(shù)據(jù)操作語(yǔ)句
淺析mysql中concat以及group_concat的使用
mysql如何來(lái)創(chuàng)建表
mysql怎么清空數(shù)據(jù)表數(shù)據(jù)
mysql安裝配置jdbc和基礎(chǔ)學(xué)習(xí)
mysql怎么加入一個(gè)數(shù)據(jù)庫(kù)?
通過(guò)工具NAVICAT 設(shè)計(jì)表時(shí)進(jìn)行設(shè)計(jì)
打開(kāi)NAVICAT,連接數(shù)據(jù)庫(kù)
右鍵目標(biāo)表,選擇設(shè)計(jì)表
打開(kāi)后選擇外鍵菜單,具體如圖:
分別設(shè)置外鍵名,字段,關(guān)聯(lián)數(shù)據(jù)庫(kù)、表、字段,以及刪除時(shí)操作,更新時(shí)操作方式然后點(diǎn)擊保存按鈕即可
也可以通過(guò)SQL方式完成對(duì)表外鍵的添加,如:
語(yǔ)法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對(duì)應(yīng)的表的主鍵字段名);
mysql添加外鍵的操作要自己輸?shù)姆椒ㄈ缦拢?/p>
1、在CREATETABLE語(yǔ)句中,通過(guò)FOREIGNKEY關(guān)鍵字來(lái)添加外鍵。
2、在ALTERTABLE語(yǔ)句中,通過(guò)ADD和FOREIGNKEY關(guān)鍵字來(lái)添加外鍵。
分享標(biāo)題:用mysql怎么使用外鍵 mysql如何設(shè)置外鍵
網(wǎng)站鏈接:http://vcdvsql.cn/article42/hpijec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、電子商務(wù)、網(wǎng)站策劃、小程序開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)公司、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)