语法花样以下:
CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> FOR EACH Row<触发器主体>
语法申明以下。
1) 触发器名
触发器的称号,触发器在当前数据库中必需具有唯一的称号。假如要在某个特定数据库中建立,称号前面应当加上数据库的称号。
2) INSERT | UPDATE | DELETE
触发事宜,用于指定激活触发器的语句的品种。
注重:三种触发器的实行时间以下。INSERT:将新行插进去表时激活触发器。比方,INSERT 的 BEFORE 触发器不仅能被 MySQL 的 INSERT 语句激活,也能被 LOAD DATA 语句激活。DELETE: 从表中删除某一行数据时激活触发器,比方 DELETE 和 REPLACE 语句。UPDATE:变动表中某一行数据时激活触发器,比方 UPDATE 语句。
3) BEFORE | AFTER
BEFORE 和 AFTER,触发器被触发的时刻,示意触发器是在激活它的语句之前或以后触发。若愿望考证新数据是不是满足前提,则运用 BEFORE 选项;若愿望在激活触发器的语句实行以后完成几个或更多的转变,则平常运用 AFTER 选项。
4) 表名
与触发器相干联的表名,此表必需是永久性表,不能将触发器与暂时表或视图关联起来。在该表上触发事宜发作时才会激活触发器。同一个表不能具有两个具有雷同触发时刻和事宜的触发器。比方,关于一张数据表,不能同时有两个 BEFORE UPDATE 触发器,但能够有一个 BEFORE UPDATE 触发器和一个 BEFORE INSERT 触发器,或一个 BEFORE UPDATE 触发器和一个 AFTER UPDATE 触发器。
5) 触发器主体
触发器行动主体,包括触发器激活时将要实行的 MySQL 语句。假如要实行多个语句,可运用 BEGIN…END 复合语句构造。
6) FOR EACH ROW
平常是指行级触发,关于受触发事宜影响的每一行都要激活触发器的行动。比方,运用 INSERT 语句向某个表中插进去多行数据时,触发器会对每一行数据的插进去都实行响应的触发器行动。
注重:每一个表都支撑 INSERT、UPDATE 和 DELETE 的 BEFORE 与 AFTER,因而每一个表最多支撑 6 个触发器。每一个表的每一个事宜每次只允许有一个触发器。单一触发器不能与多个事宜或多个表关联。
别的,在 MySQL 中,若须要检察数据库中已有的触发器,则能够运用 SHOW TRIGGERS 语句。
例子:
BEGIN IF new.state in ('2','3') then INSERT INTO `userservice`.`ehome_us_green_examine` (modifydate,modifyuser,brancCode,stateDescription,state, userID,fromSystemkey,applydate,makeHospitalName,illnessName, userName,rightsholderName,tranno) VALUES ( sysdate(), 'manage', old.brancCode, old.stateDescription, new.state, '', old.fromSystemkey, old.applydate,old.makeHospitalName,old.illnessName, old.userName,old.rightsholderName, old.tranno); END IF; END
这个触发器比较简单,
1、BEGIN到END,之间是对数据库的操纵
2、IF到END IF之间是推断,你想的对,就是假如。。。的意义
3、new.state in ('2','3') 这句的意义是:该表的字段state为(2或许3)的时刻
4、实行下面的插进去语句,new为新值,old是本来的值(如old.userName就是本来的这个字段的值)
5、全部触发器翻译成白话就是,假如该表的state变成2或许3的时刻,实行下面的插进去语句
备注:那末触发器是发作在状况变化之前照样以后呢?选Before或许After,望文生义!
以上就是mysql触发器怎样写的细致内容,更多请关注ki4网别的相干文章!