# 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
  • 通过 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
  • 上面将 name 字段设置为 NOT NULL ,那么在插入数据的时候,必须给 name 设置值。
  • '' 空字符串算是有值的,NULL 是空值。

建表后,非空约束设置如下:

内容未完......