
DELIMITER $$CREATE/*[DEFINER = { user | CURRENT_USER }]*/TRIGGER `db_jw`.`new` BEFORE/AFTER INSERT/UPDATE/DELETEON `db_jw`.`<Table Name>`FOR EACH ROW BEGINEND$$DELIMITER ;
DELIMITER $$CREATE/*[DEFINER = { user | CURRENT_USER }]*/TRIGGER `数据库名称`.`触发器名称` 执行顺序(BEFORE/AFTER) 执行的操作(INSERT/UPDATE/DELETE)ON `数据库名称`.`触发操作的表`FOR EACH ROW BEGIN/*插入新增的数据*/INSERT INTO 要执行触发结果的表(字段) VALUES(new.触发操作表的字段);/*修改同上*/UPDATE 要执行触发结果的表 nJOIN 触发操作表 o ON 新表.字段 = 旧表.字段SET 新表.字段 = 旧表.字段,新表.字段 = 旧表.字段 ,新表.字段 = 旧表.字段 ;/*删除*/DELETE FROM 要执行触发结果的表 WHERE 新表字段的id=old.触发操作表的字段的id;END$$DELIMITER ;
trigger_event 详解
MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。
LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。
REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条。
INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句。
INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;
UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;
DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。
BEGIN … END 详解
在MySQL中,BEGIN … END 语句的语法为:
BEGIN
[statement_list]
END
其中,statement_list 代表一个或多个语句的列表,列表内的每条语句都必须用分号(;)来结尾。
而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。
这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为:
DELIMITER new_delemiter
new_delemiter 可以设为1个或多个长度的符号,默认的是分号(;),我们可以把它修改为其他符号,如$:
DELIMITER $
在这之后的语句,以分号结束,解释器不会有什么反应,只有遇到了$,才认为是语句结束。注意,使用完之后,我们还应该记得把它给修改回来。




