我已经设置了用于数据库的gearman udf,并试图从mysql查询中发送一个gearman作业。通常情况下,它只是工作正常。作为mysql查询的常规调用,如下所示:
SELECT gman_do_background("eventName", "data");现在,当我试图从mysql触发器实现中发出这个调用时,问题就发生了。出现以下错误:
MySQL said: #1415 - Not allowed to return a result set from a trigger所以,基本上,正如你所看到的
我试图编写触发器,它非常简单,如下所示:
BEGIN
SELECT gman_do_background("eventName", "@data") FROM
(
SELECT @data := CONCAT(a,',',b,',',c) FROM mytablename WHERE status = 1
)
END但是正如yo所看到的,由于“SELECT”操作,它没有保存和抛出上面的错误。
有谁能帮我一下吗?是否有任何替代的gearman调用类型(除了“select”),或者是否有任何方式编写不影响任何mysql表/列的更新查询?,谢谢。
发布于 2014-03-15 20:52:36
首先,在触发器中执行任何非事务性操作的都是错误的。在回滚的情况下,您将无法撤消对udf函数的调用。所以我建议重新考虑使用触发器来处理这类呼叫。
强烈建议阅读:
现在,正如您所发现的,触发器中禁止单独使用SELECT,因为没有客户端可以将结果集返回给。
但您可以合法地使用INSERT INTO ... SELECT FROM ...语法。如果在BLACKHOLE实例中启用了辅助表,则可以使用MySQL引擎创建辅助表。您写到黑洞的任何东西都会转到/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演示
发布于 2014-07-27 08:15:12
https://stackoverflow.com/questions/22418212
复制相似问题