主頁(yè) > 知識(shí)庫(kù) > MySQL中外鍵的創(chuàng)建、約束以及刪除

MySQL中外鍵的創(chuàng)建、約束以及刪除

熱門標(biāo)簽:怎樣在地圖標(biāo)注銷售區(qū)域 啥是企業(yè)400電話辦理 南昌三維地圖標(biāo)注 外呼系統(tǒng)打電話上限是多少 地圖標(biāo)注費(fèi)用是多少 百應(yīng)電話機(jī)器人優(yōu)勢(shì) 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 曲靖移動(dòng)外呼系統(tǒng)公司 電話外呼系統(tǒng)改號(hào)

前言

在MySQL 3.23.44版本后,InnoDB引擎類型的表支持了外鍵約束。

外鍵的使用條件:

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

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

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

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

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

語(yǔ)法一:后續(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;

語(yǔ)法二:創(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;

一個(gè)額外點(diǎn):

SHOW CREATE TABLE class

可以查詢表的建表信息

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)建的這個(gè)學(xué)生表和班級(jí)表

內(nèi)容如下

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

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

  1. CASCADE 子表會(huì)刪除包含與已刪除鍵值有參照關(guān)系的所有數(shù)據(jù)
  2. SET NULL 父表delete、update的時(shí)候,子表會(huì)將關(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)行刪除操作時(shí)

delete from class WHERE cls_id=1

結(jié)果如下

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

delete from student WHERE cls_id=1

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

UPDATE class set cls_id=4 where cls_id=1

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

三,刪除外鍵的方法

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

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

總結(jié)

到此這篇關(guān)于MySQL中外鍵創(chuàng)建、約束以及刪除的文章就介紹到這了,更多相關(guān)MySQL外鍵創(chuàng)建、約束及刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL非空約束(not null)案例講解
  • MySQL外鍵約束(FOREIGN KEY)案例講解
  • MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)
  • MySQL完整性約束的定義與實(shí)例教程
  • MySQL 8.0新特性 — 檢查性約束的使用簡(jiǎn)介
  • Mysql中索引和約束的示例語(yǔ)句
  • MySQL外鍵約束的實(shí)例講解
  • 詳解MySQL 外鍵約束
  • mysql完整性約束實(shí)例詳解
  • MySQL約束超詳解

標(biāo)簽:荊州 吉林 錦州 甘南 滄州 隨州 資陽(yáng) 黑河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL中外鍵的創(chuàng)建、約束以及刪除》,本文關(guān)鍵詞  MySQL,中外,鍵,的,創(chuàng)建,約束,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL中外鍵的創(chuàng)建、約束以及刪除》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL中外鍵的創(chuàng)建、約束以及刪除的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章