触发器定义:触发器是相关表的数据库对象,指的是update/insert/delete在触发器中定义操作前后将执行sql语句集合,可用于日志记录、数据验证等。
1.创建触发器:
create trigger trigger_name before/after insert/update/delete on table-name for each row begin sql 语句 end;
2.删除触发器:
drop trigger trigger_name;
3.查看触发器:
show triggers;
4.案例:
通过触发器记录表的数据变化
-- 创建表语句 CREATE TABLE emp_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 操作参数, operate_acnu VARCHAR(100) COMMENT 操作帐号, PRIMARY KEY ( `id` ) ) ENGINE = INNODB DEFAULT charset = utf8; -- 创建insert类型触发器 CREATE TRIGGER emp_logs_insert_trigger AFTER INSERT ON emp FOR EACH ROW BEGIN INSERT INTO emp_logs ( id, operation, operate_time, operate_id, operate_params ) VALUES (NULL,'insert',now( ),new.id,concat( '插入后(id:', new.id, ', name:', new.NAME, ', age:', new.age, ', salary:', new.salary, ')' ) ); END ; -- 创建update类型触发器 DELIMITER $ CREATE TRIGGER emp_logs_update_trigger AFTER UPDATE ON emp FOR EACH ROW BEGIN INSERT INTO emp_logs ( id, operation, operate_time, operate_id, operate_params ) VALUES (NULL,'update',now( ),new.id, concat('修改前(id:',old.id,', name:',old.NAME,', age:',old.age,', salary:',old.salary, ') , 修改后(id',new.id,'name:',new.NAME,', age:',new.age,', salary:',new.salary,')' ) ); END $ -- 创建delete 类型触发器 CREATE TRIGGER emp_logs_delete_trigger AFTER DELETE ON emp FOR EACH ROW BEGIN INSERT INTO emp_logs ( id, operation, operate_time, operate_id, operate_params ) VALUES (NULL,'delete',now( ),old.id,concat( '删除前(id:', old.id, ', name:', old.NAME, ', age:', old.age, ', salary:', old.salary, ')' ) ); END;