# MySQL教程 - 11 约束
在 SQL 中,约束(Constraints)是对数据库表中的字段添加的规则,限制保存的数据,从而保证数据的完整性、一致性和准确性。如果不满足列设置的约束条件,那么在插入数据的时候将会失败。
约束可以在表创建时添加,也可以在表创建后通过修改表结构来添加。
常用的约束有以下几种:
主键约束
非空约束
默认约束
唯一约束
检查约束
外键约束
下面分别介绍一下。
# 11.1 主键约束
主键约束使用 PRIMARY KEY
设置,用来设置表的主键,主键字段必须非空,且数据是唯一的。
之前在建表的时候,已经使用过了,如下:
-- 创建员工表tb_employee
CREATE TABLE tb_employee (
id INT AUTO_INCREMENT PRIMARY KEY, -- 设置主键
emp_number VARCHAR(16),
name VARCHAR(100),
age INT,
email VARCHAR(100),
salary DECIMAL(10, 2),
entry_time datetime
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 或者
CREATE TABLE tb_employee (
id INT,
emp_number VARCHAR(16),
name VARCHAR(100),
age INT,
email VARCHAR(100),
salary DECIMAL(10, 2),
entry_time datetime,
PRIMARY KEY (id) -- 设置主键为id
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 通过
PRIMARY KEY
设置id
字段为主键,设置为之间,默认值就是为空且唯一; AUTO_INCREMENT
设置主键策略为自动增长,随着插入的数据递增;- 设置了某一列为主键,那么该列就是非空且唯一的。
# 11.2 非空约束
非空约束通过 NOT NULL
来设置,非空约束用来确保该字段(列)不能存储空值。
举个栗子:
CREATE TABLE tb_employee (
id INT AUTO_INCREMENT PRIMARY KEY,
emp_number VARCHAR(16),
name VARCHAR(100) NOT NULL, -- 设置为非空
age INT,
email VARCHAR(100),
salary DECIMAL(10, 2),
entry_time datetime
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 上面将
name
字段设置为NOT NULL
,那么在插入数据的时候,必须给name
设置值。 ''
空字符串算是有值的,NULL
是空值。
建表后,非空约束设置如下:
内容未完......