如何在MySQL Trigger实现中使用gearman客户端

时间:2014-03-15 00:55:03

标签: mysql sql triggers gearman

我已经设置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

所以,基本上你可以看到,

  1. 还有其他一些方法可以使用变速箱或
  2. 不知怎的,我在里面用齿轮选择电话做了一个虚假的更新电话。
  3. 我正在尝试编写Trigger,这非常简单,如下所示:

    BEGIN
        SELECT gman_do_background("eventName", "@data") FROM 
        (
             SELECT @data := CONCAT(a,',',b,',',c) FROM mytablename WHERE status = 1
        )
    END
    

    但是你可以看到,因为' SELECT'操作,不保存并抛出上述错误。

    任何人都可以帮助我是否有任何备用齿轮手机呼叫类型(除了'选择')或者有没有办法编写不会影响任何mysql表的更新查询/ column?提前致谢。

2 个答案:

答案 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)

也许此链接http://codesamplez.com/development/gearman-from-mysql-udf有帮助(提示2)