触发器

对某个表进行(增删改)操作的前后如果希望触发某个特定的行为时,可以使用触发器,如当对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 ;

 

posted @ 2020-11-11 21:54  maday  阅读(193)  评论(0)    收藏  举报