触发器 trigger 需要定义(就是将需要执行的sql语句写好),触发器的执行是通过你定义的某一个事件来触发的

通常这些事件会触发触发器

  • UPDATE
  • INSERT
  • DELETE

    old和new关键字

    使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。
    用OLD命名的列是只读的。你可以引用它,但不能更改它。对于用NEW命名的列,如果具有SELECT权限,可引用它。在BEFORE触发程序中,如果你具有UPDATE权限,可使用“SET NEW.col_name = value”更改它的值。这意味着,你可以使用触发程序来更改将要插入到新行中的值,或用于更新行的值。
    在BEFORE触发程序中,AUTO_INCREMENT列的NEW值为0,不是实际插入新记录时将自动生成的序列号。
    OLD和NEW是对触发程序的MySQL扩展。

    创建触发器

    一个触发器可以有多条执行语句,也可以是单条执行语句

  1. // 创建语法
  2. create trigger trigger_name
  3. before|after trigger_event
  4. on table_name for each row trigger_stmt
  5. * before|after声明触发器执行的时间,在事件之前还是之后
  6. * event 声明触发的事件,上文三选一
  7. * table_name 是具体那一张表
  8. * stmt 表示触发器激活之后执行的语句
  1. create trigger tri_diarytime
  2. before insert
  3. on t_dept for each row
  4. insert into t_diary values(null,'t_dept',now());

创建多条执行语句的触发器

与单条执行语句的触发器不同的是,多条语句的触发器在创建的时候多了两个关键字 beginend ,需要将多条执行语句放在这两个关键字之间。

  1. delimiter @ // 修改结束符
  2. create trigger trigger_name
  3. after insert
  4. on user for each row
  5. begin
  6. insert into user values(null,'hhh',now());
  7. insert into user values(null,'hhh',now());
  8. end
  9. @ // 整个语句结束
  10. delimiter ; // 将结束符改为默认

查看触发器

show triggers;

删除触发器

drop trigger trigger_name;