SQL 中的约束

2025年3月17日 | 阅读 10 分钟

SQL 中的约束是指我们在数据库上应用某些条件或限制。这意味着在将数据插入数据库之前,我们会检查某些条件。如果应用于数据库的条件对于要插入的数据成立,那么数据才会被插入到数据库表中。

SQL 中的约束可以分为两类:

  1. 列级约束
    列级约束用于对单个列应用约束。
  2. 表级约束
    表级约束用于对多个列应用约束。

约束的一些现实生活中的例子如下:

  1. 每个人都有唯一的电子邮件 ID。这是因为在为任何用户创建电子邮件帐户时,提供电子邮件服务的公司(如 Gmail、Yahoo 或任何其他电子邮件服务提供商)都会检查用户想要的电子邮件 ID 是否可用。如果其他用户已经使用了用户想要的电子邮件 ID,那么该 ID 就不能分配给另一个用户。这仅仅意味着在同一个电子邮件服务提供商上,没有两个用户可以拥有相同的电子邮件 ID。因此,在这里,电子邮件 ID 是电子邮件服务提供商数据库上的一个约束。
  2. 每当我们为任何系统设置密码时,都需要遵守一些约束。这些约束可能包括以下几点:
    • 密码中必须有一个大写字母。
    • 密码长度必须至少为八个字符。
    • 密码必须包含至少一个特殊符号。

SQL 中可用的约束包括:

  1. NOT NULL
  2. UNIQUE
  3. PRIMARY KEY
  4. FOREIGN KEY
  5. CHECK
  6. DEFAULT
  7. CREATE INDEX

现在,让我们通过示例来详细了解 SQL 中可用的不同约束。我们将使用 MySQL 数据库来编写所有查询。

1. NOT NULL

  • NULL 表示空,即值不可用。
  • 每当表的列被声明为 NOT NULL 时,那么对于该表记录中的该列,其值都不能为空。
  • 必须存在应用于 NOT NULL 约束的列的值。

注意:NULL 不等于零。NULL 表示空列,而不是零。

在创建表时应用 NOT NULL 约束的语法

示例

创建一个 student 表,并在创建表时对表的某一列应用 NOT NULL 约束。


Constraints in SQL

为验证 not null 约束已应用于表列并且 student 表已成功创建,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用 NOT NULL 约束的语法

示例

假设我们有一个现有的 student 表,上面没有应用任何约束。之后,我们决定对该表的某一列应用 NOT NULL 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 not null 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

2. UNIQUE

  • 不允许在应用了 UNIQUE 约束的列中出现重复值。
  • 具有唯一约束的列将始终包含唯一值。
  • 此约束可以应用于表的一个或多个列,这意味着单个表可以存在多个唯一约束。
  • 使用 UNIQUE 约束,您还可以修改已创建的表。

在单列上应用 UNIQUE 约束的语法

示例

创建一个 student 表,并在创建表时对表的某一列应用 UNIQUE 约束。


Constraints in SQL

为验证 unique 约束已应用于表列并且 student 表已成功创建,我们将执行以下查询:


Constraints in SQL

在多列上应用 UNIQUE 约束的语法

示例

创建一个 student 表,并在创建表时对表的多个列应用 UNIQUE 约束。


Constraints in SQL

为验证 unique 约束已应用于表的多个列并且 student 表已成功创建,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用 UNIQUE 约束的语法

示例

假设我们有一个现有的 student 表,上面没有应用任何约束。之后,我们决定对该表的某一列应用 UNIQUE 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 unique 约束已应用于表列并且 student 表已成功创建,我们将执行以下查询:


Constraints in SQL

3. PRIMARY KEY

  • PRIMARY KEY 约束是 NOT NULL 和 Unique 约束的组合。
  • NOT NULL 约束和 UNIQUE 约束共同构成了 PRIMARY 约束。
  • 我们应用了主键约束的列将始终包含唯一值,并且不允许空值。

在创建表时应用主键约束的语法

示例

创建一个 student 表,并在创建表时应用 PRIMARY KEY 约束。


Constraints in SQL

为验证 primary key 约束已应用于表列并且 student 表已成功创建,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用主键约束的语法

示例

假设我们有一个现有的 student 表,上面没有应用任何约束。之后,我们决定对该表的列应用 PRIMARY KEY 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 primary key 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

4. FOREIGN KEY

  • 外键用于引用完整性。
  • 当我们在两个表之间存在引用关系,即同一个列存在于这两个表中,并且该列在一个表中充当主键时,那么该特定列在另一个表中将充当外键。

在创建表时应用外键约束的语法

示例

创建一个 employee 表,并在创建表时应用 FOREIGN KEY 约束。

要为任何表创建外键,首先我们需要在一个表上创建一个主键。


Constraints in SQL

为验证 primary key 约束已应用于 employee 表的列,我们将执行以下查询:


Constraints in SQL

现在,我们将编写一个查询,在 department 表上应用外键,引用 employee 表的主键,即 Emp_ID。


Constraints in SQL

为验证 foreign key 约束已应用于 department 表的列,我们将执行以下查询:


Constraints in SQL

带约束名称应用外键约束的语法

示例

创建一个 employee 表,并在创建表时带约束名称应用 FOREIGN KEY 约束。

要为任何表创建外键,首先我们需要在一个表上创建一个主键。


Constraints in SQL

为验证 primary key 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

现在,我们将编写一个查询,在 department 表上带约束名称应用外键,引用 employee 表的主键,即 Emp_ID。


Constraints in SQL

为验证 foreign key 约束已应用于 department 表的列,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用外键约束的语法

示例

假设我们有现有的 employee 和 department 表。之后,我们决定对 department 表的列应用 FOREIGN KEY 约束。那么我们将执行以下查询:


Constraints in SQL

Constraints in SQL

为验证 foreign key 约束已应用于 department 表的列,我们将执行以下查询:


Constraints in SQL

5. CHECK

  • 当对表列应用了 check 约束,并且用户想在其中插入值时,那么该值在插入到该列之前将首先检查某些条件。
  • 例如:如果我们在表中有一个 age 列,那么用户可以输入他选择的任何值。用户甚至会输入负值或任何其他无效值。但是,如果用户在 age 列上应用了 check 约束,条件是 age 大于 18。那么在这种情况下,即使用户尝试插入无效值(如零或任何小于 18 的值),由于在 age 列上应用了 check 约束,age 列也不会接受该值,也不会允许用户插入。

在单列上应用 check 约束的语法

示例

创建一个 student 表,并在创建表时应用 CHECK 约束来检查年龄是否小于或等于 15。


Constraints in SQL

为验证 check 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

在多列上应用 check 约束的语法

示例

创建一个 student 表,并在创建表时应用 CHECK 约束来检查年龄是否小于或等于 15,并且百分比大于 85。


Constraints in SQL

为验证 check 约束已应用于 age 和 percentage 列,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用 check 约束的语法

示例

假设我们有一个现有的 student 表。之后,我们决定对 student 表的列应用 CHECK 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 check 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

6. DEFAULT

当对表列应用了 default 约束,并且用户没有指定要插入的值时,那么在应用 default 约束时指定的默认值将插入到该特定列中。

在创建表时应用 default 约束的语法

示例

创建一个 student 表,并在创建表时应用 default 约束。


Constraints in SQL

为验证 default 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

在现有表的列上应用 default 约束的语法

示例

假设我们有一个现有的 student 表。之后,我们决定对 student 表的列应用 DEFAULT 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 default 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

7. CREATE INDEX

CREATE INDEX 约束用于在表上创建索引。索引对用户是不可见的,但它们有助于用户加快从数据库中搜索或检索数据的速度。

在单列上创建索引的语法

示例

在 student 表上创建一个索引,并在创建表时应用 default 约束。


Constraints in SQL

为验证 create index 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

在多列上创建索引的语法

示例


Constraints in SQL

为验证 create index 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL

在现有表上创建索引的语法

假设我们有一个现有的 student 表。之后,我们决定对 student 表的列应用 DEFAULT 约束。那么我们将执行以下查询:


Constraints in SQL

为验证 create index 约束已应用于 student 表的列,我们将执行以下查询:


Constraints in SQL
下一个主题SQL 中的模式匹配