SQL数据库完整性控制:外键与主键约束操作指南

需积分: 43 4 下载量 112 浏览量 更新于2024-08-15 收藏 373KB PPT 举报
"本文主要介绍了如何在数据库中添加和删除外键约束,以及与之相关的数据完整性控制。数据完整性是数据库管理中至关重要的一个方面,它确保了存储的数据准确无误,防止了非法数据的输入。在SQL Server 2005中,数据完整性主要分为实体完整性、参照完整性、域完整性和用户定义的完整性四大类。 实体完整性主要通过主键约束来实现,主键是用于唯一标识表中每一行记录的关键字段。在创建表时,可以设置一列或多列为主键,要求这些列的值必须是唯一的,并且不允许为空。创建主键有多种方式,例如在设计表结构时直接指定,或在表创建后通过ALTER TABLE语句添加。例如,创建一个名为Tb_Class的表,可以这样定义主键: ```sql CREATE TABLE Tb_Class (ClassId char(8) PRIMARY KEY, ClassName varchar(30) NOT NULL, DeptId char(2) NOT NULL, ClassStuNumber int) ``` 如果表已经创建,但未设置主键,可以通过以下方式添加: ```sql ALTER TABLE Tb_Class ADD CONSTRAINT PK_ClassId PRIMARY KEY (ClassId) ``` 参照完整性则是通过外键约束实现,外键约束确保了表中的某个字段值必须存在于另一个表的主键中,从而保持了两个表之间的关联性。例如,我们首先创建一个没有外键约束的Tb_Student表,然后添加外键约束: ```sql CREATE TABLE Tb_Student (StuId char(10) PRIMARY KEY, StuName char(8) NOT NULL, DeptId char(2) NOT NULL) ALTER TABLE Tb_Student ADD CONSTRAINT FK_DeptId FOREIGN KEY (DeptId) REFERENCES Tb_Dept (DeptId) ``` 在这个例子中,Tb_Student表的DeptId字段引用了Tb_Dept表的主键DeptId,确保Tb_Student中的每个DeptId都有对应的Tb_Dept记录。 域完整性则涉及了check约束和默认值约束,它们限制了列的值必须符合特定条件或具有默认值。例如,可以设置一个列的值必须是正整数: ```sql CREATE TABLE Tb_Score (StudentId int NOT NULL, CourseId int NOT NULL, Score int CHECK (Score >= 0), DefaultScore int DEFAULT 0) ``` 最后,用户定义的完整性是根据具体业务需求自定义的规则,通常通过触发器或存储过程实现,以满足更复杂的完整性要求。 至于删除外键约束,可以使用ALTER TABLE语句,如: ```sql ALTER TABLE Tb_Student DROP CONSTRAINT FK_DeptId ``` 这将解除Tb_Student表中DeptId字段与Tb_Dept表之间的外键约束,允许Tb_Student中的DeptId不再受Tb_Dept主键的限制。" 请注意,数据完整性是数据库设计的基础,合理的约束可以有效地避免数据错误,确保数据的一致性和准确性。在实际应用中,应根据业务需求合理设置各种完整性约束,同时考虑性能和可维护性。