中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL設置外鍵約束的方法

發布時間:2020-09-25 09:29:16 來源:億速云 閱讀:186 作者:小新 欄目:MySQL數據庫

這篇文章給大家分享的是有關MySQL設置外鍵約束的方法的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

MySQL 外鍵約束(FOREIGN KEY)用來在兩個表的數據之間建立鏈接,它可以是一列或者多列。一個表可以有一個或多個外鍵。

外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空值,則每一個外鍵的值必須等于另一個表中主鍵的某個值。

外鍵是表的一個字段,不是本表的主鍵,但對應另一個表的主鍵。定義外鍵后,不允許刪除另一個表中具有關聯關系的行。

外鍵的主要作用是保持數據的一致性、完整性。例如,部門表 tb_dept 的主鍵是 id,在員工表 tb_emp5 中有一個鍵 deptId 與這個 id 關聯。主表(父表):對于兩個具有關聯關系的表而言,相關聯字段中主鍵所在的表就是主表。從表(子表):對于兩個具有關聯關系的表而言,相關聯字段中外鍵所在的表就是從表。

選取設置 MySQL 外鍵約束的字段

定義一個外鍵時,需要遵守下列規則:

父表必須已經存在于數據庫中,或者是當前正在創建的表。如果是后一種情況,則父表與子表是同一個表,這樣的表稱為自參照表,這種結構稱為自參照完整性。

必須為父表定義主鍵。

主鍵不能包含空值,但允許在外鍵中出現空值。也就是說,只要外鍵的每個非空值出現在指定的主鍵中,這個外鍵的內容就是正確的。

在父表的表名后面指定列名或列名的組合。這個列或列的組合必須是父表的主鍵或候選鍵。

外鍵中列的數目必須和父表的主鍵中列的數目相同。

外鍵中列的數據類型必須和父表主鍵中對應列的數據類型相同。

在創建表時設置外鍵約束

在數據表中創建外鍵使用 FOREIGN KEY 關鍵字,具體的語法規則如下:

[CONSTRAINT <外鍵名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主鍵列1 [,主鍵列2,…]

其中:外鍵名為定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵;字段名表示子表需要添加外健約束的字段列;主表名即被子表外鍵所依賴的表的名稱;主鍵列表示主表中定義的主鍵列或者列組合。

示例:為了展現表與表之間的外鍵關系,本例在 test_db 數據庫中創建一個部門表 tb_dept1,表結構如下表所示。

創建 tb_dept1 的 SQL 語句運行結果如下所示。

mysql> CREATE TABLE tb_dept1
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) NOT NULL,
    -> location VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.37 sec)

創建數據表 tb_emp6,并在表 tb_emp6 上創建外鍵約束,讓它的鍵 deptId 作為外鍵關聯到表 tb_dept1 的主鍵 id,輸入的 SQL 語句和運行結果如下所示。

mysql> CREATE TABLE tb_emp6
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1
    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  | MUL | NULL    |       |
| salary | float        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (1.33 sec)

以上語句執行成功之后,在表 tb_emp6 上添加了名稱為 fk_emp_dept1 的外鍵約束,外鍵名稱為 deptId,其依賴于表 tb_dept1 的主鍵 id。

提示:關聯指的是關系數據庫中,相關表之間的聯系。它是通過相同的屬性或屬性組來表示的。子表的外鍵必須關聯父表的主鍵,且關聯字段的數據類型必須匹配,如果類型不一樣,則創建子表時會出現錯誤“ERROR 1005(HY000):Can't create table'database.tablename'(errno:150)”。

在修改表時添加外鍵約束

在修改數據表時添加外鍵約束的語法規則為:

ALTER TABLE <數據表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

示例:修改數據表 tb_emp2,將字段 deptId 設置為外鍵,與數據表 tb_dept1 的主鍵 id 進行關聯,輸入的 SQL 語句和運行結果如下所示。

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)

刪除外鍵約束

對于數據庫中定義的外鍵,如果不再需要,可以將其刪除。外鍵一旦刪除,就會解除主表和從表間的關聯關系,MySQL 中刪除外鍵的語法格式如下:

ALTER TABLE <表名> DROP FOREIGN KEY <外鍵約束名>;

示例:刪除數據表 tb_emp2 中的外鍵約束 fk_tb_dept1,輸入的 SQL 語句和運行結果如下所示。

mysql> ALTER TABLE tb_emp2
    -> DROP FOREIGN KEY fk_tb_dept1;
Query OK, 0 rows affected (0.19 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`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

可以看到,tb_emp2 中已經不存在 FOREIGN KEY,原有的名稱為 fk_emp_dept 的外鍵約束刪除成功。

感謝各位的閱讀!關于MySQL設置外鍵約束的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥棱县| 南安市| 汤原县| 台南县| 图片| 玉溪市| 桃源县| 兰溪市| 务川| 樟树市| 金堂县| 黑龙江省| 哈密市| 如皋市| 修水县| 晋宁县| 云霄县| 明溪县| 江永县| 修武县| 桂阳县| 周宁县| 临海市| 富锦市| 玛沁县| 凌云县| 乐安县| 阳泉市| 景泰县| 华阴市| 犍为县| 松原市| 密云县| 古蔺县| 万载县| 福泉市| 金山区| 阿图什市| 孝昌县| 麻江县| 敖汉旗|