MySQL基礎:約束 概述 概念:約束是作用於表中欄位上的規則,用於限制存儲在表中的數據。 目的:保證資料庫中的數據的正確、有效和完整性。 分類: | 約束 | 描述 | 關鍵字 | | : : | : : | : : | | 非空約束 | 限制該欄位的數據不能為null | NOT NULL | ...
MySQL基礎:約束
概述
- 概念:約束是作用於表中欄位上的規則,用於限制存儲在表中的數據。
- 目的:保證資料庫中的數據的正確、有效和完整性。
- 分類:
約束 | 描述 | 關鍵字 |
---|---|---|
非空約束 | 限制該欄位的數據不能為null | NOT NULL |
唯一約束 | 保證該欄位的所有數據都是唯一、不重覆的 | UNIQUE |
主鍵約束 | 主鍵是一行數據的唯一標識,要求非空且唯一 | PRIMARY KEY |
預設約束 | 保存數據時,如果未指定該欄位的值,則採用預設值 | DEFAULT |
檢查約束(8.0.16版本之後) | 保證欄位值滿足某一個條件 | CHECK |
外鍵約束 | 用來讓兩張表之間建立連接,保證數據的一致性和完整性 | FOREIGN KEY |
- 註意:約束是作用於表中欄位上的,可以在創建表/修改表的時候添加約束。
外鍵約束
子表(從表)是具有外鍵的表,父表(主表)是外鍵所關聯的表。
- 語法
- 添加外鍵
-- 創建表時添加外鍵
CREATE TABLE 表名(
欄位名 數據類型,
...
[CONSTRAINT] [外鍵名稱] FOREIGN KEY (外鍵欄位名) REFERENCES 主表(主表列名)
);
-- 額外添加外鍵 ADD CONSTRAINT表示添加一個約束 REFERENCES表示關聯的主表
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵欄位名) REFERENCES 主表(主表列名);
- 刪除外鍵
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
- 刪除/更新行為
行為 | 說明 |
---|---|
NO ACTION | 當在父表中刪除/更新對應記錄時,首先應該檢查記錄是否有對應外鍵,如果有則不允許刪除/更新。(與RESTRICT一致) |
RESTRICT | 當在父表中刪除/更新對應記錄時,首先應該檢查記錄是否有對應外鍵,如果有則不允許刪除/更新。(與NO ACTION一致) |
CASCADE | 當在父表中刪除/更新對應記錄時,首先應該檢查記錄是否有對應外鍵,如果有,則也刪除/更新外鍵在子表中的記錄。 |
SET NULL | 當在父表中刪除/更新對應記錄時,首先應該檢查記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null(這就要求外鍵允許取null)。 |
SET DELETE | 父表有變更時,子表將外鍵列設置成一個預設的值(Innodb不支持) |
語法:
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵欄位名) REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;