SQL 中的 Check Constraint2025年3月17日 | 阅读 7 分钟
让我们看几个实际示例来更清楚地理解这个概念。我们将使用 MariaDB 数据库来编写所有查询。 1. 列级别的 CHECK 约束要对列级别应用 CHECK 约束,我们必须在列名之后立即指定 CHECK 约束。 语法 我们将编写一个查询来创建一个表,并为其中一列指定列级别的 CHECK 约束 ![]() 在上面的查询中,我们在 Date_of_Joining 列上指定了 CHECK 约束。根据此约束,Date_of_Joining 列将仅允许插入 Date_of_Joining 在 '2019-02-01' 之后的记录。 为验证 CHECK 约束已在 Date_of_Joining 列上创建,我们将执行以下查询 ![]() 现在,我们将尝试在 employees 表中插入一条记录,其中员工的加入日期在 '2019-02-01' 之前。 ![]() 当我们尝试插入一个加入日期为 '2019-01-01' 的员工时,会发出约束失败错误。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许加入日期大于 '2019-02-01' 的记录。 示例 2 我们将编写一个查询来创建一个表,并为多列指定列级别的 CHECK 约束。 查询 ![]() 在上面的查询中,我们在 Percentage 和 Favourite_Subject 列上指定了 CHECK 约束。根据此约束,Percentage 列将仅允许插入学生分数高于 90 的记录,并且学生最喜欢的科目是 Science、Maths 或 English。 为验证 CHECK 约束是否已在 Percentage 和 Favourite_Subject 列上成功创建,我们将执行以下命令 ![]() 现在,我们将尝试在 students 表中插入一条记录,其中学生分数低于 90。 ![]() 当我们尝试插入一个分数是 89 的学生时,会发出约束失败错误。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。 现在,我们将尝试在 students 表中插入一条记录,其中学生分数高于 90。 ![]() 学生分数是 92 的记录已成功插入。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。 1. 表级别的 CHECK 约束要对表级别应用 CHECK 约束,我们必须在表创建结束之前指定 CHECK 约束。 语法 示例 1 我们将编写一个查询来创建一个表,并为其中一列指定表级别的 CHECK 约束。 ![]() 在上面的查询中,我们在 Date_of_Joining 列上指定了 CHECK 约束。根据此约束,Date_of_Joining 列将仅允许插入加入日期小于或等于 '2019-02-01' 的记录。 为验证 CHECK 约束是否已在 Date_of_Joining 列上成功创建,我们将执行以下命令 ![]() 现在,我们将尝试在 employ 表中插入一条记录,其中员工的加入日期等于 '2019-02-01'。 ![]() 加入日期小于或等于 '29-02-01' 的记录已成功插入。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许日期小于或等于 '29-02-01' 的记录。 示例 2 我们将编写一个查询来创建一个表,并为多列指定表级别的 CHECK 约束。 ![]() 在上面的查询中,我们在 Percentage 和 Favourite_Subject 列上指定了 CHECK 约束。根据此约束,Percentage 列将仅允许插入学生分数高于 90 的记录,并且学生最喜欢的科目是 Science、Maths 或 English。 为验证 CHECK 约束是否已在 percentage 和 Favourite_Subject 列上成功创建,我们将执行以下命令 ![]() 现在,我们将尝试在 student 表中插入一条记录,其中学生分数高于 90。 ![]() 学生分数是 92 的记录已成功插入。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。 现在,我们将尝试在 student 表中插入一条记录,其中学生分数低于 90。 ![]() 当我们尝试插入一个分数是 89 的学生时,会发出约束失败错误。由于我们对 Percentage 列应用了 CHECK 约束,它将仅允许分数大于 90 的记录。 3. 表创建后的 CHECK 约束可能会出现这种情况,我们需要在表创建后对列应用 CHECK 约束。在这种情况下,我们必须使用 ALTER 命令来对已创建的表应用 CHECK 约束。 语法 示例 1 假设我们创建了一个没有约束的 employee 表,后来我们决定为其中一列添加一个约束。然后我们将执行以下查询 ![]() 为验证 CHECK 约束是否已在 Age 列上成功创建,我们将执行以下命令 ![]() 现在,我们将尝试在 employee 表中插入一条记录,其中员工年龄大于 21。 ![]() 当我们尝试插入一个年龄大于 21 的员工时,会发出约束失败错误。由于我们对 Age 列应用了 CHECK 约束,它将仅允许小于或等于 21 的年龄值。 示例 2 假设我们创建了一个没有约束的 employ 表,后来我们决定为其中一列添加一个约束。然后我们将执行以下查询 ![]() 为验证 CHECK 约束是否已在 Date_of_Joining 列上成功创建,我们将执行以下命令 ![]() 现在,我们将尝试在 employ 表中插入一条记录,其中员工的加入日期在 '2019-01-01' 之后。 ![]() 当我们尝试插入一个加入日期为 '2019-02-02' 的员工时,会发出约束失败错误。由于我们对 Date_of_Joining 列应用了 CHECK 约束,它将仅允许加入日期小于或等于 '2019-01-01' 的记录。 4. 删除 CHECK 约束假设我们在表的列上创建了一个 CHECK 约束。后来,我们决定从该列中删除该约束。在这种情况下,我们将使用 ALTER 命令删除 CHECK 约束。 语法 示例 1 假设我们在 students 表的其中一列上分配了一个 CHECK 约束。后来,我们决定删除该约束。 为验证已创建的约束,我们将执行以下查询 ![]() 我们将执行以下命令来删除名为 Constraint_Fav_sub 的约束 ![]() 我们将再次执行 SHOW CREATE TABLE 命令来验证 CHECK 约束是否已成功删除。 ![]() 示例 2 假设我们在 employee 表的其中一列上分配了一个 CHECK 约束。后来,我们决定删除该约束。 为验证已创建的约束,我们将执行以下查询 ![]() 我们将执行以下命令来删除名为 Constraint_DOJ 的约束 ![]() 我们将再次执行 SHOW CREATE TABLE 命令来验证 CHECK 约束是否已成功删除。 ![]() 下一主题SQL 子句 |
我们请求您订阅我们的新闻通讯以获取最新更新。