最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL外鍵級聯(lián)的實現(xiàn)

 更新時間:2022年07月28日 16:09:17   作者:wu_zhiyuan  
本文主要介紹了MySQL外鍵級聯(lián)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

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

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

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

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

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

  • RESTRICT (restrict 約束 限制)
  • NO ACTION
  • SET NULL
  • CASCADE (串聯(lián))

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

示例

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

創(chuàng)建數(shù)據(jù)庫:

Create database test;

一、首先創(chuàng)建兩張表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 級聯(lián)刪除
ON UPDATE CASCADE 級聯(lián)更新

二、向兩張表插入數(shù)據(jù)

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');

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

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

delete from stu where sid = '2';

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

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

注意

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

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

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

到此這篇關于MySQL外鍵級聯(lián)的實現(xiàn)的文章就介紹到這了,更多相關MySQL外鍵級聯(lián)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mysql賬戶管理原理與實現(xiàn)方法詳解

    Mysql賬戶管理原理與實現(xiàn)方法詳解

    這篇文章主要介紹了Mysql賬戶管理原理與實現(xiàn)方法,結(jié)合實例形式詳細分析了mysql賬戶管理的原理、操作技巧、相關問題解決方法與注意事項,需要的朋友可以參考下
    2020-01-01
  • MySQL、Oracle數(shù)據(jù)庫如何查看最大連接數(shù)和當前連接數(shù)

    MySQL、Oracle數(shù)據(jù)庫如何查看最大連接數(shù)和當前連接數(shù)

    在使用MySQL、Oracle數(shù)據(jù)庫時了解最大連接數(shù)和當前數(shù)據(jù)庫連接數(shù)對于優(yōu)化數(shù)據(jù)庫性能和確保系統(tǒng)穩(wěn)定性非常重要,這篇文章主要給大家介紹了關于MySQL、Oracle數(shù)據(jù)庫如何查看最大連接數(shù)和當前連接數(shù)的相關資料,需要的朋友可以參考下
    2024-04-04
  • Mysql刪除重復數(shù)據(jù)并且只保留一條(附實例!)

    Mysql刪除重復數(shù)據(jù)并且只保留一條(附實例!)

    最近有朋友打電話尋求一個SQL相關的問題,大致是表中存在重復數(shù)據(jù),需要刪除掉重復數(shù)據(jù)保留一條的場景,下面這篇文章主要給大家介紹了關于Mysql刪除重復數(shù)據(jù)并且只保留一條的相關資料,需要的朋友可以參考下
    2023-02-02
  • MySql創(chuàng)建分區(qū)的方法實例

    MySql創(chuàng)建分區(qū)的方法實例

    mysql分區(qū)相對于mysql分庫分表便利很多,可以對現(xiàn)有的mysql大表添加分區(qū),也可以對已有分區(qū)的表擴充分區(qū),下面這篇文章主要給大家介紹了關于MySql創(chuàng)建分區(qū)的相關資料,需要的朋友可以參考下
    2022-04-04
  • MySQL的左連接、右連接、內(nèi)連接用法解讀

    MySQL的左連接、右連接、內(nèi)連接用法解讀

    這篇文章主要介紹了MySQL的左連接、右連接、內(nèi)連接用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 批量殺死MySQL連接的四種方法詳解

    批量殺死MySQL連接的四種方法詳解

    這篇文章主要介紹了批量殺死MySQL連接的四種方法詳解,本文分別給出了代碼實例,需要的朋友可以參考下
    2015-05-05
  • MySQL約束與索引概念詳解

    MySQL約束與索引概念詳解

    約束是用來對數(shù)據(jù)業(yè)務規(guī)則和數(shù)據(jù)完整性進行實施、維護。約束的作用范圍僅限在當前數(shù)據(jù)庫,約束可以被當做數(shù)據(jù)庫對象來處理,它們具有名稱和關聯(lián)模式,是邏輯約束,不會因為設置約束而額外占用空間
    2023-04-04
  • MySQL中utf8mb4排序規(guī)則示例

    MySQL中utf8mb4排序規(guī)則示例

    本文主要介紹了MySQL中utf8mb4排序規(guī)則,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • MySQL數(shù)據(jù)庫優(yōu)化詳解

    MySQL數(shù)據(jù)庫優(yōu)化詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫優(yōu)化的方方面面,各種小技巧,需要的朋友可以參考下
    2014-08-08
  • MySQL中修改表結(jié)構(gòu)時需要注意的一些地方

    MySQL中修改表結(jié)構(gòu)時需要注意的一些地方

    這篇文章主要介紹了MySQL中修改表結(jié)構(gòu)時需要注意的一些地方,作者援引Percona的相關的說明來講述如何避免相關操作導致表無法使用的問題,一些需要的朋友可以參考下
    2015-06-06

最新評論

濮阳县| 遂平县| 静安区| 湖南省| 贵德县| 青河县| 永善县| 兰溪市| 固安县| 泗洪县| 陆河县| 大英县| 兰坪| 牡丹江市| 营口市| 滨州市| 武宁县| 缙云县| 兴仁县| 康乐县| 公主岭市| 隆德县| 大石桥市| 虞城县| 游戏| 海晏县| 丰镇市| 仪陇县| 兰州市| 英德市| 青岛市| 铜陵市| 上思县| 融水| 乐亭县| 油尖旺区| 固始县| 乐东| 如皋市| 贡山| 阿合奇县|