一、数据完整性设计
- 数据完整性就是确保数据库中数据的一致性和正确性
- 数据完整性包括数据的完整性和参照的完整性
二、SQL Server数据完整性
- PRIMARY KEY约束
- FOREIGN KEY约束
- UNIQUE约束
- CHECK约束
- DEFAULT约束
- 允许空值
三、SQL Server六大约束
约束名称 | 主键约束(PRIMARY KEY) | 唯一约束(UNIQUE) | 外键约束(FOREIGN KEY) | 检查约束(CHECK) | 非空约束(NOT NULL) | 默认值约束(DEFAULT) |
---|---|---|---|---|---|---|
定义/特征 | 在表中常有一列或多列的组合,其值能唯一标识表中的每一行。这样的一列或多列成为表的主键(Primary Key)。一个表只能有一个主键,而且主键约束中的列不能为空值。 | UNIQUE约束用于确保表中的两个数据行在非主键中没有相同的列值。与PRIMARY KEY约束类似,UNIQUE约束也强制唯一性,但UNIQUE约束用于非主键的一列或多列组合,且一个表可以定义多个UNIQUE约束,另外UNIQUE约束可以用于定义多列组合。 | 外键(Foreign Key)是用于建立和加强两个表(主表与从表)的一列或多列数据之间的连接的。创建约束的顺序是先定义主表的主键,再对从表定义外键约束。 | CHECK约束用于限制输入一列或多列的值的范围,通过逻辑表达式来判断数据的有效性。一个列的输入内容必须满足CHECK约束的条件,否则数据无法正常输入。 | 确定这个字段中的数据必须不能为空。 | 若在表中某列定义了DEFAULT约束,用户在插入新的数据行时,如果该列没有指定数据,那么系统将默认值赋给该列,当然该默认值也可以是空值(NULL)。 |
作用 | 确保主键所对应的列没有空值或没有重复的值。 | 确保在非主键列中不输入重复的值。 | 控制可以存储在外键中的数据和控制对主键表中数据的更改。 | 限制列中允许的取值以及多个列之间的关系。 | 该列是否允许为空值。 | 默认值约束是在一个表内针对某一个字段定义的, 仅对该字段有效。 |
针对某种完整性 | 实体完整性 | 实体完整性 | 参照完整性 | 域完整性、自定义完整性 | 域完整性 | 域完整性 |
鼠标设置方法 | 右键单击表,选择设计。选中要创建主键的列,然后单击上面的小钥匙。也可以右键需要创建主键的列,然后单击小钥匙。 | 右键单击要设置的列选择索引/键。然后单击添加按钮。选择需要设置的列,可以是一列也可以是多列的组合。关闭并保存设置。 | 右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。接下来点击添加–>表和列规范。在主键表中选择主表和主表的主键列。设置完后保存即可。 | 右键单击要设置的列选择CHECK约束。然后单击添加按钮。选择需要设置的列。接下来点击添加–>表达式。设置相应的表达式。设置完后保存即可。 | 指定非空约束的列不能没有值,也就是说在插入记录时,对添加了非空约束的列一定要给值;在修改记录时,不能把非空列的值设置为NULL。 | 右键单击表,选择设计。选中需要设置默认值的标识列,在列属性中选择默认值或绑定,为其设置默认值。设置完后保存即可。 |
修改表ALTER TABLE设置方法 | alter table 表名 add constraint 约束名 Primary key(字段名) |
alter table 表名 add constraint 约束名 unique(字段名) |
alter table 从表 add constraint 约束名 foreign key(字段名) references 外表名(字段名) |
alter table 表名 add constraint 约束名 check(条件) |
alter table 表名 alter column 字段名 类型 not null |
alter table 表名 add constraint 约束名 default 值 for 字段名 |
创建表CREATE TABLE设置方法 | uId int identity(1,1) primary key,–创建了一个列名为 uId的列,并设置了主键约束 | uName nvarchar(8) not null unique,创建了一个列名为uName的列,并设置了唯一约束 | 学号nvarchar(2) NOT NULL CONSTRAINT FK _成绩表_STUDENT FOREIGN KEY REFERENCES STUDENT (学号) | email varchar(50) check (email like ‘%@%’)) | uSex nchar(1) not null check(uSex=‘男’ or uSex=‘女’) default(‘男’),–设置了非空和默认约束 | uAge int not null check(uAge>0 and uAge<100) default(18),–设置了非空、检查、默认约束 |
验证方法 | 输入重复值或空值NULL时,计算机会显示错误提示 | 输入重复值时,计算机会显示错误提示 | 主表与子表会根据外键的设置产生级联、限制、忽略的关系 | 输入错误值时,计算机会显示错误提示 | 设置非空约束,输入空值时,计算机会显示错误提示 | 不输入信息时,会显示所设置的默认信息 |
四、参照完整性外键具体动作介绍
动作 | 命令参数 | SQL Server Management Studio中的设置 | 主键引发修改主键值删除记录 | 外键的反应 |
---|---|---|---|---|
限制 | NO ACTION默认值参数(选项) | 默认设置/无操作,不用改动 | 操作无法进行, 原因是有对应的外键存在 | 无操作,无任何反应 |
级联 | CASCADE | 层叠 | 操作可以正常进行 | 自动跟随主键完成修改或删除动作 |
取空值 | SET NULL | 设置空 | 操作可以正常进行 | NULL |
取默认值 | SET DEFAULT | 设置默认值 | 操作可以正常进行 | 自动填入默认值 |