1. 什么是约束
在SQL server中,约束是用于限制表中列数据类型、数值范围和引用关系的规则。它可以帮助我们保证数据的完整性和一致性。约束可分为列级约束和表级约束两种。
1.1 列级约束
列级约束是指在表创建时添加在列上的约束,可以限定列的数据类型、值范围以及不为空等限制,常见的列级约束有:
NOT NULL:指定该列的值不能为空
UNIQUE:指定该列的值必须唯一
CHECK:指定该列的值必须符合指定条件
1.2 表级约束
表级约束是指在表创建完成后添加在多个列上的约束,通常适用于跨多个字段的约束。常见的表级约束有:
PRIMARY KEY:指定一列或多列作为唯一标识符
FOREIGN KEY:指定一列或多列作为外键,引用来自另一个表的主键或唯一键
DEFAULT:指定该列的默认值
2. 如何添加约束
在SQL server中,我们可以通过以下方式向表添加约束:
2.1 列级约束
添加列级约束的方式有两种,一种是在表创建时添加,另一种是在表创建后通过ALTER TABLE语句添加。
2.1.1 在表创建时添加列级约束
在表创建时添加列级约束,需要在列名后面加上约束条件。
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK(age > 0),
sex CHAR(1) CHECK(sex='M' OR sex='F')
);
2.1.2 通过ALTER TABLE语句添加列级约束
通过ALTER TABLE语句添加列级约束,需要先使用ALTER TABLE语句指定要修改的表,然后在ADD CONSTRAINT后面指定约束名称和约束条件。
ALTER TABLE student
ADD CONSTRAINT age_check CHECK(age > 0);
2.2 表级约束
添加表级约束的方式与列级约束类似,也分为表创建时和表创建后两种情况。
2.2.1 在表创建时添加表级约束
在表创建时添加表级约束,需要在列定义之后,在表级别指定约束条件。
CREATE TABLE student (
id INT,
name VARCHAR(50),
age INT,
sex CHAR(1),
PRIMARY KEY (id),
CONSTRAINT age_check CHECK(age > 0),
CONSTRAINT sex_check CHECK(sex='M' OR sex='F')
);
2.2.2 通过ALTER TABLE语句添加表级约束
通过ALTER TABLE语句添加表级约束,需要先使用ALTER TABLE语句指定要修改的表,然后在ADD CONSTRAINT后面指定约束名称和约束条件。
ALTER TABLE student
ADD CONSTRAINT id_pk PRIMARY KEY (id);
3. 约束的影响
约束的存在可以保证数据的完整性和一致性,但同时也会对数据的操作产生影响。
3.1 约束的阻止作用
约束会阻止一些不符合规定的操作,例如:
NOT NULL约束会阻止添加一个空值到指定列
FOREIGN KEY约束会阻止添加一个不存在于关联表中的值
PRIMARY KEY约束会阻止添加重复的值
3.2 约束的联级作用
约束在处理数据的时候,还可以通过联级操作,对相关数据或表进行级联操作, 从而保证数据的一致性。常见的联级操作有:
CASCADE:级联删除或更新,即删除或更新主表记录时同时删除或更新从表的关联记录
SET NULL:将从表的关联记录设为NULL,主表记录被删除后从表关联的主键值变为NULL
NO ACTION或RESTRICT:拒绝执行该操作
4. 总结
在SQL server中,约束是保证数据完整性和一致性的重要手段之一。我们可以通过列级约束和表级约束来限制列数据类型、值范围和引用关系。约束可以对数据进行阻止和联级操作,从而保证数据的一致性。在使用约束的时候,需要注意约束的影响和联级操作的设置,以免产生意外的结果。