對數據庫表添加約束,能夠對錶中的數據進行限制。保證數據的正確性、有效性和完整性。不正確的數據將無法插入表中。
一、主鍵約束
一般將與業務無關的字段作爲主鍵,主鍵一般沒有任何含義。將表中的某個字段添加主鍵約束,該字段的值不能重複且非空。可以在創建表時給字段添加主鍵約束,也可以對已有表的字段添加主鍵約束,一個表中只能有一個主鍵。
1.創建表時添加主鍵約束
關鍵字:PRIMARY KEY |
示例:CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20), age INT); |
2.對已有表的字段添加主鍵約束
關鍵字:ADD PRIMARY KEY |
示例:ALTER TABLE user ADD PRIMARY KEY (id); |
3.刪除表字段的主鍵約束
關鍵字:DROP PRIMARY KEY |
示例:ALTER TABLE user DROP PRIMARY KEY; |
二、主鍵自增約束
手動維護主鍵的值容易造成主鍵值重複,主鍵添加自增約束,主鍵值能夠由數據庫採用自增的方式自動生成。默認起始值爲 1,也可以對已有表修改起始值。
1.創建表時添加主鍵自增約束,並指定起始值
關鍵字:KEY AUTO_INCREMENT |
示例: CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT ) KEY AUTO_INCREMENT = 2; |
2.對已有表修改主鍵自增起始值
語法:ALTER TABLE 表名 AUTO_INCREMENT = 起始值; |
示例:ALTER TABLE user AUTO_INCREMENT = 3; |
三、唯一約束
給表中的字段添加唯一約束,使該字段的值不能重複
關鍵字:UNIQUE |
示例: CREATE TABLE user( id INT; name VARCHAR(20) UNIQUE ); |
四、非空約束
給表中的字段添加非空約束,使該字段的值不能爲 null
關鍵字:NOT NULL |
示例: CREATE TABLE user( id INT, name VARCHAR(20) NOT NULL ); |
五、默認值約束
關鍵字:DEFAULT |
示例: CREATE TABLE user( id INT, name VARCHAR(20), adress VARCHAR(20) DEFAULT '北京' ); |
六、外鍵約束
1.創建表時給表添加外鍵約束
語法:[CONSTRAINT] [ 外鍵約束名稱] FOREIGN KEY( 外鍵字段名) REFERENCES 主表名( 主鍵字段名); |
示例: CREATE TABLE department ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), lacation VARCHAR(20) ); CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), dep_id INT, CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); |
user 表和 department 表是一對多的關係,一個部門對應用多個用戶。部門表稱之爲主表,用戶表稱之爲主表。插入用戶數據,根據 dep_id 字段,在部門表中沒有對用的部門,怎插入數據失敗。
2.給已有表添加外鍵約束
語法:ALTER TABLE 從表 ADD [CONSTRAINT] [ 外鍵約束名稱] FOREIGN KEY ( 外鍵字段名) REFERENCES 主表 ( 主鍵字段名); |
示例:ALTER TABLE user ADD CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department (id); |
3.刪除從表外鍵約束
示例:DROP TABLE user; |
七、級聯約束
在修改和刪除主表的主鍵時,同時更新或刪除從表的外鍵值,稱爲級聯操作。
級聯操作語法 | 描述 |
---|---|
ON UPDATE CASCADE | 級聯更新,只能是創建表的時候創建級聯關係。更新主表中的主鍵,從表中的外鍵列也自動同步更新 |
ON DELETE CASCADE | 級聯刪除 |
示例: CREATE TABLE department ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), location VARCHAR(20) ); CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), dep_id INT, CONSTRAINT user_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE ); |