# 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是空值。
建表后,非空约束设置如下:
      内容未完......
    
 