SQL 触发器

目录

1.1 insert类型

1.2 update 类型

1.3 delect 类型


介绍:

触发器是与表有关的数据库对象,是指在insert/updata/delect之前或之后,触发器并执行触发器中的定义的SQL语句集合。这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

现在触发器还只支持行级触发,不支持语句级触发。

触发器类型:

insert型触发器:new 表示将要或者已经新增的数据。

updat型触发器:old表示修改之前的数据,new表示将要或已经修改后的数据。

delect型触发器:old表示将要或者已经删除的数据。


1.1 insert类型

语法:

创建:

create trigger trigger_name 

before/after insert/update/delect

on tbl_name for each row --行级触发器

begin

     trigger_stmt;

end;

查看:

show triggers;

删除:
drop trigger  trigger_name ;


案例:通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中,包含增加,修改,删除。

先提前准备一张表;

插入数据触发器

create trigger tb_user_insert_trigger

  after insert on tb_user for each row 

begin

insert into user_logs(id,operation,operate_time,operate_id,operate_params)  VALUES

(null,'insert',now(),new.id,concat('插入的数据内容为:id=',new.id,'name=',new.name,',phone=',new.phone,',email=',new.email,',profession=',new.profeession));

end;

//查看

show triggers;


1.2 update 类型

修改数据触发器

create trigger tb_user_update_t_trigger

  after update on tb_user for each row 

begin

insert into user_logs(id,operation,operate_time,operate_id,operate_params)  VALUES

(null,'update',now(),new.id,

concat('更新之前的数据内容为:id=',old.id,'name=',old.name,',phone=',old.phone,',email=',old.email,',profession=',old.profeession)'                |

concat('更新之后的数据内容为:id=',new.id,'name=',new.name,',phone=',new.phone,',email=',new.email,',profession=',new.profeession));

end;

show  triggers;

update tb_user


1.3 delect 类型

删除数据库触发器

create trigger tb_user_update_t_trigger

  after update on tb_user for each row 

begin

insert into user_logs(id,operation,operate_time,operate_id,operate_params)  VALUES

(null,'delete',now(),old.id,

concat('更新之前的数据内容为:id=',old.id,'name=',old.name,',phone=',old.phone,',email=',old.email,',profession=',old.profeession));

end;

show  triggers;//看看几个触发器。

delcet from tb_user  where id=26;//查询表中id为26的数据。

你可能感兴趣的:(MYSQL,sql,oracle,数据库,SQL触发器,SQL优化)