SQL数据库完整性约束指南:实体、参照与用户定义完整性操作详解
数据库完整性是确保数据准确性和一致性的基石。本文深入讲解SQL中的实体完整性(主键)、参照完整性(外键与级联)以及用户定义完整性(非空、唯一等约束),并提供从建表定义到后期修改、删除的完整实操语句。
理解SQL数据库完整性约束
在关系型数据库中,完整性约束用于限制存入表中的数据,防止不符合规则的数据进入。主要分为三类:保证每行唯一的实体完整性、保证表间关联有效的参照完整性,以及针对列值特定条件的用户定义完整性。
实体完整性:主键管理
实体完整性要求表中每一行数据必须有唯一的标识,通常通过主键(Primary Key)实现。主键列的值不能为空且必须唯一。
第1步:建表时定义主键
目的:在创建新表结构的同时确立主键。
操作:使用 CREATE TABLE 语句,在列定义末尾或单独指定 PRIMARY KEY。
Create table 学生表 (
Sno int identity(1,1),
Sname nvarchar(20),
-- 设置主键
Primary key (Sno)
)
第2步:对已存在表添加主键
目的:为已有但未设主键的表补充实体完整性约束。
注意:待添加主键的列必须已满足唯一且非空条件,否则需先处理数据或修改列属性。
操作:使用 ALTER TABLE 并添加命名约束。
alter table 学生表
add constraint PK_学生表_Sno
primary key(Sno)
参照完整性:外键与级联操作
参照完整性维护表与表之间的关系,通常通过外键(Foreign Key)实现。它确保子表中的引用必须在父表中存在,并可配置更新或删除时的级联行为。
第1步:建表时定义外键及级联
目的:建立两表间的引用关系,并自动处理关联数据的变动。
参数:ON DELETE CASCADE 表示父表删除记录时子表对应记录同步删除;ON UPDATE CASCADE 表示父表主键更新时子表外键同步更新。
create table 成绩表 (
sno int identity(1,1) primary key,
cno int not null,
foreign key(cno) References 课程表(Cno)
on Delete cascade -- 级联删除
on update cascade -- 级联更新
)
第2步:对已存在表添加外键
目的:在表结构确定后建立引用约束。
操作:确保外键列引用的列在主表中具有唯一性约束(通常是主键)。
alter table 成绩表
add constraint FK_成绩表_课程表
Foreign key(cno) references 课程表(cno)
用户定义完整性:列级约束
用户定义完整性针对特定应用环境的数据限制,包括非空、唯一、检查和默认值约束。这些约束通常作用于单列或多列的组合。
第1步:设置非空约束
目的:强制某列不允许存储 NULL 值。
操作:使用 ALTER COLUMN ... NOT NULL。若列中已有 NULL 值,需先将其清除或填充。
alter table 学生表
alter column name varchar(20) not null
第2步:设置唯一约束
目的:确保某列或列组合中的所有值各不相同。
操作:通过 ADD CONSTRAINT ... UNIQUE 实现。
alter table 学生表
add constraint UQ_学生表_Email unique(Email)
第3步:设置检查约束
目的:限制列中输入值的范围或逻辑条件。
示例:年龄必须大于5岁。
alter table 学生表
add constraint CK_学生表_Age check(age>5)
第4步:设置默认约束
目的:为插入数据时未提供值的列指定默认填充内容。
操作:使用 DEFAULT 关键字绑定常量或表达式。
alter table 学生表
add constraint DF_学生表_Gender default('男')
for gender
移除与管理约束
当业务需求变更或表结构调整时,可能需要删除不再需要的约束。删除约束不会丢失表内的数据,仅移除规则限制。
第1步:删除特定约束
目的:取消之前添加的命名约束。
操作:使用 DROP CONSTRAINT 指定约束名称。
-- 删除名为 DF_学生表_Gender 的默认约束
alter table 学生表 drop constraint DF_学生表_Gender
以上就是SQL数据库完整性约束的详细内容,更多关于数据库设计与优化资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













