MySQL中的触发器

介绍

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

        使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还 只支持行级触发,不支持语句级触发。

 

语法

创建: 

        CREATE TRIGGER trigger_name         BEFORE/AFTER INSERT/UPDATE/DELETE         ON tbl_name FOR EACH ROW 行级触发器         BEGIN                 trigger_stmt ;         END; 查看:         SHOW TRIGGERS ; 删除

        DROP TRIGGER [schema_name.]trigger_name ;

        如果没有指定 schema_name,默认为当前数据库 。

案例:

        通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs, 包含增加,修改 , 删除 ;         表结构准备:                  — 准备工作 : 日志表 user_logs         create table user_logs(                 id int ( 11 ) not null auto_increment,                 operation varchar ( 20 ) not null comment 操作类型 , insert/update/delete’ ,                 operate_time datetime not null comment 操作时间 ,                 operate_id int ( 11 ) not null comment 操作的 ID’ ,                 operate_params varchar ( 500 ) comment 操作参数 ,                 primary key(`id`)         )engine=innodb default charset=utf8;         — 插入数据触发器                   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 .profession )); end;

        插入数据到tb_user

        insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime)          VALUES ( 26 , 三皇子 , ‘18809091212’ , ‘erhuangzi@163.com’ , 软件工 程’ , 23 , ‘1’ , ‘1’ ,now());

 

        — 修改数据触发器

 

        –删除数据触发器

                 create trigger tb_user_delete_trigger                 after delete 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 .profession ));         end;

 

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作92930 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月22日
下一篇 2022年6月22日

相关推荐