介绍
触发器是与表有关的数据库对象,指在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进行处理,非常感谢!