null第九章 数据库完整性第九章 数据库完整性完整性约束条件
完整性控制
Sybase 的完整性完整性约束条件完整性约束条件数据库完整性: 指数据库的正确性和相容性, DBMS提供维护数据库完整性的功能
完整性约束条件: 根据实际应用需求, 数据库中的数据应满足一些
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
的条件, 这些条件称为完整性约束条件
完整性约束条件是现实世界真实的反映
完整性检查: 指DBMS中检查数据是否满足完整性条件的机制完整性约束条件完整性约束条件完整性约束条件分为:
值的约束和结构约束:
指对数据取值类型、
范围、精度等的规
定, 例如对属性规定
某个值集, 规定属性
取值类型、格式(职
工号第一位为字母,
后面是四位数字)指对数据之间联系的限制, 以关
系库为例:同一关系的不同属性
之间可能满足一定的约束条件(
A1A2); 不同关系之间的属性取
值也可能要满足一定的约束条件
(外键取值)完整性约束条件完整性约束条件静态约束和动态约束:
立即执行约束和延迟执行约束:
完整性约束条件完整性约束条件例如: begin transaction
update Students set Sno=‘95012’
where Sno=‘95001’;
update SC set Sno=‘95012’
where Sno=‘95001’;
commit
如是立即执行约束, 事务不能成功执行
如是延迟执行约束, 事务可以成功执行
完整性控制完整性控制DBMS完整性控制机制包括:
定义功能: 提供定义完整性约束条件的机制
检查功能: 检查用户提供的请求是否违背了完整性约束条件
如果发现用户的操作违背了完整性约束条件, 则采取一定的动作来保证数据的完整性(一般是取消该事务已产生的影响--恢复)
Sybase 的完整性Sybase 的完整性在Sybase数据库中创建带有数据完整性和参照完整性的表: 把完整性作为表的一部分来说明即完整性约束子句
缺省约束default: 给出列的缺省值
create table Students(…
sex char(1) default ‘M’,
... );
检查约束check constrain: 限定插入列中的值
列级检查约束 Sybase 的完整性Sybase 的完整性 create table publishers( pub_id char(4) not null
constraint chk_pubid check(pub_id in (‘1389’, ‘0736’,
‘0877’) or pub_id like ‘99[0-9][0-9]’)
….)
表级检查约束
create table discounts(discounttype varchar(40) not null,
lowqty int,
hightqty int,
…,
constraint chk_low_hight check(lowqty<=hightqty) );Sybase 的完整性Sybase 的完整性主键约束primary key constraint: 限定主键的列不可有重复值, 不可有空值
列级主键约束
create table publishers( pub_id char(4)
constraint pky_pubid primary key clustered,
pub_name varchar(30),
….)
表级主键约束
create table sales(stor_id char(4) not null,
ord_num varchar(20) not null,
date datetime not null,
constraint pky_so primary key nonclustered(stor_id,ord_num))Sybase 的完整性Sybase 的完整性参照约束reference constraint:
列级参照约束
create table publishers( pub_id char(4)
constraint pky_pubid primary key,
pub_name varchar(30),
….)
create table title( title_id int not null,
title varchar(80) null,
pub_id char(4) null
constraint ref_pubid reference publishers(pub_id),
note varchar(200) null)Sybase 的完整性Sybase 的完整性表级参照约束
create table publishers( pub_id char(4),
pub_name varchar(30),
…,
constraint pky_pubid primary key(pub_id))
create table title( title_id int not null,
title varchar(80) null,
pub_id char(4) null,
note varchar(200) null,
constraint ref_pubid foreign key(pub_id)
reference publishers(pub_id))Sybase 的完整性Sybase 的完整性唯一约束unique constraint:
列级唯一约束
create table publishers( pub_id char(4) not null
constraint unq_pubid unique nonclustered,
pub_name varchar(30),
…)
表级唯一约束
create table publishers( pub_id char(4) not null
pub_name varchar(30),
…,
constraint unq_pubid unique clustered(pub_id))缺省Sybase 的完整性Sybase 的完整性删除约束: 只能使用alter table语句, 增加、更新或删除现有表的约束
替换现有约束
原来: create table Students(…,
sex char(1) default ‘M’);
替换: alter table Students
replace sex default ‘F’Sybase 的完整性Sybase 的完整性增加约束
alter table Students add constraint chk_SA
check(SA<30)
删除已有约束
alter table Students drop constraint chk_SA
相关存储过程
sp_helpconstraint 表名:
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
指定表上的关于约束的信息
sp_column_privileges 表名: 列级权限
sp_table_privileges 表名: 表级权限 Sybase 的完整性Sybase 的完整性在Sybase中解决完整性的方法还有规则、索引、触发器等
规则
创建一个值的清单或值的集合的规则
CREATE RULE rul_state AS @state in (‘CA’,’CO’,’WA’)
创建一个值的范围规则
CREATE RULE rul_disc_range AS @disco between 0 and 100
创建一个值由编辑掩码确定的规则
CREATE RULE rul_part_num AS @part_num like
“[BF][1-9][1-9]_”
Sybase 的完整性Sybase 的完整性规则
将规则rul_state与“authors.state”列和“publishers.state”列相绑定:
EXEC sp_bindrule “rul_state”,”authors.state”
EXEC sp_bindrule “rul_state”,” publishers.state”
将规则rul_disc_range与“discounts.discount”列相绑定:
EXEC sp_bindrule “rul_disc_range”, “discounts.discount”
查看规则rul_state 的正文和其他有关的信息:
EXEC sp_helptext rul_state
EXEC sp_help rul_state
删除:DROP RULE rul_state
Sybase 的完整性Sybase 的完整性唯一索引:限制唯一索引列的取值(唯一)
CREATE [UNIQUE][CLUSTERED|NONCLUSTERED]
INDEX index_name ON table_name(column_name[,column_name…])
例如:为authors表的au_id列创建一个唯一索引
CREATE UNIQUE INDEX idx_u_auid ON authors(au_id)Sybase 的完整性Sybase 的完整性触发器
触发器(Trigger)是一种特殊类型的存储过程,通过事件(插入、删除和更新)触发执行。
-是实现复杂完整性约束的有效方法
如:主键被更新或删除外键值时应如何变更?
-在应用中的其他作用
维护复制数据、保持导出数据列的当前值(自动更新导出列)、业务规则限制(书价不许一次提价超过10%)、实现定制MATCH_
word
word文档格式规范word作业纸小票打印word模板word简历模板免费word简历
_1716002598476_0(监控:不许周六、周日插入表,银行必须记录大于10000的事务等。)nullSybase 的完整性Sybase 触发器的形式
CREATE TRIGGER trigger_name
ON table_name
FOR {INSERT,DELETE,UPDATE}
AS
sql 语句和语句组
nullSybase 触发器的举例
CREATE TRIGGER Tri_d_publishers
ON publishers FOR DELETE
AS
if @@rowcount=0//没有行被删除
return
//有行被删除:也删除title表中相应的行
DELETE titles FORM titles t,deleted d
WHERE t.pub_id=d.pub_id
RETURN
null约束和触发器触发器用于维护数据库一致性,但最好考虑用约束
来实现同样的目的;
触发器根据操作来定义一致性;
约束易理解,能给DBMS较多机会优化执行;
约束可以阻止任何语句违反一致性;
触发器只能由特定语句来激活,比较灵活;
触发器的其他用途(如维护复制数据库等)