数据库笔记(SQL之触发器)

来源:互联网 发布:纤莉秀大码女装淘宝网 编辑:程序博客网 时间:2024/06/03 23:03

1 触发器概述

触发器是当数据库内容发生修改时,数据库系统自动执行的一系列语句。
对于数据库的设计,主要有三点:
1. 什么样的事件进行会被数据库进行触发器的检查。
2. 检查后什么样的条件会导致触发器的触发。
3. 触发时什么样的行为会被执行。

注意:与存储过程以及函数相同,该触发器代码是标准SQL。不同数据库系统可能有着不同的语法,实际运用时还需要看相应数据库的文档。

2 触发器触发时机

触发时机基本在进行insertdeleteupdate操作的时机。而这几个操作都有两个时间点,after以及before,分别表示操作进行前以及操作进行后。在声明时,除了以上两个因素之外,还要指定触发器对应的表,使用on关键词进行声明。完整时机声明示例如下:

after insert on instructor

对于update操作时机,还可以使用of关键词选择对于表的某个属性进行触发。示例如下:

after update of takes on grade

3 触发器触发条件

触发条件使用when语句来进行判断。

使用for each row来表明对于每当有行被修改时都进行判断。此时在该语句中可能会需要出现对当前进行操作的行进行命名,使用语句referencing old row as进行修改前的行的命名,referencing new row as进行修改后的行的命名。

如果需要让触发器在对某个表进行操作的SQL语句后进行触发(譬如更新语句的触发,当某个更新复数个行的更新语句进行操作之后),则使用for each statement。此时,被操作的对象成了表而不是行,需要使用referencing old table as以及referencing new table as来命名被操作的表,该表被称为临时表

另外,使用for each statement时,若是触发实际为before,则在触发器中不能使用临时表,但是after实际可以使用。

4 触发器的完整声明

触发器的声明包括触发实际、触发条件以及触发器执行内容。其完整示例如下:

create trigger timeslot_check1 after insert on sectionreferencing new row as n_rowfor each rowwhen (n_row.time_slot_id not in(        select time_slot_id        from time_slot))begin    rollbackend;
0 0
原创粉丝点击