约束(constraint) 概述 为保证数据完整性 ,对表数据进行额外的条件限制
实体完整性 :同一个表中不能存在两个完全相同无法区分的数据
域完整性 :例如年龄范围(0-120)
引用完整性 :例如员工所在部门,部门表中要有该部门
用户自定义完整性 :例如用户名不能重复,密码不能为空等
分类 1. 按约束字段的个数 单列约束 & 多列约束
2. 按约束的作用范围 列级约束:声明在对应的字段后面
表级约束:声明在所有字段的后面
3. 按约束的作用 NOT NULL (非空约束)
UNIQUE (唯一性约束)
PRIMARY KEY (主键约束)
FOREIGN KEY (外键约束)
CHECK (检查约束)
DEFAULT (默认值约束)
使用语法 添加 / 删除约束 CREATE TABLE
时添加
ALTER TABLE
时添加、删除
查看表中约束 1 2 SELECT * FROM information_schema.table_constraints WHERE table_name = 'table_name';
具体用法 非空约束(NOT NULL) 描述 限制某列的值不能为NULL
添加与删除 1 2 3 4 5 6 7 8 9 10 11 12 #建表时 CREATE TABLE t_name( col1_name INT, col2_name INT NOT NULL, col3_name VARCHAR(15) NOT NULL ); #ALTER TABLE ALTER TABLE t_name MODIFY col_name INT NOT NULL; #删除 ALTER TABLE t_name MODIFY col_name INT NULL;
唯一性约束(UNIQUE) 描述 限制某列的值不能重复(但可出现多个空值)
添加与删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #列级约束 CREATE TABLE t_name( col1_name INT UNIQUE, col2_name INT, col3_name VARCHAR(15) UNIQUE ); #表级约束 CREATE TABLE t_name( col1_name INT, col2_name INT, col3_name VARCHAR(15), CONSTRAINT uk_tableName_colName UNIQUE(colName);#uk:UNIQUE, 遵循命名规律 ); #建表后 ALTER TABLE t_name ADD CONSTRAINT uk_tableName_colName UNIQUE(colName); ALTER TABLE t_name MODIFY col_name INT UNIQUE;
复合的唯一性约束 1 2 3 4 5 6 7 #eg CREATE TABLE user( id INT, name VARCHAR(15), password VARCHAR(25), CONSTRAINT uk_user_name_pwd UNIQUE(name, password) );
name
和password
不能同时相同,但其中一个存在相同值是可以的
主键约束(PRIMARY KEY) 描述 非空且唯一,用于唯一标识表中的一条记录
一个表中只能有一个
添加与删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #列级约束 CREATE TABLE t_name( id INT PRIMARY KEY, last_name VARCHAR(15), salary DECIMAL(10, 2) ); #表级约束 CREATE TABLE t_name( id INT, last_name VARCHAR(15), salary DECIMAL(10, 2), CONSTRAINT pk_tName_id PRIMARY KEY(id) #没必要取名,总是PRIMARY ); #建表后 ALTER TABLE t_name ADD PRIMARY KEY (col_name); #删除,实际上不会使用 ALTER TABLE t_name DROP PRIMARY KEY;
复合主键约束 1 2 3 4 5 6 CREATE TABLE user( id INT, name VARCHAR(15), password VARCHAR(25), PRIMARY KEY(name, password) );
name
和password
不能同时相同,且任何一个都不能为NULL
自增列(AUTO_INCREMENT) 描述 某个字段值自增
一个表中只能有一个
约束的列必须是键列 (主键,唯一键)
数据类型必须整型
添加 1 2 3 4 5 6 7 8 9 10 CREATE TABLE t_name( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(15) ); ALTER TABLE t_name MODIFY id INT AUTO_INCREMENT; #删除 ALTER TABLE t_name MODIFY id INT;
注意
外键约束(FORIGN KEY) 一般不会使用
检查约束(CHECK) 描述 检查某个字段值是否满足某要求
MySQL5.7不支持
添加 1 2 3 4 5 6 7 8 CREATE TABLE t_name( id INT PRIMARY KEY, salary DECIMAL(10,2) CHECK(salary > 2000) sex CHAR(2) CHECK(sex IN('M','F') ); #删除 ALTER TABLE t_name MODIFY salary DECIMAL(10,2);
默认值约束(DEFAULT) 描述 给字段添加默认值,若添加时没有显式赋值,则赋值为默认值
添加与删除 1 2 3 4 5 6 7 CREATE TABLE t_name( id INT PRIMARY KEY, salary DECIMAL(10,2) DEFAULT 2500 ); #删除 ALTER TABLE t_name MODIFY salary DECIMAL(10,2);