完整性(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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”按钮用于将规则绑定到用户自定义数据类型,“绑定列”按钮