一、数据库完整性概述
DBMS应提供定义数据库完整性约束条件,并把它们存入数据库中。
检查数据是否满足完整性约束条件的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查。
DBMS若发现用户的操作违背了完整性约束条件,就采取一定的动作以保证数据的完整性,如拒绝执行该操作,或级联执行其他操作。
二、缺省(默认值)和规则
缺省和规则来源于由Sybase开发的S默认值QL Server,在老版本的SQL Server或者升级版本中都有缺省和规则的使用。
缺省与规则有以下特点:
(1)缺省与规则是数据库对象,它们是独立于表和列而建立的。
(2)缺省与规则建立后与列或数据类型产生关联,列和数据类型就具有了缺省与规则的属性。
(3)缺省与规则定义后,可以重复使用,可以绑定到多个列或数据类型上。
(4)缺省与规则不随表同时调入内存,当用到时才被调入内存,这可能会使程序执行出现延时。
缺省和规则对象通常只在它所创建的数据库中有效,不是ANSI标准,一般不提倡使用。
应尽可能使用约束,任何可以使用缺省与规则的地方都有可以使用约束。
1. 缺省
可以使用CREATE DEFAULT语句创建默认对象。其语法格式如下:
CREATE DEFAULT default AS constant_expression
例如: create default d_grade as 1
默认对象创建后不能使用,必须首先将其绑定到某列或者用户自定义的数据类型上。其使用语法格式如下:
sp_bindefault [@defname = ] 'default', [@objname = ] 'object_name' [, [@futureonly = ] 'futureonly_flag']
其中: [, [@futureonly = ] ‘futureonly_flag’]仅在此之后将默认值绑定到用户定义的数据类型时才使用。
例如: exec sp_bindefault 'd_grade', ‘sc.grade'
解除绑定可以使用sp_unbindefault存储过程。其语法格式如下:
sp_unbindefault [@objname = ] 'object_name'
例如: exec sp_unbindefault ‘sc.grade'
在删除默认对象之前,首先要确认默认对象已经解除绑定。删除默认对象使用DROP DEFAULT语句。其语法格式如下:
DROP DEFAULT {default} [,…n]
例如: drop default d_grade
2.规则
CREATE RULE rulename AS condition_expression
其中各参数含义如下:
例如:create rule r_grade as @grade<=100 and @grade>=0
sp_bindrule [@rulename = ] 'rulename', [@objname = ] ‘object_name’
例如: exec sp_bindrule 'r_grade','sc.grade‘
sp_unbindrule [@objname = ] 'object name' [,[@futureonly = ] 'futureonly_ lag']
例如:
exec sp_unbindrule 'sc.grade'
④删除规则
首先要解除规则的绑定,然后才能删除绑定
例如:drop rule r_grade
三、约束
CONSTRAINT <完整性约束条件名>[PRIMARY KEY短语|FOREIGN KEY 短语|CHECK短语]
1 CREATE TABLE Student2(2 sno int CONSTRAINT C1 CHECK (sno BETWEEN 10000 AND 99999),3 sname CHAR(8) CONSTRAINT C2 NOT NULL,4 sage int CONSTRAINT C3 CHECK (sage<30),5 ssex VARCHAR(2) CONSTRAINT C4 CHECK (ssex IN ('男', '女')),6 CONSTRAINT SK PRIMARY KEY(Sno)7 );