中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

MySQL外鍵級聯如何實現

發布時間:2022-07-29 09:48:45 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

本篇內容主要講解“MySQL外鍵級聯如何實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL外鍵級聯如何實現”吧!

簡介

MySQL外鍵起到約束作用,在數據庫層面保證數據的完整性。
例如使用外鍵的CASCADE(cascade串聯)類型,當子表(例如user_info)關聯父表(例如user)時,父表更新或刪除時,子表會更新或刪除記錄,這個過程是數據庫層面完成的。
早期企業系統數據庫設計里面比較多,雖說幫程序員節省了delete、update操作,實際上增加了潛規則,也增加了軟件復雜度,也會減弱性能。

所以在應用程序設計中,我們應盡量在應用層保證數據的完整性(如使用事務處理機制),而不是數據庫層面。

下面對MySQL的外鍵進行介紹。

MySQL支持外鍵的存儲引擎只有InnoDB,在創建外鍵的時候,要求父表必須有對應的索引子表在創建外鍵的時候也會自動創建對應的索引。

在創建索引的時候,可以指定在刪除、更新父表時,對子表進行的相應操作,包括

  • RESTRICT (restrict 約束 限制)

  • NO ACTION

  • SET NULL

  • CASCADE (串聯)

RESTRICT和NO ACTION相同,是指在子表有關聯記錄的情況下父表不能更新
CASCADE表示父表更新或者刪除時,更新或者刪除子表對應記錄
SET NULL則是表示父表在更新或者刪除的時候,子表的對應字段被SET NULL。

示例

因為只有InnoDB引擎才允許使用外鍵,所以,我們的數據表必須使用InnoDB引擎。

創建數據庫:

Create database test;

一、首先創建兩張表stu,sc

create table stu(
sid int UNSIGNED primary key auto_increment,
name varchar(20) not null)
TYPE=InnoDB charset=utf8;

create table sc(
scid int UNSIGNED primary key auto_increment,
sid int UNSIGNED not null,
score varchar(20) default '0',
index (sid),   --外鍵必須加索引
FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
TYPE=InnoDB charset=utf8;

–說明: 外鍵必須建立索引;

FOREIGN key(sid) 設置外鍵,把sid設為外鍵

REFERENCES stu(sid) 引用作用。引用stu表中的sid

ON DELETE CASCADE 級聯刪除
ON UPDATE CASCADE 級聯更新

二、向兩張表插入數據

insert into stu (name) value ('zxf');
insert into stu (name) value ('ls');
insert into stu (name) value ('zs');
insert into stu (name) value ('ww');

insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('2','34');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('3','56');
insert into sc(sid,score) values ('4','78');
insert into sc(sid,score) values ('4','98');

MySQL外鍵級聯如何實現

注意:在sc表中插入數據時,若插入的sid為22,則會插入失敗,違反外鍵約束,因為外鍵sid
來自stu表中的id的主鍵,即stu中的id沒有等于22的數據。

級聯刪除:將stu表中id為2的學生刪除,該學生在sc表中的成績也會級聯刪除

delete from stu where sid = '2';

MySQL外鍵級聯如何實現

級聯更新:stu表中id為3的學生更改為id為6,該學生在sc表中的對應id也會級聯更新

update stu set sid=6 where sid='3';

MySQL外鍵級聯如何實現

注意

刪除表的時候必須先刪除外鍵表(sc),再刪除主鍵表(stu)

MySQL外鍵級聯如何實現

上圖為違反外鍵約束,不能刪除

MySQL外鍵級聯如何實現

上圖為正常刪除,先刪除sc表,再刪除stu表!

到此,相信大家對“MySQL外鍵級聯如何實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东平县| 壶关县| 修文县| 黄浦区| 西青区| 武夷山市| 泊头市| 云林县| 合川市| 石台县| 五寨县| 老河口市| 会宁县| 云霄县| 江安县| 子洲县| 霸州市| 南京市| 沭阳县| 通河县| 洪泽县| 望奎县| 三明市| 阿拉善右旗| 普兰店市| 桂东县| 建瓯市| 磐石市| 清徐县| 台湾省| 昭觉县| 亳州市| 镇赉县| 嘉义市| 隆回县| 邳州市| 巫溪县| 长治市| 横峰县| 拜城县| 二连浩特市|