一、触发器
1.什么是触发器(trigger)
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。
此外触发器是逻辑电路的基本单元电路,具有记忆功能,可用于二进制数据储存,记忆信息等。
2.触发器4个基本组成:
(1)触发事件:即在什么事件发生时触发,常见事件如 insert ,update,delete;
(2)触发时间:这里的时间是相对于事件发生前后来说的,可以定义在事件发生之前和事件发生之后 before | after
(3)触发器本身:这是关键,也就是我们为什么要创建这个触发器,要用它做什么,触发器的主体,一段pl/sql程序块
(4)触发器频率:说明触发器内,在事件发生时,触发的频率,常见有语句级触发器和行级触发器,语句级就是该条语句执行一次,触发器触发一次,而行级触发器则是每操作一行就执行一次触发器,定义时需要添加(for each row)
3.触发器的语法:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE| AFTER}
{INSERT| UPDATE| DELETE}
ON table_name
[FOR EACH ROW]
[WHERE CONDITION]
BEGIN
执行体;
END;
4.触发器的应用
第一步:创建操作目标表t_target_table
Create table t_target_table(
id varchar(255),
account varchar(255),
pwd varchar(255),
name varchar(255));
第二步:创建操作记录日志表t_record_log
Create tablet_record_log(
id varchar(255),
Target_idvarchar(255),
Target_pwd varchar(255),
Opration varchar(255),
Date date);
第三步:创建触发器t_trigger
注意:声明的s变量将会被赋值为if语句中的s的值并插入记录表中
触发器实例一:
create or replace TRIGGER t_trigger after insert or update or delete on t_target_table
DECLARE s t_record_log.opration %type;
begin
if inserting then
s:= '添加操作';
elseif inserting then
s:= '删除操作';
elseif inserting then
s:= '修改操作';
end if ;
insert into t_record_log values(user,s,to_char(SYSDATE(),'yyyy-mm-dd hh mm ss'));
end;
触发器实例二:
标签:语句,触发器,varchar,数据库,trigger,table,255 From: https://www.cnblogs.com/wanyuy/p/17095104.html