1. 数据库完整性的含义
数据库的完整性是指数据库中数据的正确性、有效性和相容性;
数据库中使用的各种完整性约束能够主动地感应数据库中产生的问题,并在开发过程中及时地解决问题;
数据库中的安全防范非法用户和非法操作,数据库的完整性则防止合法用户使用数据库时添加不符合语义的数据;从数据库安全保护的角度来看,数据的完整性和安全性是密切相关的;
2. 完整性约束的分类
2.1 值的约束和结构的约束
从约束条件的使用对象划分,完整性的约束可分为值的约束和结构的约束;
- 值的约束是对数据类型、数据格式或取值范围等尽心规范;
- 结构的约束时对数据之间的联系约束;数据库中的同一关系和不同关系之间都存在一定的联系,它们都应满足一定的约束条件;常见的结构约束有函数依赖约束、实体完整性约束、参照完整性约束和统计约束;
统计约束是指规定在某个属性值与多个元组的统计值之间必须满足某种约束条件;
2.2 静态约束和动态约束
从约束对象的状态划分,完整性约束可分为静态约束和动态约束;
- 静态约束是指对数据库每一个确定状态都满足的约束条件,它是反映数据库状态合理性的约束,值的约束和结构的约束都属于静态约束;
- 动态约束是指数据库的状态在转变时,新旧值之间应满足的约束条件,它反映数据库状态变迁的约束;
3. 完整性约束的实施
数据完整性约束的方法有5种,分别是约束、规则、默认、存储过程和触发器;
选用实施数据完整性的方法时,优先选择约束,在 SQL Server 中,约束的执行速度最快;
3.1 规则
规则 是一种单独存储的数据库对象,它是数据库对存储在表中的列或用户自定义数据类型中的规定和限制,它和 CHECK
约束类似,但 CHECK
约束不能直接作用于用户自定义数据类型;
- 创建规则的 SQL 命令是
CREATE RULE
,语法格式如下:
CREATE RULE <规则名> AS <规则定义>
<规则名>
是规则的名称,命名规则跟数据表名类似;<规则定义>
是此项规则的限制条件,可以是 WHERE
条件子句的任何表达式,包括算术表达式等;
例子 1:创建一个成绩规则 X_T,规定其中的值必须大于等于0且不大于150
create rule X_T as @Grage>=0 and @Grage<=150
注意: CREATE RULE
语句中不能出现列名,使用时必须在列名前加上 “@” 符号将其表示为局部变量;
- 规则被创建后,仅作为一个数据对象存在,并不发挥作用;若想要使用规则,要将其与数据表或用户名自定义数据类型联系起来,这过程称为绑定;
使用存储过程 sp_bindrule 绑定规则的语法格式如下:
EXEC sp_bindrule '规则名','绑定对象'
例子 2:绑定成绩规则 X_T到数据表 C 的属性 Credit
exec sp_bindrule 'X_T','C.Credit'
注意: 规则无法限制已经输入数据表的数据;
- 解除规则的过程称为解绑,可用存储过程
sp_unbindrule
来实现,具体格式如下:
EXEC sp_unbindrule '绑定对象'
例子 3:解除已经绑定到数据表C中属性Credit上的成绩规则 X_T
exec sp_unbindrule 'C.Credit'
- 删除规则的 SQL 命令为
DROP RULE
,语法格式如下:
DROP RULE <规则名>
例子 4:删除成绩规则 X_T
drop rule X_T
注意: 删除某规则之前要先将其与绑定的对象解绑;
3.2 默认
默认用于添加数据时没有明确给出某个值的情况,SQL Server 会自动填入设置的默认值;默认值可以是常量、内置函数或数学表达式;
此处的默认对象与 DEFAULT
约束相似,但默认对象可用于多个列或用户自动以数据类型;
CREATE DEFAULT
是创建默认的 SQL 命令,语法格式如下:
CREATE DEFAULT <默认名> AS <默认定义>
<默认名>
是默认的名称,命名规则和数据表名类似;<默认定义>
是默认的内容,可以是数学表达式或函数,能包含表的列名或其他数据对象;
例子 5:创建一个成绩的默认 Tim_C,默认值为‘60’
create default Tim_C as '60'
- 同规则一样,默认也有绑定和解绑的过程;用存储过程
sp_bindefault
绑定默认的语法格式如下:
EXEC sp_bindefault '默认名','绑定对象'
例子 6:绑定默认Tim_C到数据表C的 Credit
exec sp_bindefault 'Tim_C','C.Credit'
注意: 默认无法绑定在已有 DEFAULT
约束的属性列上;当某列同时绑定了一个规则和一个默认时,默认应该符合规则的规定;
- 解除默认的过程称为解绑,用存储过程
sp_unbindefault
来实现,语法格式如下:
EXEC sp_bindefault '绑定对象'
例子 7:解除绑定到数据表 C的属性 Credit 的默认 Tim_C
exec sp_unbindefault 'C.Credit'
4. DROP DEFAULT
是删除默认的SQL命令,语法格式如下:
DROP RULE <默认名>
例子 8:删除默认 Tim_C
drop default Tim_C