约束(constraint)
概述
为保证数据完整性,对表数据进行额外的条件限制
- 实体完整性:同一个表中不能存在两个完全相同无法区分的数据
- 域完整性:例如年龄范围(0-120)
- 引用完整性:例如员工所在部门,部门表中要有该部门
- 用户自定义完整性:例如用户名不能重复,密码不能为空等
分类
1. 约束字段的个数
单列约束 & 多列约束
2. 约束的作用范围
列级约束:声明在对应的字段后面
表级约束:声明在所有字段的后面
3. 约束的作用
NOT NULL (非空约束)
UNIQUE (唯一性约束)
PRIMARY KEY (主键约束)
FOREIGN KEY (外键约束)
CHECK (检查约束)
DEFAULT (默认值约束)
添加 / 删除约束
CREATE TABLE时添加
ALTER TABLE时添加、删除
查看表中约束
SELECT * FROM information_schema.table_constraints
WHERE table_name = 'table_name';
非空约束(NOT NULL)
描述
限制某列的值不能为NULL
添加与删除
#建表时
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)
描述
限制某列的值不能重复(但可出现多个空值)
添加与删除
#列级约束
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;
复合的唯一性约束
#eg
CREATE TABLE user(
id INT,
name VARCHAR(15),
password VARCHAR(25),
CONSTRAINT uk_user_name_pwd UNIQUE(name, password)
);
name和password不能同时相同,但其中一个存在相同值是可以的
浙公网安备 33010602011771号