文档库 最新最全的文档下载
当前位置:文档库 › 完整性(二)

完整性(二)

完整性(二)
完整性(二)

数据完整性理论(二)

●规则

●默认

1. 规则

规则(RULE)是一种数据库对象,作用是向表中的列插入数据时,指定该列接受数据值的范围。

特点:

1)规则要在insert和update语句之前给出。

2)规则与其作用的表是相互独立的,即表的删除、修改不会对与之相连的规则产生影响。

3)规则和约束可以同时使用,表的列可以有一个规则及多个CHECK 约束。

4)规则与CHECK 约束很相似。但CHECK 约束不能直接作用于用户自定义数据类型一、创建规则

1.用CREATE RULE 命令创建规则

CREA TE RULE 命令用于在当前数据库中创建规则,其语法如下:

CREATE RULE rule_name AS condition_expression

其中:

rule_name 是规则的名称

condition_expression 子句是规则的定义,它可以是能用于WHERE 条件子句中的任何表达式,可包含算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN 等)。 condition_expression 子句中的表达式必须以字符@ 开头

例1:创建年龄规则。

create rule age_rule as @age >= 10 and @age <= 50

create rule age_rule as @age between 10 and 50

例2:

create rule Sex_rule as @性别in ('男','女') ----创建性别规则。

create rule Enter_date_rule

as @入学年份>='1953-01-01' and @入学年份<=getdate() -----创建入学年份规则

2.用Enterprise Manager 创建规则

在Enterprise Manager 的左侧窗格中,展开要创建规则的数据库(如:JXGL)目录。

在数据库的对象“规则”上面单击右键,此时出现一快捷菜单,从快捷菜单中单击“新建规则”菜单项,则会弹出“规则属性”对话框。

在此对话框中的“名称”对应的文本框中输入要创建的规则的名称(如:age_rule),在“文本”对应的文本框中输入规则的内容(即约束的条件)。

在输入完规则名称和规则的内容之后,单击“确定”按钮即完成规则的创建。

二、查看和修改规则

1.用Enterprise Manager 查看规则

选择要查看的规则,单击右键,从快捷菜单中选择“属性”选项,即会出现“规则属性”对话框,可以从中编辑规则的表达式。

2.用存储过程Sp_helptext查看规则

其语法如下:sp_helptext [@objname =] 'name'其中,[@objname =] …name?子句指明对象的名称

用Sp_helptext 存储过程查看的对象可以是当前数据库中的规则、默认、触发器、视图或未加密的存储过程。

如:查看名称为“age_rule”的规则内容。

EXEC sp_helptext 'age_rule'

3.修改规则的名称

可以通过Sp_rename 系统存储过程进行,也可以直接用右键单击要修改的规则,从快捷菜单中选择“重命名”菜单项,进行名称修改。

格式为:sp_rename ’ age_rule’,’nianling_rule’

三、规则的绑定与松绑

创建规则后,规则仅仅只是一个存在于数据库中的对象,并未发生作用。

需要将规则与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。联系的方法称为“绑定”。

所谓绑定就是指定规则作用于哪个表的哪一列。

表的一列只能与一个规则相绑定,而一个规则可以绑定多个对象,这正是规则的魅力所在。

解除规则与对象的绑定称为“松绑”。

1.用存储过程Sp_bindrule 绑定规则

存储过程Sp_bindrule 可以绑定一个规则到表的一个列或一个用户自定义数据类型上。

其语法如下:sp_bindrule [@rulename =] 'rule',[@objname =] 'object_name'[, 'futureonly']

各参数说明如下:(1)[@rulename =] 'rule' 指定规则名称。

(2)[@objname =] 'object_name' 指定规则绑定的对象。

(3)'futureonly…此选项仅在绑定规则到用户自定义数据类型上时才可以使用。

如:绑定规则age_rule 到学生表的字段年龄。

EXEC sp_bindrule 'age_rule', '学生表.年龄'

注:规则对已经输入表中的数据不起作用。

规则所指定的数据类型必须与所绑定的对象的数据类型一致,且规则不能绑定一个数据类型为TEXT、IMAGE或TIMESTAMP 的列。

如果表的列与规则A绑定,同时列又与规则B 绑定,则以规则B 为列的规则。

可以直接用一个新的规则来绑定列,而不需要先将其原来绑定的的规则解除,系统会将旧规则覆盖。

2.用存储过程Sp_unbindrule 解除规则

存储过程Sp_unbindrule 可解除规则与列或用户自定义数据类型的绑定,其语法如下:

sp_unbindrule [@objname =] 'object_name' [,'futureonly']

其中:…futureonly?选项同绑定时一样,仅用于用户自定义数据类型,

如:要解除已绑定到学生表的字段年龄的规则age_rule。

EXEC sp_unbindrule '学生表.年龄'

3.用Enterprise Manager 管理规则的绑定

在相应的规则名称上面单击右键,从快捷菜单中选择“属性”选项

该对话框中的“绑定UDTs”按钮用于将规则绑定到用户自定义数据类型,“绑定列”按钮

用于将规则绑定到表的列。

4. 删除规则

操作1:用Enterprise Manager 删除规则

操作2:使用DROP RULE命令删除规则使用DROP RULE 命令删除当前数据库中的一个或多个规则。

其语法如下:DROP RULE {rule_name} [,...n]

注:在删除一个规则前必须先将与其绑定的对象解除绑定

如:删除age_rule规则,可执行以下命令:DROP RULE age_rule

2 。默认

默认(Default)也是一种数据库对象,与缺省约束的功能一样。用户插入记录时,在没有给出具体数据的字段中,系统会自动插入一个数据。

默认的管理与应用同规则有许多相似之处。

一、创建默认

用CREA TE DEFAULT 命令创建默认其语法如下:CREATE DEFAULT default_name AS constant_expression

其中:

default_name是要创建的默认的名称

constant_expression 子句是默认的定义,该子句可以是数学表达式或函数,也可以包含表的列名或其它数据库对象。

如:创建性别默认sex_defa。

CREATE DEFAULT sex_defa as '男'

这样,当用户在输入记录数据时,未提供性别字段的值时,系统将自动默认其值为“男”。

二、查看和修改默认

1.用Enterprise Manager 查看默认

在Enterprise Manager 的左侧窗格中,展开相应的数据库(如:JXGL)目录

在数据库的对象“默认”上面单击,这时在右侧窗格中的任务板中即可看到已建立的各个默认的信息

在某个默认的名称上面单击右键,从快捷菜单中选择“属性”菜单项,即会出现“默认属性”对话框,可以从中编辑默认的值。

2.用存储过程SP_HELPTEXT 查看默认

使用SP_HELPTEXT存储过程可以查看默认的细节。

如:查看默认sex_defa。

EXEC SP_HELPTEXT sex_defa

3.修改默认的名称

与修改规则名称的方法相同,可以用SP_RENAME存储过程,也可以在企业管理器的任务板窗口中直接改名。

格式为:sp_rename ’ sex _defa’,’ xingbie_defa’

三、默认的绑定与松绑

创建默认后,默认仅仅只是一个存在于数据库中的对象,并未发生作用。

同规则一样,需要将默认与数据库表或用户自定义对象绑定。

表的一列只能与一个默认相绑定,而一个默认可以绑定多个对象。

1.绑定默认xingbie_defa到数据表学生表的性别列上。

EXEC SP_BINDEFAULT xingbie_defa, '学生表.性别'

2.解除默认xingbie_defa与学生表的性别列的绑定。

EXEC SP_UNBINDEFAULT '学生表.性别'

注:

如果列同时绑定了一个规则和一个默认,那么默认应该符合规则的规定。

不能绑定默认到一个用CREA TE TABLE 创建或ALTER TABLE 命令修改表时用DEFAULT 选项(默认约束)指定了的默认的列上。

四、删除教师职称默认xingbie_defa。

DROP DEFAULT xingbie_defa

注意:在删除一个默认前必须先将与其绑定的对象解除绑定

相关文档