实验七 完整性及触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

)

相关文档
最新文档