实验七 完整性及触发器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七完整性及触发器
实验目的:
理解用户定义的三类完整性,加深完整性的理解,学会创建和使用触发器。
实验内容:
(1)创建Woker表,并定义两个约束U1以及U2,其中U1规定Name的字段唯一,U2, 规定Sage(级别)字段的上限是28
(2)在Woker表中插入一条合法记录
(3)演示插入违反U2约束的例子,U2规定元组的Sage属性的值必须小于等于28 (4)去除u2约束
(5)重新插入(3)中想要插入的数据,由于去除了U2约束,所以插入成功
(6)创建规则rule_sex,规定插入或更新的值只能是M或F,并绑定到Woker的sex字段(7)演示违反规则rule_sex的插入操作。
(8)为worker表建立触发器T1,当插入或是更新表中数据时,保证所操作的记录的Sage 值大于0.
(9)为worker表建立触发器T2,禁止删除编号为00001的CEO
(10)worker表中的人员编号是不可变的,创建触发器T3实现更新中编号的不可改变性(11)演示违反T1触发器的约束插入操作
(12)演示违反T1触发器的约束更新操作
(13)演示违反T2触发器的约束插入操作
(14)演示违反T2触发器的约束更新操作
内容理解:
Sql中的约束机制:
在表中创建、修改和删除约束:
✧添加主键的一般格式:
ALTER TABLE<基本表名> ADD CONSTRAINT 主键名PRIMARY KEY(<字段名>)
✧唯一性约束
ALTER TABLE<基本表名> ADD CONSTRAINT 唯一性键名UNIQUE(<字段名>)
✧CHECK约束:是指在一行成功插入之前必须要满足的条件。
ALTER TABLE<基本表名> ADD CONSTRAINT 键名CHECK(<取值>)
✧外键约束
ALTER TABLE<基本表名1> ADD CONSTRAINT 外键名FOREIGN KEY (<.字段名1>) REFERENCES <基本表名2>(<字段名2>)
✧删除约束
ALTER TABLE<基本表名> DROP <约束名>
(1)规则的理解
静态:对静态对象的约束是反映数据库状态合理性的约束,如实体完整性
动态:对动态对象的约束是反映数据库状态变迁的约束,如触发器
在SQL中用于约束方面的有NOT NULL,CHECK等子句,而用于全局约束方面的有CREATE Assertion,Create RULE等子句。
例如:有约束规则A1:化学系学生不能选修低于2学分的课程
Create Assertion A1 check
(Not exists (select * From sc where s# in( Select s# From S where dept=”化学”)
AND C# in(Select c# From c where cp<2)))
一般规则的组成:
规则一般是由规则标识以及规则语义组成。规则语义由约束作用的数据对象、规则语义(如断言Assertion)、触发条件以及违反规则时的响应动作构成。
例如:有约束规则1:学校教职工的底薪是3000元
收约束的对象:“教职工”关系的SALARY属性
约束语义:title=教职工时,SALARY>=3000
触发条件:更新职工元组时
违反响应:拒绝执行更新操作
(2)规则的创建(当约束条件要为多列使用时)
步骤1:CREATE RULE rule AS condition_expression
步骤2: sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’
可绑定到某一列,或者用户自己定义的数据类型。
(3)rule约束的建立
规则可以是where子句中任何有效的表达式,并且可以包含诸如算术运算符等等condition_expression包含一个变量。每个局部变量的前面都有一个@符号。该表达式引用通过update或insert语句输入的值。在创建规则时,可以通过任何名称或符号表示值,但第一个字符必须是@符号。
例如:
Create rule rang_rule as @range>=$1000 and range<$2000
注意:rule对于已经输入表中的数据不起作用,只是存在数据库中,并未发生作用。需要将其与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。
sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’
[@rulename=]’rule’:指定规则的名称
[@objname=]’object_name:指定规则绑定的对象
规则可以松绑怎么取消:sp_unbindrule[@objname=]’object_name’
实验步骤:
1) 创建表worker。
create table worker(
Number char(5),
Name char(8)constraint u1 unique,
sex char(1),
sage int constraint u2 check(Sage<=28),
deapartment char(20),
constraint pk_worker primary key(number)
)