SQL 中的 Check Constraint

2025年3月17日 | 阅读 7 分钟
  • CHECK 约束是应用于表列的验证或规则。
  • 当我们对任何列应用 CHECK 约束时,它会在插入任何记录时检查特定的值。
  • CHECK 约束可以创建在表级别,也可以创建在列级别。
  • CHECK 约束只能应用于单个列,但单个表可以有多个 CHECK 约束。

让我们看几个实际示例来更清楚地理解这个概念。我们将使用 MariaDB 数据库来编写所有查询。

1. 列级别的 CHECK 约束

要对列级别应用 CHECK 约束,我们必须在列名之后立即指定 CHECK 约束。

语法

我们将编写一个查询来创建一个表,并为其中一列指定列级别的 CHECK 约束


Check Constraint in SQL

在上面的查询中,我们在 Date_of_Joining 列上指定了 CHECK 约束。根据此约束,Date_of_Joining 列将仅允许插入 Date_of_Joining 在 '2019-02-01' 之后的记录。

为验证 CHECK 约束已在 Date_of_Joining 列上创建,我们将执行以下查询


Check Constraint in SQL

现在,我们将尝试在 employees 表中插入一条记录,其中员工的加入日期在 '2019-02-01' 之前。


Check Constraint in SQL

当我们尝试插入一个加入日期为 '2019-01-01' 的员工时,会发出约束失败错误。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许加入日期大于 '2019-02-01' 的记录。

示例 2

我们将编写一个查询来创建一个表,并为多列指定列级别的 CHECK 约束。

查询


Check Constraint in SQL

在上面的查询中,我们在 Percentage 和 Favourite_Subject 列上指定了 CHECK 约束。根据此约束,Percentage 列将仅允许插入学生分数高于 90 的记录,并且学生最喜欢的科目是 Science、Maths 或 English。

为验证 CHECK 约束是否已在 Percentage 和 Favourite_Subject 列上成功创建,我们将执行以下命令


Check Constraint in SQL

现在,我们将尝试在 students 表中插入一条记录,其中学生分数低于 90。


Check Constraint in SQL

当我们尝试插入一个分数是 89 的学生时,会发出约束失败错误。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。

现在,我们将尝试在 students 表中插入一条记录,其中学生分数高于 90。


Check Constraint in SQL

学生分数是 92 的记录已成功插入。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。

1. 表级别的 CHECK 约束

要对表级别应用 CHECK 约束,我们必须在表创建结束之前指定 CHECK 约束。

语法

示例 1

我们将编写一个查询来创建一个表,并为其中一列指定表级别的 CHECK 约束。


Check Constraint in SQL

在上面的查询中,我们在 Date_of_Joining 列上指定了 CHECK 约束。根据此约束,Date_of_Joining 列将仅允许插入加入日期小于或等于 '2019-02-01' 的记录。

为验证 CHECK 约束是否已在 Date_of_Joining 列上成功创建,我们将执行以下命令


Check Constraint in SQL

现在,我们将尝试在 employ 表中插入一条记录,其中员工的加入日期等于 '2019-02-01'。


Check Constraint in SQL

加入日期小于或等于 '29-02-01' 的记录已成功插入。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许日期小于或等于 '29-02-01' 的记录。

示例 2

我们将编写一个查询来创建一个表,并为多列指定表级别的 CHECK 约束。


Check Constraint in SQL

在上面的查询中,我们在 Percentage 和 Favourite_Subject 列上指定了 CHECK 约束。根据此约束,Percentage 列将仅允许插入学生分数高于 90 的记录,并且学生最喜欢的科目是 Science、Maths 或 English。

为验证 CHECK 约束是否已在 percentage 和 Favourite_Subject 列上成功创建,我们将执行以下命令


Check Constraint in SQL

现在,我们将尝试在 student 表中插入一条记录,其中学生分数高于 90。


Check Constraint in SQL

学生分数是 92 的记录已成功插入。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。

现在,我们将尝试在 student 表中插入一条记录,其中学生分数低于 90。


Check Constraint in SQL

当我们尝试插入一个分数是 89 的学生时,会发出约束失败错误。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。

3. 表创建后的 CHECK 约束

可能会出现这种情况,我们需要在表创建后对列应用 CHECK 约束。在这种情况下,我们必须使用 ALTER 命令来对已创建的表应用 CHECK 约束。

语法

示例 1

假设我们创建了一个没有约束的 employee 表,后来我们决定为其中一列添加一个约束。然后我们将执行以下查询


Check Constraint in SQL

为验证 CHECK 约束是否已在 Age 列上成功创建,我们将执行以下命令


Check Constraint in SQL

现在,我们将尝试在 employee 表中插入一条记录,其中员工年龄大于 21。


Check Constraint in SQL

当我们尝试插入一个年龄大于 21 的员工时,会发出约束失败错误。由于我们对 Age 列应用了 CHECK 约束,它将仅允许小于或等于 21 的年龄值。

示例 2

假设我们创建了一个没有约束的 employ 表,后来我们决定为其中一列添加一个约束。然后我们将执行以下查询


Check Constraint in SQL

为验证 CHECK 约束是否已在 Date_of_Joining 列上成功创建,我们将执行以下命令


Check Constraint in SQL

现在,我们将尝试在 employ 表中插入一条记录,其中员工的加入日期在 '2019-01-01' 之后。


Check Constraint in SQL

当我们尝试插入一个加入日期为 '2019-02-02' 的员工时,会发出约束失败错误。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许加入日期小于或等于 '2019-01-01' 的记录。

4. 删除 CHECK 约束

假设我们在表的列上创建了一个 CHECK 约束。后来,我们决定从该列中删除该约束。在这种情况下,我们将使用 ALTER 命令删除 CHECK 约束。

语法

示例 1

假设我们在 students 表的其中一列上分配了一个 CHECK 约束。后来,我们决定删除该约束。

为验证已创建的约束,我们将执行以下查询


Check Constraint in SQL

我们将执行以下命令来删除名为 Constraint_Fav_sub 的约束


Check Constraint in SQL

我们将再次执行 SHOW CREATE TABLE 命令来验证 CHECK 约束是否已成功删除。


Check Constraint in SQL

示例 2

假设我们在 employee 表的其中一列上分配了一个 CHECK 约束。后来,我们决定删除该约束。

为验证已创建的约束,我们将执行以下查询


Check Constraint in SQL

我们将执行以下命令来删除名为 Constraint_DOJ 的约束


Check Constraint in SQL

我们将再次执行 SHOW CREATE TABLE 命令来验证 CHECK 约束是否已成功删除。


Check Constraint in SQL
下一主题SQL 子句