約束
概述
概念:約束是作用于表中字段上的規(guī)則董栽,用于限制存儲在表中的數(shù)據(jù)亚享。
目的:保證數(shù)據(jù)庫中數(shù)據(jù)的正確瞭稼、有效性和完整性忽洛。
分類:
約束描述關鍵字
非空約束限制該字段的數(shù)據(jù)不能為nullNOT NULL
唯一約束保證該字段的所有數(shù)據(jù)都是唯一、不重復的UNIQUE
主鍵約束主鍵是一行數(shù)據(jù)的唯一標識环肘,要求非空且唯一PRIMARY KEY
默認約束保存數(shù)據(jù)時欲虚,如果未指定該字段的值,則采用默認值DEFAULT
檢查約束(8.0.1版本后)保證字段值滿足某一個條件CHECK
外鍵約束用來讓兩張圖的數(shù)據(jù)之間建立連接悔雹,保證數(shù)據(jù)的一致性和完整性FOREIGN KEY
注意:
約束是作用于表中字段上的复哆,可以在創(chuàng)建表/修改表的時候添加約束欣喧。
約束演示
約束條件關鍵字
主鍵PRIMARY KEY
自動增長AUTO_INCREMENT
不為空NOT NULL
唯一UNIQUE
邏輯條件CHECK
默認值DEFAULT
添加外鍵:
--建表時添加外鍵
CREATE TABLE 表名(
? ? 字段名 字段類型,
? ? ...
? ? [CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵字段名) 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 DEFAULT父表有變更時浅辙,子表將外鍵設為一個默認值(Innodb不支持)
更改刪除/更新行為:
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 主表名(主表字段名) ON UPDATE 行為 ON DELETE 行為;