触发器:
触发器是与表有关的数据库对象,指在insert\update\delete之前或之后,触发并执行触发器中定义的SQL语句集合。
触发器的这种特性可以协助应用在数据库段确保数据的完整性,日志记录,数据校验等操作。
使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。
现在触发器还只支持行级触发,不支持语句级触发。
示例一:insert
注:new 表示新数据
-- 插入数据触发器 drop trigger if EXISTS tb_users_insert_trigger; create trigger tb_users_insert_trigger after insert on tb_users for each row begin insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES (null,"insert",NOW(),new.id,CONCAT('插入的数据为:id=',new.id,',name=',new.name,',age=',new.age,',status=',new.status,",gender=",new.gender,",phone=",new.phone)); end; -- 查看触发器 show TRIGGERS; -- 触发或者说应用触发器 INSERT into tb_users(id,NAME,age,status,gender,phone)VALUES(null,'张三sss',18,'1','1','116');
示例二:update
注:new 表示新数据,old表示原始老数据;当更改的数据行为多行数据时,触发器将会被触发多次(即,修改一行数据,触发一次)。
-- update 触发器 drop trigger if EXISTS tb_users_update_trigger; create trigger tb_users_update_trigger -- 更新表之后触发 after update on tb_users for each row -- 更新表之前触发 -- before update on tb_users for each row begin insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES (null,"update",NOW(),new.id, CONCAT('更新之前数据为:id=',old.id,',name=',old.name,',age=',old.age,',status=',old.status,",gender=",old.gender,",phone=",old.phone, '|更新之后数据为:id=',new.id,',name=',new.name,',age=',new.age,',status=',new.status,",gender=",new.gender,",phone=",new.phone)); end; -- 查看触发器 show TRIGGERS; update tb_users set name ='张三new' where name ='张三';
示例三:delete
-- delete 触发器 drop trigger if EXISTS tb_users_delete_trigger; create trigger tb_users_delete_trigger -- 删除表之后触发 after delete on tb_users for each row begin insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES (null,"delete",NOW(),old.id,CONCAT('更新之前数据为:id=',old.id,',name=',old.name,',age=',old.age,',status=',old.status,",gender=",old.gender,",phone=",old.phone)); end; -- 查看触发器 show TRIGGERS; delete from tb_users where name ='张三sss';
delete from tb_users where name ='张三封';
博客内容主要用于日常学习记录,内容比较随意,如有问题,还需谅解!!!