本文章基于<njust-数据库基础-贾修一 >课件制作 主体部分由贾老师ppt构成
目录
第七章 约束和触发器
约束(constraint)
- 表示元素之间关系的表达式
- 保存在数据库中,由dbms管理检查
- 特定事件引发的主动元素
-外键
定义:引用另一个关系的属性或属性组
ps:可以自己引用自己 可以有null值
create table department
( deptid integer primary key,
name char(40) not null,
foreign key headerid references salesman(emipd)
);
-维护引用完整性
对被引用关系,有三种策略
1⃣️默认的策略:拒绝违法更新
2⃣️级联策略:随着其中一个表更新
3⃣️置空值策略:空的地方设置为null
语法:on {update/delete}{restrict/cascade/set null}
属性和元组上的约束
非空值约束:not null
-基于属性的check约束
custid int check(custid>0)
在元组建立时、update或者instert操作时被检查
-基于元组的check约束
(先检查基于属性,再检查基于元组)
-修改约束
//命名约束
gender int constraint noAndro check (gender in (0,1))
//drop约束
alter table moviestar drop constraint noAndro
-断言
定义:一种sql逻辑表达式,且永真
创建断言 create assertion<断言名>check(<条件>)
删除断言 drop assertion<断言名>
-约束的比较
触发器(triggers)
- 特定事件引发的主动元素
- 比复杂的约束要更容易理解和实现
-事件-条件-动作规则
create trigger name time event
on table-name
referencing [old {row|table} as old-name]
[new {new|table} as new-name]
for each row
when
//time:before/after
//event:delete/insert/update/update of column-list
一个触发器不能直接调用另一个触发器,但可以通过动作来“调用另一个触发器”
视图
- 虚拟的关系
- 不在数据库中进行存储,但可以对其进行查询,在某些情况可以修改视图
-视图的创建
create view [owner] view-name as select-without-order-by
-视图的查询 和查询真实关系的语法相同
drop view viewname;
alter view viewname as select
-可更新视图
把对视图的更新转变为一个等价对基本表的更新
select子句中的属性必须包含基表的所有属性,没有group by\聚集操作符\union\distinct
-视图中的替换触发器
当视图上定义了一个触发器时,可以用instead of 代替before or after
当一个时间唤醒触发器时,触发器的操作将会取代事件本身而被执行
索引(index)
- 是一种能够提高对关系元组访问效率的数据结构
- 可以是一颗二叉树上的键-值对
create index salesmanind on salesman(name)