1.语法CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
trigger_time是触发程序的动作时间。它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
· INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
2. 可能遇到的问题
2.1如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用.
如:
create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END
应该使用set:
create trigger test before update on test for each row set NEW.updateTime = NOW(); END
2.2如果你在触发器中对操作表的其他行进行操作,会报出以下错误:
Can't update table 'xxx' in stored function/trigger because it is already used by statement which invoked this stored function/trigge
该问题我也不知道如何解决
3.触发器 与存储过程
触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL
(允许存储程序通过参数将数据返回触发程序)。
而存储过程 可以接受参数,将结果范围给应用程序
4.在workbench中创建触发器
在sql语句窗口创建触发器时,需要delimiter $$ end $$ delimter ;包围。注意最后的delimter与分号间有空格,不然会报错。