触发器
对某个表进行(增删改)操作的前后如果希望触发某个特定的行为时,可以使用触发器,如当对tb1添加数据时,希望将数据也同时添加到tb2
创建触发器
触发器的关键词:
before 表操作在触发器之前
after 表操作在触发器之后
创建触发器的步骤:
delimiter //
create trigger 触发器名称(一般为tri_前或后_操作_对象表名) before/after insert/delete/update on 表名 for each row
begin
sql语句 触发器数据
end //
delimiter ;
delimiter // create trigger tri_after_insert_tb1 after insert on tb1 for each row begin insert into tb2(class,num) values('二班',4) end // delimiter ; 在tb1中添加数据后,触发器会在tb2中也添加一条的数据
删除触发器
drop trigger 触发器名;
动态触发器
上面的代码中,只能在触发器触发时在一个表格重复插入相同的数据,想要根据用户对表格的操作来使触发器插入动态的值
就要使用new new封装了用户新提交的数据
new.列名 可以获取用户对表格指定列名插入数据
如果用户对表格的插入语句为insert into tb2(class,num) values('二班',4),则new.class 就等于'二班'
那么动态的触发器写法举例如下:
根据用户的输入进行条件判断,再对触发器传入动态值
delimiter // create trigger tri_after_insert_tb1 after insert on tb1 for each row begin if new.class=='三班' then insert into tb2(class,num) values(new.class,new.num) endif end // delimiter ;
如果用户对表格进行的操作是删除,想根据删除的数据来动态使用触发器,就要获取删除表操作中删除的值;
可以使用old old中封装了用户删除的数据
如对表格的操作为 delete from student where sid=1; 删除的数据为sid:1 name:二虎
则old.sid=1 ,old.name='二虎'
举例:
根据用户对表格数据删除,来使用触发器动态添加数据
delimiter // create trigger tri_after_delete_tb1 after delete on tb1 for each row begin if old.name=='三虎' then insert into tb2(name) values(old.sid) endif end // delimiter ;

浙公网安备 33010602011771号