SQL 检查约束

SQL 检查约束

  • 检查约束是应用于表的列的验证或规则。
  • 当我们对任何列应用检查约束时,它会在插入记录时检查特定的值。
  • 检查约束可以在表级别和列级别上创建。
  • 检查约束只能应用于单个列,但在单个表中可以有多个检查约束。

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

1.列级别的检查约束

要在列级别应用检查约束,我们必须在列名后面指定检查约束。

语法:

CREATE TABLE TableName(ColumnName1 Datatype(size), ColumnName2 Datatype(size), ColumnName3 Datatype(size) Constraint ConstraintName CHECK(ColumnName CONDITION Value),…, ColumnNameN Datatype(size));

我们将编写一个查询来创建一个表,并在其中的一个列上指定列级检查约束:

CREATE TABLE employee(E_ID INT NOT NULL, Name VARCHAR(40), Salary INT, City VARCHAR(20), Designation VARCHAR(40), Date_of_Joining Date NOT NULL CHECK(Date_of_Joining > "2019-02-01"), Age INT, PRIMARY KEY(E_ID));

SQL 检查约束

在上面的查询中,我们在Date_of_Joining列上指定了CHECK约束。根据这个约束,只有在加入日期在“2019-02-01”之后的记录才允许被插入到Date_of_Joining列中。

为了验证CHECK约束是否被创建在Date_of_Joining列上,我们将执行以下查询:

SHOW CREATE TABLE employee;

SQL 检查约束

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

INSERT INTO employees(E_ID, Name, Salary, City, Designation, Date_of_Joining, Age) VALUES(11, "Simran Khanna", 45500, "Kolhapur", "HR", "2019-01-01", 26);

SQL 检查约束

约束失败错误是在我们尝试插入一个入职日期为“2019-01-01”的员工时出现的。因为我们在”Date_of_Joining”列上应用了检查约束,所以它只允许入职日期大于”2019-02-01″的员工。

示例2:

我们将编写一个查询来创建一个表,并在一个以上的列上指定列级检查约束。

查询:

CREATE TABLE students(S_ID INT NOT NULL, S_Name VARCHAR(40), Hometown VARCHAR(20), Percentage INT NOT NULL CHECK(Percentage >90), Favourite_Subject VARCHAR(20) NOT NULL CHECK( Favourite_Subject IN('Science', 'Maths', 'English')), PRIMARY KEY (S_ID));

SQL 检查约束

在上面的查询中,我们在Percentage和Favourite_Subject列上指定了CHECK约束。根据该约束,只有学生所获得的百分比高于90且学生的最喜欢的科目是科学、数学或英语的记录才允许插入到Percentage列中。

为了验证已经成功创建了Percentage和Favourite_Subject列上的check约束,我们将执行以下命令:

SHOW CREATE TABLE students;

SQL 检查约束

现在,我们将尝试向学生表中插入一个记录,该记录对应的学生分数低于90。

INSERT INTO students(S_ID, S_Name, Hometown, Percentage, Favourite_Subject) VALUES(106, "Harshada", "Nashik", 89, "Science");

SQL 检查约束

当我们尝试插入一个百分比为89的学生时,会发出约束失败错误。由于我们在”Percentage”列上应用了检查约束条件,它只允许大于90的百分比。

现在,我们将尝试在学生表中插入一条记录,其中学生获得的百分比高于90。

INSERT INTO students(S_ID, S_Name, Hometown, Percentage, Favourite_Subject) VALUES(106, "Harshada", "Nashik", 92, "Science");

SQL 检查约束

成功插入了一条学生分数为92的记录。由于我们在Percentage列上应用了检查约束,它只允许百分比大于90的值。

2.表级别的检查约束

在表级别上应用检查约束,我们必须在表创建结束之前指定检查约束。

语法:

CREATE TABLE TableName(ColumnName1 Datatype(size), ColumnName2 Datatype(size), ColumnName3 Datatype(size),…, ColumnNameN Datatype(size), Constraint ConstraintName CHECK(ColumnName CONDITION Value));

示例 1:

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

CREATE TABLE employ(E_ID INT NOT NULL, Name VARCHAR(40), Salary INT, City VARCHAR(20), Designation VARCHAR(40), Date_of_Joining Date NOT NULL, Age INT, PRIMARY KEY(E_ID), CONSTRAINT Constraint_DOJ CHECK(Date_of_Joining <= "2019-02-01"));

SQL 检查约束

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

为了验证Date_of_Joining列上的检查约束是否成功创建,我们将执行以下命令:

SHOW CREATE TABLE employ;

SQL 检查约束

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

INSERT INTO employ(E_ID, Name, Salary, City, Designation, Date_of_Joining, Age) VALUES(11, "Simran Khanna", 45500, "Kolhapur", "HR", "2019-02-01", 26);

SQL 检查约束

成功插入了加入日期小于或等于“29-02-01”的记录。由于我们在Date_of_Joining列上应用了检查约束条件,它只允许小于或等于“29-02-01”的日期。

示例2:

我们将编写一个查询来创建一个表,并在多个列上指定一个表级检查约束条件。

CREATE TABLE student(S_ID INT NOT NULL, S_Name VARCHAR(40), Hometown VARCHAR(20), Percentage INT NOT NULL,  Favourite_Subject VARCHAR(20) NOT NULL, CONSTRAINT Constraint_Percentage (Percentage >90), CONSTRAINT Constraint_Fav_sub CHECK( Favourite_Subject IN('Science', 'Maths', 'English')), PRIMARY KEY (S_ID));

SQL 检查约束

在上面的查询中,我们在Percentage和Favourite_Subject列上指定了CHECK约束。根据这个约束,只有学生所获得的百分比超过90,并且学生的喜欢科目是科学、数学或英语的记录才能够插入到Percentage列中。

为了验证百分比和Favourite_Subject列上的检查约束是否成功创建,我们将执行以下命令:

SHOW CREATE TABLE student;

SQL 检查约束

现在,我们将尝试向学生表中插入一条记录,该记录包括学生的得分率超过90。

INSERT INTO students(S_ID, S_Name, Hometown, Percentage, Favourite_Subject) VALUES(106, "Harshada", "Nashik", 92, "Science");

SQL 检查约束

成功插入一个学生得分为92%的记录。由于我们在百分比列上应用了检查约束,它只允许百分比大于90。

现在,我们将尝试插入一个学生表中学生得分低于90%的记录。

INSERT INTO student(S_ID, S_Name, Hometown, Percentage, Favourite_Subject) VALUES(106, "Harshada", "Nashik", 89, "Science");

SQL 检查约束

当我们尝试插入一个百分比为89的学生时,会出现约束失败的错误。由于我们在百分比列上应用了检查约束,它只允许大于90的百分比。

3.表创建后的检查约束

在某些情况下,我们需要在表创建后对某列应用检查约束。在这种情况下,我们必须使用ALTER命令来对已创建的表应用检查约束。

语法:

ALTER TABLE TableName ADD CONSTRAINT ConstraintName CHECK(ColumnName CONDITION Value);

示例 1:

假设我们创建了一个没有任何约束的员工表,之后我们决定在其中的一列上添加一个约束。然后我们将执行以下查询:

ALTER TABLE employee ADD CONSTRAINT Constraint_Age CHECK (Age <= 21);

SQL 检查约束

为了验证年龄列上的检查约束是否成功创建,我们将执行以下命令:

SHOW CREATE TABLE employee;

SQL 检查约束

现在,我们将尝试在员工表中插入一条记录,其中员工的年龄超过21岁。

INSERT INTO employees(E_ID, Name, Salary, City, Designation, Date_of_Joining, Age) VALUES(11, "Simran Khanna", 45500, "Kolhapur", "HR", "2019-02-02", 22);

SQL 检查约束

“约束失败”错误是在我们尝试插入年龄超过21岁的员工时发出的。由于我们在”年龄”列上应用了检查约束条件,因此它只允许年龄值小于或等于21。

示例2:

假设我们创建了一个没有任何约束条件的员工表,后来又决定在其中一列上添加约束条件。然后我们将执行以下查询:

ALTER TABLE employ ADD CONSTRAINT Constraint_Age CHECK (Date_of_Joining <= "2019-01-01");

SQL 检查约束

为了验证日期加入列上的检查约束是否成功创建,我们将执行以下命令:

SHOW CREATE TABLE employ;

SQL 检查约束

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

INSERT INTO employ(E_ID, Name, Salary, City, Designation, Date_of_Joining, Age) VALUES(11, "Simran Khanna", 45500, "Kolhapur", "HR", "2019-02-02", 26);

SQL 检查约束

当我们尝试插入加入日期为’2019-02-02’的员工时,会发出约束失败的错误。由于我们在Date_of_Joining列上应用了检查约束,它只允许加入日期在’2019-01-01’之下或等于’2019-01-01’的数据。

4.移除检查约束

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

语法:

ALTER TABLE TableName DROP CHECK ConstraintName;

示例 1:

假设我们在学生表的某个列上设置了一个检查约束。然后,我们决定移除该约束。

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

SHOW CREATE TABLE students;

SQL 检查约束

将来执行以下命令来移除名为Constraint_Fav_sub的约束:

ALTER TABLE students DROP CHECK Constraint_Fav_sub;

SQL 检查约束

我们将再次执行SHOW CREATE TABLE命令来验证检查约束是否成功移除。

SHOW CREATE TABLE students;

SQL 检查约束

示例2:

假设我们在员工表的一列上分配了一个检查约束条件。后来,我们决定删除该约束条件。

为了验证创建的约束条件,我们将执行以下查询:

SHOW CREATE TABLE employee;

SQL 检查约束

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

ALTER TABLE employee DROP CHECK Constraint_DOJ;

SQL 检查约束

我们将再次执行SHOW CREATE TABLE命令,以验证检查约束已成功移除。

SHOW CREATE TABLE employees;

SQL 检查约束

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程