mysql增加外鍵約束具體方法
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
MySQL 外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用。對(duì)于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)。
外鍵用來(lái)建立主表與從表的關(guān)聯(lián)關(guān)系,為兩個(gè)表的數(shù)據(jù)建立連接,約束兩個(gè)表中數(shù)據(jù)的一致性和完整性。
定義外鍵時(shí),需要遵守下列規(guī)則:
- 主表必須已經(jīng)存在于數(shù)據(jù)庫(kù)中,或者是當(dāng)前正在創(chuàng)建的表。如果是后一種情況,則主表與從表是同一個(gè)表,這樣的表稱為自參照表,這種結(jié)構(gòu)稱為自參照完整性。
- 必須為主表定義主鍵。
- 主鍵不能包含空值,但允許在外鍵中出現(xiàn)空值。也就是說(shuō),只要外鍵的每個(gè)非空值出現(xiàn)在指定的主鍵中,這個(gè)外鍵的內(nèi)容就是正確的。
- 在主表的表名后面指定列名或列名的組合。這個(gè)列或列的組合必須是主表的主鍵或候選鍵。
- 外鍵中列的數(shù)目必須和主表的主鍵中列的數(shù)目相同。
- 外鍵中列的數(shù)據(jù)類型必須和主表主鍵中對(duì)應(yīng)列的數(shù)據(jù)類型相同。
mysql給表增加外鍵約束
外鍵約束可以在修改表時(shí)添加,但是添加外鍵約束的前提是:從表中外鍵列中的數(shù)據(jù)必須與主表中主鍵列中的數(shù)據(jù)一致或者是沒(méi)有數(shù)據(jù)。
在修改數(shù)據(jù)表時(shí)添加外鍵約束的語(yǔ)法格式如下:
ALTER TABLE <數(shù)據(jù)表名> ADD CONSTRAINT <外鍵名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
示例
修改數(shù)據(jù)表 tb_emp2,將字段 deptId 設(shè)置為外鍵,與數(shù)據(jù)表 tb_dept1 的主鍵 id 進(jìn)行關(guān)聯(lián)
mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)
注意:在為已經(jīng)創(chuàng)建好的數(shù)據(jù)表添加外鍵約束時(shí),要確保添加外鍵約束的列的值全部來(lái)源于主鍵列,并且外鍵列不能為空。
內(nèi)容擴(kuò)展:
使用外鍵約束的時(shí)機(jī)
老實(shí)說(shuō),在MySQL中使用InnoDB表的時(shí)候,不一定非用外鍵約束不可,然而,為了外鍵約束在某些情況下的功用,我們將通過(guò)前面提到的例子的代碼進(jìn)行具體說(shuō)明。它包括兩個(gè)MyISAM表,分別用于存放博客文章和評(píng)論。
定義數(shù)據(jù)庫(kù)模式時(shí),我們要在這兩個(gè)表之間建立起一對(duì)多的關(guān)系,方法是在存放評(píng)論的表中創(chuàng)建一個(gè)外鍵,以將其中的數(shù)據(jù)行(即評(píng)論)對(duì)應(yīng)到特定的博客文章。下面是創(chuàng)建示例MyISAM表的基本SQL代碼:
DROP TABLE IF EXISTS `test`.`blogs`; CREATE TABLE `test`.`blogs` ( `id` INT(10) UNSIGNED AUTO_INCREMENT, `title` TEXT, `content` TEXT, `author` VARCHAR(45) DEFAULT NULL, PRIROSE KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `test`.`comments`; CREATE TABLE `test`.`comments` ( `id` INT(10) UNSIGNED AUTO_INCREMENT, `blog_id` INT(10) UNSIGNED DEFAULT NULL, `comment` TEXT, `author` VARCHAR(45) DEFAULT NULL, PRIROSE KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
到此這篇關(guān)于mysql增加外鍵約束具體方法的文章就介紹到這了,更多相關(guān)mysql怎么增加外鍵約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL外鍵約束的刪除和更新總結(jié)
- MySQL主鍵約束和外鍵約束的實(shí)現(xiàn)
- MySQL主鍵約束和外鍵約束詳解
- MySQL多表操作的外鍵約束教程
- MySQL外鍵約束(Foreign?Key)案例詳解
- Mysql外鍵約束的創(chuàng)建與刪除的使用
- Mysql關(guān)于數(shù)據(jù)庫(kù)是否應(yīng)該使用外鍵約束詳解說(shuō)明
- MySQL外鍵約束(FOREIGN KEY)案例講解
- MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)
- MySQL外鍵約束的實(shí)例講解
- 詳解MySQL 外鍵約束
- MySQL外鍵約束(FOREIGN KEY)的具體使用
相關(guān)文章
Navicat如何遠(yuǎn)程連接云服務(wù)器數(shù)據(jù)庫(kù)
這篇文章主要介紹了Navicat如何遠(yuǎn)程連接云服務(wù)器數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
mysql數(shù)據(jù)庫(kù)入門第一步之創(chuàng)建表
關(guān)于mysql介紹網(wǎng)上一搜一大堆,這里就不再介紹了,我之后的mysql文章只講最簡(jiǎn)單基礎(chǔ)的用法,主要是為java程序服務(wù)的.文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下2021-05-05
MySQL多線程復(fù)制遇到Error_code: 1872的解決方案
本文給大家分享的是在使用mysql主從復(fù)制的時(shí)候遇到Error_code: 1872錯(cuò)誤的解決方法,非常的簡(jiǎn)單,有需要的小伙伴可以參考下2016-09-09
一個(gè) 20 秒 SQL 慢查詢優(yōu)化處理方案
這篇文章主要分享一個(gè) 20 秒 SQL 慢查詢優(yōu)化的經(jīng)歷與處理方案,頁(yè)面無(wú)法正確獲取數(shù)據(jù),經(jīng)排查原來(lái)是接口調(diào)用超時(shí),而最后發(fā)現(xiàn)是因?yàn)镾QL查詢長(zhǎng)達(dá)到20多秒而導(dǎo)致了問(wèn)題的發(fā)生,下面來(lái)看問(wèn)題具體介紹吧2022-01-01
解決mybatis查詢結(jié)果為null時(shí),值被默認(rèn)值替換問(wèn)題
這篇文章主要介紹了解決mybatis查詢結(jié)果為null時(shí),值被默認(rèn)值替換問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
淺談選擇mysql存儲(chǔ)引擎的標(biāo)準(zhǔn)
本文介紹了如何選擇mysql存儲(chǔ)引擎,從存儲(chǔ)引擎的介紹、幾個(gè)常用引擎的特點(diǎn)三個(gè)方面進(jìn)行講解,感興趣的小伙伴們可以參考一下2015-07-07
詳解java調(diào)用ffmpeg轉(zhuǎn)換視頻格式為flv
這篇文章主要介紹了 詳解java調(diào)用ffmpeg轉(zhuǎn)換視頻格式為flv的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09

