gpt4 book ai didi

mysql - 对于每一行

转载 作者:可可西里 更新时间:2023-11-01 08:20:55 26 4
gpt4 key购买 nike

我写了一个插入触发器。呜呜。

下一步是我想在触发器运行后运行查询或过程。所以不是针对插入的每条记录,而是在插入之后。

我应该把这个电话放在哪里?

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 ROWCREATE TRIGGER 语法的固定部分,它不是可选的。

当我遇到同样的问题时,我实现了存储函数并使用这些函数来执行插入和更新代码。

函数和存储过程的限制有很多,比如不能向它们传递可变数量的参数(就像你可以传递给插入/更新)或者不能向它们传递 WHERE 子句以便它们可以过滤它们所影响的内容。

但是你可以像这样克服过滤限制:

CREATE FUNCTION x(id INTEGER) ...

SELECT x(object_id) FROM objects WHERE ...

我不确定 MySQL 是否会优化它,因为当场执行函数并且拥有对象数据时不需要在函数内重新选择它。但我认为它不会...它认为函数内的更新查询会照常运行。

关于mysql - 对于每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com