溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在MySQL中創(chuàng)建與刪除外鍵

發(fā)布時間:2021-01-18 14:49:59 來源:億速云 閱讀:121 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)怎么在MySQL中創(chuàng)建與刪除外鍵,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

外鍵的使用條件:

1.兩個表必須是InnoDB表,MyISAM表暫時不支持外鍵(據(jù)說以后的版本有可能支持,但至少目前不支持);

2.外鍵列必須建立了索引,MySQL 4.1.2以后的版本在建立外鍵時會自動創(chuàng)建索引,但如果在較早的版本則需要顯示建立;

3.外鍵關(guān)系的兩個表的列必須是數(shù)據(jù)類型相似,也就是可以相互轉(zhuǎn)換類型的列,比如int和tinyint可以,而int和char則不可以;

外鍵的好處:可以使得兩張表關(guān)聯(lián),保證數(shù)據(jù)的一致性和實現(xiàn)一些級聯(lián)操作;

一、外鍵的創(chuàng)建

語法一:后續(xù)添加方法

alter table 表名 add constraint 約束名 foreign key(當(dāng)前表中約束的字段) references 主表表名(要約束的字段名);
alter table student add constraint fk_class_student foreign key(cls_id) class(cls_id) on update cascade on delete no action;

語法二:創(chuàng)建表的方法

CREATE TABLE student(
sid int PRIMARY KEY,
cls_id int not null,
sname varchar(10) not null,
constraint fk_class_student foreign key(cls_id) references class(cls_id) on update cascade on delete no action
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

一個額外點:

SHOW CREATE TABLE class

可以查詢表的建表信息

怎么在MySQL中創(chuàng)建與刪除外鍵

CREATE TABLE `class` (
 `cls_id` int NOT NULL,
 `cls_name` varchar(15) NOT NULL,
 PRIMARY KEY (`cls_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

下面的演示我們就使用剛剛創(chuàng)建的這個學(xué)生表和班級表

內(nèi)容如下

怎么在MySQL中創(chuàng)建與刪除外鍵

怎么在MySQL中創(chuàng)建與刪除外鍵

二,關(guān)于四種約束方式

在父表上進(jìn)行update/delete操作時,子表的操作類型

  1. CASCADE 子表會刪除包含與已刪除鍵值有參照關(guān)系的所有數(shù)據(jù)

  2. SET NULL 父表delete、update的時候,子表會將關(guān)聯(lián)記錄的外鍵字段所在列設(shè)為null

  3. RESTRICT 拒絕有關(guān)聯(lián)關(guān)系的字段的刪除要求(這是默認(rèn)設(shè)置,也是最安全的設(shè)置)

  4. NO ACTION 和RESTRICT 類似

以我們剛剛設(shè)置的外鍵為例(on update cascade on delete no action)

當(dāng)我們嘗試進(jìn)行刪除操作時

delete from class WHERE cls_id=1

結(jié)果如下

怎么在MySQL中創(chuàng)建與刪除外鍵

可以看到由于外鍵約束中on delete no action的存在,不允許對主表進(jìn)行刪除操作。但是子表可以

delete from student WHERE cls_id=1

怎么在MySQL中創(chuàng)建與刪除外鍵

當(dāng)我們對父表的關(guān)聯(lián)鍵進(jìn)行更新操作時,由于on update cascade的存在,可以正常更新

UPDATE class set cls_id=4 where cls_id=1

怎么在MySQL中創(chuàng)建與刪除外鍵

并且隨著主表的更新,子表中的外鍵字段也進(jìn)行了更新

怎么在MySQL中創(chuàng)建與刪除外鍵

三,刪除外鍵的方法

alter table 子表名 drop foreign key 外鍵約束名
alter table student drop foreign key fk_class_student

當(dāng)我們將外鍵刪除之后,父表的操作就變得可以正常進(jìn)行了

怎么在MySQL中創(chuàng)建與刪除外鍵

看完上述內(nèi)容,你們對怎么在MySQL中創(chuàng)建與刪除外鍵有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI