我已经设置gearman udf for database并尝试从mysql查询发送一个gearman作业。通常它只是工作正常。从mysql查询的常规调用如下:
SELECT gman_do_background("eventName", "data");
现在,当我尝试从mysql触发器实现中调用此调用时,问题就出现了。错误显示如下:
MySQL said: #1415 - Not allowed to return a result set from a trigger
所以,基本上你可以看到,
我正在尝试编写Trigger,这非常简单,如下所示:
BEGIN
SELECT gman_do_background("eventName", "@data") FROM
(
SELECT @data := CONCAT(a,',',b,',',c) FROM mytablename WHERE status = 1
)
END
但是你可以看到,因为' SELECT'操作,不保存并抛出上述错误。
任何人都可以帮助我是否有任何备用齿轮手机呼叫类型(除了'选择')或者有没有办法编写不会影响任何mysql表的更新查询/ column?提前致谢。
答案 0 :(得分:2)
首先在触发器中执行任何非事务性操作是错误的。如果是回滚,您将无法撤消对udf函数的调用。所以我建议重新考虑使用触发器进行此类调用。
强烈推荐阅读:
现在,因为没有客户端将结果集返回到触发器中,因此您在触发器中禁止自己SELECT
被禁止。
但您可以合法地使用INSERT INTO ... SELECT FROM ...
语法。如果在MySQL实例中启用了BLACKHOLE
引擎,则可以创建辅助表。你写入blackhole的任何内容都会转到/ dev / null。
CREATE TABLE dev_null
(
value VARCHAR(255) -- adjust data type as needed
) ENGINE=BLACKHOLE;
然后在你的触发器中
INSERT INTO dev_null
SELECT gman_do_background('eventName', @data)
FROM
(
...
)
这是 SQLFiddle 演示
答案 1 :(得分:0)