DDL語句(五) -- 約束
一、常見約束
NOT NULL:非空,該字段的值必填
UNIQUE:唯一,該字段的值不可重復
DEFAULT:默認,該字段的值當沒有插入時有默認值
CHECK:檢查,mysql 不支持
PRIMARY KEY:主鍵,該字段的值不可重復並且非空 UNIQUE + NOT NULL
FOREIGN KEY:外鍵,該字段的值引用了另外的表的字段
主鍵約束和唯一約束
1、區別
① 一個表至多有一個主鍵約束,但可以有多個唯一約束
② 主鍵約束不允許為空 ,唯一約束可以為空
2、相同點
都具有唯一性
都支持組合鍵,但不推薦
外鍵:
1、用於限制兩個表的關系,從表的字段值引用了主表的某字段值;
2、外鍵列和主表的被引用列要求類型一致,意義一樣,名稱無要求;
3、主表的被引用列要求時一個 key(一般就是主鍵);
4、插入數據時,先在主表中插入,再在從表中插入
刪除數據是,先從從表中刪除數據,再從主表中刪除數據。
可以通過以下兩種方式來刪除主表的記錄
方式一:級聯刪除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE CASCADE;
方式二:級聯置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE SET NULL;
二、創建表時添加約束
CREATE TABLE 表名(
字段名 字段類型 PRIMARY KEY, #主鍵約束
字段名 字段類型 NOT NULL, #非空約束
字段名 字段類型 UNIQUE, #唯一約束
字段名 字段類型 DEFAULT 值, #默認約束
字段名 字段類型,
CONSTRAINT 約束名 FOREIGN KEY(字段名) REFERENCES 主表(被引用列)
)
註意:
支持類型 約束名
列級約束 除了主鍵約束 可以重新設置
表級約束 除了非空約束和默認約束 可以重新設置,但對主鍵約束無效
列級約束可以在一個字段上追加多個,中間用空格隔開,沒有順序要求
三、修改表時添加或刪除約束
1、非空約束
添加非空約束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 NOT NULL;
刪除非空約束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 ;
2、默認約束
添加默認約束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 DEFAULT 值;
刪除默認約束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 ;
3、主鍵約束
添加主鍵約束
ALTER TABLE 表名 ADD 【CONSTRAINT 自定義的約束名稱】 PRIMARY KEY(字段名);
刪除主鍵約束
ALTER TABLE 表名 DROP PRIMARY KEY;
4、唯一約束
添加唯一約束
ALTER TABLE 表名MODIFY COLUMN UNIQUE(字段名);
刪除主鍵唯一約束
ALTER TABLE 表名 DROP INDEX 索引名;
5、外鍵約束
添加外鍵約束
ALTER TABLE 表名 ADD 【CONSTRAINT 自定義的約束名稱】 CONSTRAINT (字段名) REFERENCES 主表(被引用列);
刪除外鍵約束
ALTER TABLE 表名DROP FOREIGN KEY 自定義的約束名稱;
DDL語句(五) -- 約束