在mysql中,可以利用show語(yǔ)句查詢外鍵約束,show語(yǔ)句可以顯示mysql中的數(shù)據(jù)庫(kù)、表和列的信息,語(yǔ)法為“SHOW CREATE TABLE 表名”;該語(yǔ)句可以顯示表中所有的主鍵約束、外鍵約束、非空約束等所有約束的信息。
本教程操作環(huán)境:windows10系統(tǒng)、mysql8.0.22版本、Dell G3電腦。
mysql怎么查詢外鍵約束
mysqlshow 命令用于顯示 MySQL 服務(wù)器中的數(shù)據(jù)庫(kù)、表和列信息。
在 MySQL 中可以使用 SHOW CREATE TABLE 語(yǔ)句來(lái)查看表中的約束,進(jìn)而查詢外鍵約束情況。
查看數(shù)據(jù)表中的約束語(yǔ)法格式如下:
SHOW CREATE TABLE <數(shù)據(jù)表名>;
示例如下:
mysql> CREATE TABLE tb_emp8 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) UNIQUE, -> deptId INT(11) NOT NULL, -> salary FLOAT DEFAULT 0, -> CHECK(salary>0), -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id) -> ); Query OK, 0 rows affected (0.37 sec) mysql> SHOW CREATE TABLE tb_emp8 G *************************** 1. row *************************** Table: tb_emp8 Create Table: CREATE TABLE `tb_emp8` ( `id` int(11) NOT NULL, `name` varchar(22) DEFAULT NULL, `deptId` int(11) NOT NULL, `salary` float DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), KEY `deptId` (`deptId`), CONSTRAINT `tb_emp8_ibfk_1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.19 sec)
擴(kuò)展知識(shí):
外鍵約束的定義
Mysql外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用。對(duì)于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)
假設(shè)我們有2個(gè)表,分別是表A和表B,它們通過(guò)一個(gè)公共字段“id”發(fā)生關(guān)聯(lián)關(guān)系,我們把這個(gè)關(guān)聯(lián)關(guān)系叫做R。如果“id”在表A中是主鍵,那么,表A就是這個(gè)關(guān)系R中的主表。相應(yīng)的,表B就是這個(gè)關(guān)系中的從表,表B中的“id”,就是表B用來(lái)引用表A中數(shù)據(jù)的,叫外鍵。所以,外鍵就是從表中用來(lái)引用主表中數(shù)據(jù)的那個(gè)公共字段
外鍵約束的作用
外鍵約束,可以幫我們確定從表中外鍵字段與主表中的主鍵字段之間的引用關(guān)系,還可以確保從表中數(shù)據(jù)所引用的主表數(shù)據(jù)不會(huì)被刪除,確保兩個(gè)表中數(shù)據(jù)的一致性
主表刪除某條記錄時(shí),從表中與之對(duì)應(yīng)的記錄也必須有相應(yīng)的改變。一個(gè)表可以有一個(gè)或多個(gè)外鍵,外鍵可以為空值,若不為空值,則每一個(gè)外鍵的值必須等于主表中主鍵的某個(gè)值
但是,外鍵約束是有成本的,需要消耗系統(tǒng)資源,可能不適合大并發(fā)的SQL操作。因此mysql允許你不使用系統(tǒng)自帶的外鍵約束,在應(yīng)用層面完成檢查數(shù)據(jù)一致性的邏輯。這也是為什么我們即使沒(méi)有設(shè)置外鍵,也能進(jìn)行關(guān)聯(lián)查詢的原因
推薦學(xué)習(xí):mysql視頻教程