格式
1.创建只有一个执行语句的触发器
2.创建有多个执行语句的触发器
操作
演示
create database if not exists test_trigger; use test_trigger; -- 用户表 create table `user` ( uid int primary key, username varchar(50) not null, password varchar(50) not null ); -- 用户信息操作日志表 create table user_logs( id int primary key auto_increment, time timestamp, log_text varchar(255) ); -- 需求1:当user表添加一行数据,则会自动在user_log添加日志记录 -- 定义触发器:trigger_test1 create trigger trigger_test1 after insert on user for each row insert into user_logs values(null,now(),"有新用户添加"); -- 在user表添加数据,让触发器自动执行 insert into `user` values(1,"张三","123456");
结果展示
create database if not exists test_trigger; use test_trigger; -- 用户表 create table `user` ( uid int primary key, username varchar(50) not null, password varchar(50) not null ); -- 用户信息操作日志表 create table user_logs( id int primary key auto_increment, time timestamp, log_text varchar(255) ); -- 需求1:当user表添加一行数据,则会自动在user_log添加日志记录 -- 定义触发器:trigger_test1 create trigger trigger_test1 after insert on user for each row insert into user_logs values(null,now(),"有新用户添加"); -- 在user表添加数据,让触发器自动执行 insert into `user` values(1,"张三","123456"); -- 需求2:当user表数据被修改时,则会自动在user_log添加日志记录 delimiter $$ create trigger trigger_test2 after update on user for each row begin insert into user_logs values(null,now(),"有用户信息被修改"); end $$ delimiter ; update `user` set password ="222222" where uid=1;
需求2结果是
格式
MySQL中定义了NEW和oLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地:
触发器类型触发器类型的new和old使用insert型触发器new表示将要或已经新增的数据update型触发器OLD表示修改之前的数据,NEW表示将要或已经修改后的数据delete型触发器OLD表示将要或者已经删除的数据使用方法
new.columname(columname为相应数据表某一列名)
演示
create trigger trigger_test3 after insert on user for each row begin insert into user_logs values(null,now(),concat("有新用户添加,信息为:",new.uid,new.username,new.password)) ; end; insert into `user` values(2,"李四","24234");
-- update create trigger trigger_test4 after update on user for each row begin insert into user_logs values(null,now(),concat_ws("--","用户信息有修改,修改后为:",new.uid,new.username,new.password)); end; update `user` set password="66666" where uid=2;
-- update create trigger trigger_test5 after update on user for each row begin insert into user_logs values(null,now(),concat_ws("--","用户信息有修改,修改后为:",new.uid,new.username,new.password, "用户信息有修改,修改前为:",old.uid,old.username,old.password)); end; update `user` set password="988765654" where uid=2;
1.MYSQL中触发器中不能对本表进行insert ,update ,delete操作,以免递归循环触发
2.尽量少使用触发器,假设触发器触发每次执行1s,insert table 5o0o条数据,那么就需要触发5oo次触发器,光是触发器执行的时间就花费了500s,而insert 50o条数据一共是1s,那么这个insert的效率就非常低了。
3.触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。
到此这篇关于一文带你了解MySQL中触发器的操作的文章就介绍到这了,更多相关MySQL触发器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关文章: