完整性(二)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据完整性理论(二)

●规则

●默认

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”按钮用于将规则绑定到用户自定义数据类型,“绑定列”按钮

相关文档
最新文档