gpt4 book ai didi

mysql - 如何在MySQL触发器实现中使用gearman客户端

转载 作者:行者123 更新时间:2023-11-29 08:07:27 25 4
gpt4 key购买 nike

我已经设置了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. 还有其他方法可以调用 gearman 或
  2. 不知何故,我用里面的 gearman select 调用进行了一次虚假的更新调用。

我正在尝试编写非常简单的触发器,如下所示:

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

但是正如你所看到的,由于“SELECT”操作,它没有保存并抛出上述错误。

任何人都可以帮助我是否有任何备用 gearman 调用类型(“select”除外)或者是否有任何方法可以编写不影响任何 mysql 表/列的更新查询?提前致谢。

最佳答案

首先在触发器中执行任何非事务性操作都是错误的。如果发生回滚,您将无法撤消对 udf 函数的调用。因此,我建议重新考虑对此类调用使用触发器。

强烈推荐阅读:

<小时/>

现在,正如您所发现的,触发器中禁止单独使用 SELECT,因为没有客户端可以返回结果集。

但是您可以合法地使用 INSERT INTO ... SELECT FROM ... 语法。如果您的 MySQL 实例中启用了 BLACKHOLE 引擎,您可以使用 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 演示

关于mysql - 如何在MySQL触发器实现中使用gearman客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418212/

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