约束
2026/9/12大约 4 分钟
约束
约束用于限制加入表的数据的类型和规范。约束是添加在列上的,用来约束列的。
约束按用途可分为三类:
- 实体完整性约束;
- 域完整性约束;
- 引用完整性约束。
1. 实体完整性约束
1.1 主键约束
主键用来标识表中的一行数据,是该行数据的唯一标识,具有以下特性:
- 非空;
- 唯一;
- 被引用(在外键中使用)。
当表的某一列被指定为主键后,该列就不能为空,也不能出现重复值。
# 创建表时指定主键
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY,
列名 数据类型,
列名 数据类型
);
# 创建表时指定主键
CREATE TABLE 表名(
列名 数据类型,
列名 数据类型,
列名 数据类型,
PRIMARY KEY(设置为主键的列名)
);
# 修改表时指定主键
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY;
# 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;1.2 主键自增长
通常指定主键类为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。
# 创建表时指定主键
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY AUTO_INCREMENT,
列名 数据类型,
列名 数据类型
);
# 修改表时设置主键自增长
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 PRIMARY KEY AUTO_INCREMENT;
ALTER TABLE 表名 MODIFY 列名 列类型 PRIMARY KEY AUTO_INCREMENT;
# 修改表时删除主键自增长
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;1.3 唯一约束
某些列不能设置重复的值,可以对这样的列添加唯一约束。
# 创建表时指定唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE,
列名 数据类型,
列名 数据类型
);
# 修改表时设置唯一约束
ALTER TABLE 表名 MODIFY 列名 列类型 UNIQUE;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 UNIQUE;
# 删除唯一约束
ALTER TABLE 表名 DROP INDEX name;2. 域完整性约束
2.1 非空约束
非空约束要求此列必须有值,某些列不能设置为 NULL 值。
# 创建表时指定非空约束
CREATE TABLE 表名(
列名 数据类型 NOT NULL,
列名 数据类型,
列名 数据类型
);
# 修改表时设置非空约束
ALTER TABLE 表名 MODIFY 列名 列类型 NOT NULL;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 NOT NULL;
# 删除非空约束
ALTER TABLE 表名 MODIFY 列名 列类型;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;2.2 默认值
为列赋予默认值,当新增数据不指定值时,书写 DEFAULT,以指定的默认值进行填充。
# 创建表时指定默认值
CREATE TABLE 表名(
列名 数据类型 DEFAULT 默认值,
列名 数据类型,
列名 数据类型
);
# 修改表时设置默认值
ALTER TABLE 表名 MODIFY 列名 列类型 DEFAULT 默认值;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型 DEFAULT 默认值;
# 删除默认值
ALTER TABLE 表名 MODIFY 列名 列类型;
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;3. 引用完整性约束
这里说的引用完整性约束指的就是外键约束,其作用:
- 引用外部表的某个列的值;
- 新增数据时,约束此列的值必须是引用表中已经存在的值。
外键的特点:
- 外键必须是另一表的主键的值(外键要引用主键!);
- 外键可以重复;
- 外键可以为空;
- 一张表中可以有多个外键。
# 创建表时指定外键约束
CREATE TABLE 表名(
列名 数据类型,
列名 数据类型,
列名 数据类型,
CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
);
# 修改表时添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键);
# 修改表时删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 约束名称;