我写了一个插入触发器.呜
下一步是我要在触发器运行后运行查询或过程.因此,不是针对插入的每个记录,而是在插入之后.
我在哪里打这个电话?
DELIMITER $$
DROP TRIGGER /*!50033 IF EXISTS */ triggername $$
CREATE TRIGGER triggername
AFTER INSERT ON tableA
FOR EACH ROW
BEGIN
/*This runs for each insert - I want it to run at the end of the trigger*/
CALL UpdateOtherStuff(NEW.fieldA, NEW.fieldB);
END$$
谢谢,
垫
解决方法:
MySQL触发器语法是有限的.同一张表上不能有多个触发器.您不能具有数据库级触发器.
简而言之,您不能这样做,因为MySQL不知道您要插入1000个值还是仅插入一个.它们都是独立的事件,即使您是从一个语句中触发它们也是如此.
FOR EACH ROW是CREATE TRIGGER语法的固定部分,它不是可选的.
当我遇到同样的问题时,我实现了存储函数,并使用这些函数来进行插入和更新代码.
函数和存储过程的限制很多,例如无法将可变数量的参数传递给它们(例如,您可以传递以插入/更新)或无法将WHERE子句传递给它们,以便它们可以过滤它们正在影响.
但是您可以克服过滤限制,例如:
CREATE FUNCTION x(id INTEGER) ...
SELECT x(object_id) FROM objects WHERE ...
我不确定MySQL是否会像在现场执行该函数那样优化它,并且不需要对象数据就可以在函数中重新选择它.但是我认为没有…它认为函数内部的更新查询按常规运行.