概述
SQL 的 CHECK 约束是一种用于限制列中数据的合法值的方法。它允许你在数据库表中指定一个条件,只有满足该条件的数据才能被插入或更新到表中。CHECK 约束通常用于确保数据的有效性,防止非法数据输入。
创建带有 CHECK 约束的表
你可以通过在创建表时定义 CHECK 约束来确保数据的合法性。以下是一个简单的例子:
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
FirstName varchar(255),
LastName varchar(255),
Age int,
Salary decimal(10, 2),
CHECK (Age >= 18 AND Age <= 65)
);在这个例子中,我们创建了一个名为 Employees 的表,并为 Age 列添加了一个 CHECK 约束,确保年龄在 18 到 65 岁之间。
在已有表中添加 CHECK 约束
如果你已经有一个表,并且想要为其添加 CHECK 约束,可以使用 ALTER TABLE 语句。例如:
ALTER TABLE Employees ADD CONSTRAINT CHK_EmployeeAge CHECK (Age >= 18 AND Age <= 65);
这里我们给 Employees 表添加了一个名为 CHK_EmployeeAge 的 CHECK 约束。
多个 CHECK 约束
你也可以为同一列设置多个 CHECK 约束,或者为不同的列设置不同的约束。下面的例子展示了如何为 Salary 和 Age 两列分别添加 CHECK 约束:
// www.javascriptcn.com code example
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
FirstName varchar(255),
LastName varchar(255),
Age int,
Salary decimal(10, 2),
CHECK (Age >= 18 AND Age <= 65),
CHECK (Salary > 0)
);或者,你也可以为每个约束命名,然后通过名称来引用它们:
ALTER TABLE Employees ADD CONSTRAINT CHK_AgeRange CHECK (Age >= 18 AND Age <= 65), ADD CONSTRAINT CHK_SalaryPositive CHECK (Salary > 0);
CHECK 约束的表达式
CHECK 约束中的表达式可以是任何有效的 SQL 表达式,包括逻辑运算符(如 AND、OR)、比较运算符(如 <、>、=)以及函数调用等。例如,你可以使用函数来检查日期范围:
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int,
OrderDate date,
DeliveryDate date,
CHECK (DeliveryDate > OrderDate)
);在这个例子中,我们确保了 DeliveryDate 总是在 OrderDate 之后。
使用子查询的 CHECK 约束
虽然不常见,但理论上你可以在 CHECK 约束中使用子查询。然而,这可能会导致性能问题,并且不是所有数据库系统都支持这种方式。一个可能的例子如下:
CREATE TABLE Products (
ProductID int PRIMARY KEY,
ProductName varchar(255),
Price decimal(10, 2),
CHECK (Price > (SELECT AVG(Price) FROM Products))
);请注意,上述示例可能无法在所有数据库系统中运行,因为它依赖于表中的当前数据来计算平均价格,而 CHECK 约束通常只在插入或更新操作时执行。
结论
CHECK 约束是数据库设计中非常有用的一种工具,可以帮助你确保数据的一致性和完整性。通过合理地应用 CHECK 约束,可以有效地防止无效数据的输入,从而提高应用程序的健壮性和可靠性。在实际项目中,根据业务需求灵活运用各种约束机制,将使你的数据库更加安全和高效。