久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql外鍵怎么使用

共計(jì) 2271 個(gè)字符,預(yù)計(jì)需要花費(fèi) 6 分鐘才能閱讀完成。

本篇內(nèi)容主要講解“mysql 外鍵怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓丸趣 TV 小編來(lái)帶大家學(xué)習(xí)“mysql 外鍵怎么使用”吧!

mysql 外鍵是一個(gè)非常好用的數(shù)據(jù)處理功能,可以快速地進(jìn)行表之間的數(shù)據(jù)更新;簡(jiǎn)單的來(lái)說(shuō)就是可以將兩張表之間建立一個(gè)關(guān)聯(lián),能做到操作一張表的時(shí)候,另外一個(gè)表的數(shù)據(jù)也會(huì)同步發(fā)生變化。

Mysql 外鍵的使用

外鍵是一個(gè)非常非常好用的一個(gè)東西,同時(shí)也是很多種關(guān)系數(shù)據(jù)庫(kù)都有的一種功能,簡(jiǎn)單的來(lái)說(shuō)就是可以將兩張表之間建立一個(gè)關(guān)聯(lián),可以做到操作一張表的時(shí)候,另外一個(gè)表的數(shù)據(jù)也會(huì)同步發(fā)生變化。

例子:

 一個(gè)學(xué)生表里面有學(xué)生的所有信息,其中有一個(gè)字段是班級(jí) id,又有一個(gè)班級(jí)表,記錄著所有的班級(jí)信息,按照邏輯來(lái)說(shuō),如果我們刪除了班級(jí)
表里面的某個(gè)班級(jí),學(xué)生表里面是這個(gè)班級(jí) id 的信息就應(yīng)該修改。

以上的例子我們?nèi)绻鞘褂贸绦蚴强梢哉5耐瓿傻模葎h除這個(gè)班級(jí),再在學(xué)生表里將是這個(gè)班級(jí)的學(xué)生信息的班級(jí) id 字段進(jìn)行修改,分為這兩部。但是這個(gè)如果我們使用了外鍵,只需要一步就可以了呀,關(guān)聯(lián)了外鍵 只要一個(gè)有修改,另外一個(gè)會(huì)自動(dòng)的更新過(guò)去,顯然這個(gè)是更加符合程序的。也更輕松

使用前的細(xì)節(jié)

數(shù)據(jù)庫(kù)在選用存儲(chǔ)引擎的時(shí)候要選擇適配外鍵的存儲(chǔ)引擎,如 mysql 的默認(rèn)存儲(chǔ)引擎 innodb

相互關(guān)聯(lián)的外鍵字段的字段類型必須要保持一致,如學(xué)生表的 class_id 是 int 類型,那么班級(jí)表的 class_id 的類型最好也要使用 int 類型,這個(gè)十分的重要

在新表中創(chuàng)建外鍵約束

create table stu_study (
  sid int primary key auto_increment,--  定義 Sid 
 sname varchar(15) not null,
 course_id int default null, --  定義課程 id  課程 id 是外鍵所以要與關(guān)聯(lián)的主表的字段類型保持一致
 constraint stu_study_class --  一個(gè)表里可能有多個(gè)表之間關(guān)聯(lián),所以外鍵需要起一個(gè)名字
 foreign key (class_id) --  關(guān)聯(lián)的外鍵名
 references classes(id) --  關(guān)聯(lián)的主表和主表的字段
 on delete cascade --  當(dāng)刪除的時(shí)候觸發(fā)
 )engine=InnoDB default charset utf8 --  默認(rèn)存儲(chǔ)引擎和編碼的字符串 

mysql 外鍵怎么使用

在已有的表中進(jìn)行外鍵的添加和刪除

刪除外鍵
···
– 刪除外鍵(外鍵約束)
alter table stu_study drop foreign key stu_study_classes;
···
mysql 外鍵怎么使用

刪除外鍵是通過(guò)在表格中根據(jù)外鍵名進(jìn)行刪除,這個(gè)也是間接的讓我們知道了外鍵名是不能夠重復(fù)的。

添加外鍵

--  添加外鍵
 alter table stu_study add
 constraint stu_study_classes --  外鍵名   是一定不能夠重復(fù)的,通常會(huì)用關(guān)聯(lián)的兩個(gè)表名進(jìn)行命名
 foreign key(course_id)
 references classes(id)
 on delete cascade;

mysql 外鍵怎么使用
在已有的表中添加外鍵和創(chuàng)建表的時(shí)候添加外鍵是非常像的,有個(gè)細(xì)節(jié)就是他要使用 contraint 外鍵名 來(lái)設(shè)置外鍵的名稱
外鍵的增加修改我們會(huì)發(fā)現(xiàn)和表格字段的增加修改是很像的,使用的關(guān)鍵字都是 add drop 等等

關(guān)聯(lián)動(dòng)作的操作

子表
mysql 外鍵怎么使用
主表
mysql 外鍵怎么使用
字表和子表我們可以簡(jiǎn)單的理解成,設(shè)置了外鍵的那個(gè)表就是子表
關(guān)聯(lián)動(dòng)作有很多種,如 cascade,set Null,no action 這三個(gè)都是在設(shè)置外鍵的時(shí)候設(shè)置關(guān)聯(lián)動(dòng)作,如
mysql 外鍵怎么使用
表示的是在刪除時(shí)的執(zhí)行的動(dòng)作,主要區(qū)別如下:

cascade 刪除主表的某個(gè)字段的時(shí)候,子表含有這個(gè)字段的數(shù)據(jù)會(huì)被清空,這個(gè)還是屬于相對(duì)危險(xiǎn)的一個(gè)操作的

+set null 刪除主表的某個(gè)字段的時(shí)候,子表含有這個(gè)字段的這個(gè)哪一行的這個(gè)字段會(huì)用 null 來(lái)顯示,但是有個(gè)細(xì)節(jié)就是設(shè)置外鍵的這個(gè)字段字段類型就不能設(shè)置為 not null 類型的,否則會(huì)報(bào)錯(cuò)

no action 這個(gè)字段會(huì)比較有意思,也就是說(shuō)當(dāng)主表要?jiǎng)h除某個(gè)行的時(shí)候,如果外鍵關(guān)聯(lián)有含有這個(gè)主表的外鍵的字段數(shù)據(jù)的話,就不會(huì)刪除成功,系統(tǒng)會(huì)直接報(bào)錯(cuò)

關(guān)聯(lián)更新操作

之前是主要講了關(guān)聯(lián)刪除,是因?yàn)橥怄I在使用的時(shí)候關(guān)聯(lián)刪除操作是使用的比較頻繁的,關(guān)聯(lián)更新的頻率是相對(duì)來(lái)說(shuō)低一點(diǎn)兒的
關(guān)聯(lián)更新的三個(gè)關(guān)聯(lián)操作和刪除時(shí)一樣的,分別是 cascade,set null,no action 意思是也是一樣的,主表某個(gè)字段更新了,子表也會(huì)更新那個(gè)字段!!!,主表更新的某條數(shù)據(jù),子表的使用的那個(gè)數(shù)據(jù)會(huì)變成空,和子表在使用的情況下,主表就不能夠更新數(shù)據(jù)

alter table stu_study drop foreign key stu_study_classes; --  刪除外鍵
 --  添加外鍵
 alter table stu_study add 
 constraint stu_study_classes 
 foreign key (course_id) 
 references classes(id) 
 on delete set null --  一次性設(shè)置外鍵的兩種動(dòng)作
 on update cascade

mysql 外鍵怎么使用
mysql 外鍵怎么使用

到此,相信大家對(duì)“mysql 外鍵怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

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

丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2024-04-09發(fā)表,共計(jì)2271字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 乐亭县| 石城县| 平远县| 南京市| 茶陵县| 即墨市| 昌平区| 大宁县| 赫章县| 屏山县| 南昌市| 同德县| 东兴市| 通州区| 华蓥市| 荃湾区| 东辽县| 巴南区| 柞水县| 溧阳市| 通山县| 嘉禾县| 廉江市| 洛扎县| 府谷县| 宁南县| 长顺县| 永平县| 昂仁县| 天门市| 平邑县| 新巴尔虎右旗| 体育| 乡城县| 保康县| 万源市| 咸丰县| 西藏| 水城县| 许昌市| 江山市|