概述
列约束(Column Constraints)是 SQL Server 中保证数据合法性和完整性的一种机制。它可以限制列中插入、更新的数据必须符合特定的条件,从而降低数据错误率,提高数据质量和可信度。本文将介绍 SQL Server 中列约束机制的使用方法和示例。
常用列约束
1. NOT NULL 约束
NOT NULL 约束用于指定列中的数据不能为空值。在创建表时可以使用 NOT NULL 约束,也可以在后续 ALTER TABLE 语句中添加 NOT NULL 约束。例如:
--创建表时添加 NOT NULL 约束
CREATE TABLE Person (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
);
--在已有表中添加 NOT NULL 约束
ALTER TABLE Person
ALTER COLUMN name VARCHAR(50) NOT NULL;
NOT NULL 约束是保证数据完整性的重要手段之一。
2. UNIQUE 约束
UNIQUE 约束用于指定列中的数据是唯一的。在创建表时可以使用 UNIQUE 约束,也可以在后续 ALTER TABLE 语句中添加 UNIQUE 约束。例如:
--创建表时添加 UNIQUE 约束
CREATE TABLE Person (
id INT PRIMARY KEY,
name VARCHAR(50) UNIQUE,
age INT
);
--在已有表中添加 UNIQUE 约束
ALTER TABLE Person
ADD CONSTRAINT Unique_Person_Name UNIQUE (name);
UNIQUE 约束可以用于保证某些列的唯一性,例如身份证号、手机号等。
3. PRIMARY KEY 约束
PRIMARY KEY 约束用于指定列作为主键。主键是用来唯一标识表中每一行数据的一列或一组列。在创建表时可以使用 PRIMARY KEY 约束,也可以在后续 ALTER TABLE 语句中添加 PRIMARY KEY 约束。例如:
--创建表时添加 PRIMARY KEY 约束
CREATE TABLE Person (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
--在已有表中添加 PRIMARY KEY 约束
ALTER TABLE Person
ADD CONSTRAINT PK_Person_Id PRIMARY KEY (id);
PRIMARY KEY 约束在数据关系建立、数据查询等方面有着重要的作用。
4. FOREIGN KEY 约束
FOREIGN KEY 约束用于指定列作为外键,与其他表中的数据建立关系。外键是指在一张表中的列链接到另一张表的主键。在创建表时可以使用 FOREIGN KEY 约束,也可以在后续 ALTER TABLE 语句中添加 FOREIGN KEY 约束。例如:
--创建表时添加 FOREIGN KEY 约束
CREATE TABLE Order (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES Customer(id)
);
--在已有表中添加 FOREIGN KEY 约束
ALTER TABLE Order
ADD CONSTRAINT FK_Order_Customer FOREIGN KEY (customer_id) REFERENCES Customer(id);
FOREIGN KEY 约束可以用于建立不同表之间的数据联系,从而获得更丰富、更实用的数据。
自定义列约束
SQL Server 还支持自定义列约束。自定义列约束是根据业务需求,对列进行限制的方式之一。自定义列约束可以基于标量函数、表值函数、CHECK 约束等实现。例如:
--创建基于标量函数的列约束
CREATE FUNCTION Check_Date (@date DATETIME)
RETURNS BIT
BEGIN
IF Year(@date) <= 2000
RETURN 0;
ELSE
RETURN 1;
END
CREATE TABLE Task (
id INT PRIMARY KEY,
name VARCHAR(50),
start_date DATETIME CONSTRAINT CK_Task_Date CHECK (dbo.Check_Date(start_date) = 1)
);
--创建基于表值函数的列约束
CREATE FUNCTION Check_Region (@region VARCHAR(50))
RETURNS TABLE
AS
RETURN (
SELECT @region AS region
WHERE @region IN ('China', 'Japan', 'Korea')
);
CREATE TABLE Sales (
id INT PRIMARY KEY,
amount DECIMAL(12, 2),
region VARCHAR(50) CONSTRAINT CK_Sales_Region CHECK (EXISTS (SELECT * FROM dbo.Check_Region(region)))
);
通过自定义列约束,我们可以根据实际业务需求对表中的列作出更加精细、严格的限制。
小结
列约束是 SQL Server 中确保数据完整性的一种关键机制。它可以限制数据的大小、唯一性、主键性、外键性、自定义约束等,避免数据错误、遗漏等情况的出现。在实际开发、维护的过程中,我们应当根据实际需求,合理应用列约束机制,确保数据的高质量、可信度和可用性。