欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

簡介

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

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

下面對MySQL的外鍵進(jìn)行介紹。

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

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

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

RESTRICT和NO ACTION相同,是指在子表有關(guān)聯(lián)記錄的情況下父表不能更新;
CASCADE表示父表更新或者刪除時,更新或者刪除子表對應(yīng)記錄
SET NULL則是表示父表在更新或者刪除的時候,子表的對應(yīng)字段被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) 設(shè)置外鍵,把sid設(shè)為外鍵

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的學(xué)生刪除,該學(xué)生在sc表中的成績也會級聯(lián)刪除

delete from stu where sid = '2';

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

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

注意

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

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

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

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

相關(guān)文章

  • 日常收集整理常見的mysql sql技巧

    日常收集整理常見的mysql sql技巧

    本篇內(nèi)容是小編日常收集整理常見的mysql sql技巧,對大家學(xué)習(xí)mysql sql技巧相關(guān)內(nèi)容有所幫助,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • MySQL修改配置 區(qū)分大小寫

    MySQL修改配置 區(qū)分大小寫

    修改MySql Server安裝目錄下的 my.ini 文件,在mysqld節(jié)下加入下面一行 set-variable=lower_case_table_names=0 (0:大小寫敏感;1:大小寫不敏感)最后重啟一下MySql服務(wù)即可。
    2010-12-12
  • 新手學(xué)習(xí)MySQL索引

    新手學(xué)習(xí)MySQL索引

    如果正確合理設(shè)計并且使用索引的MySQL是一輛蘭博基尼的話,那么沒有索引的MySQL就是一個人力三輪車。通常大型網(wǎng)站單日就可能會產(chǎn)生幾十萬甚至幾百萬的數(shù)據(jù),沒有索引查詢會變的非常緩慢,下面小編來帶大家了解下索引
    2019-05-05
  • mysql查詢語句通過limit來限制查詢的行數(shù)

    mysql查詢語句通過limit來限制查詢的行數(shù)

    這篇文章主要介紹了mysql查詢語句,通過limit來限制查詢的行數(shù),需要的朋友可以參考下
    2014-02-02
  • MySQL數(shù)據(jù)表分區(qū)策略及優(yōu)缺點分析

    MySQL數(shù)據(jù)表分區(qū)策略及優(yōu)缺點分析

    項目開發(fā)中,隨著數(shù)據(jù)庫數(shù)據(jù)量越來越大,單個表中數(shù)據(jù)太多,從而導(dǎo)致查詢速度變慢,而且由于表的鎖機(jī)制導(dǎo)致應(yīng)用操作也受到嚴(yán)重影響,出現(xiàn)了數(shù)據(jù)庫性能瓶頸。因此我們需要考慮分表與分區(qū),MySQL分表分區(qū)就是為了解決大數(shù)據(jù)量導(dǎo)致MySQL性能低下的問題。
    2021-05-05
  • MYSQL本地安裝以及出現(xiàn)的問題解決

    MYSQL本地安裝以及出現(xiàn)的問題解決

    這篇文章主要給大家介紹了關(guān)于MYSQL本地安裝以及出現(xiàn)問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 解決MySQL登錄報錯1045-Access?denied?for?user?'root'@' '(using?password:YES)

    解決MySQL登錄報錯1045-Access?denied?for?user?'root'@

    這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報錯1045-Access?denied?for?user?‘root‘@‘‘(using?password:YES)的相關(guān)資料,文中一步步將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • MySql分頁時使用limit+order by會出現(xiàn)數(shù)據(jù)重復(fù)問題解決

    MySql分頁時使用limit+order by會出現(xiàn)數(shù)據(jù)重復(fù)問題解決

    在MySQL中我們通常會采用limit來進(jìn)行翻頁查詢,當(dāng)limit遇到 order by的時候會出現(xiàn)數(shù)據(jù)重復(fù)問題,本文就來記錄一下,感興趣的可以了解一下
    2021-08-08
  • 探討:MySQL中如何查詢當(dāng)前正在運行的SQL語句

    探討:MySQL中如何查詢當(dāng)前正在運行的SQL語句

    本篇文章是對在MySQL中如何查詢當(dāng)前正在運行的SQL語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql 5.7.18 winx64安裝配置方法圖文教程

    mysql 5.7.18 winx64安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了windows7下mysql 5.7.18 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論