在做一个 Gearman 来现在一个分布式时,我想当 MySQL 有更新时,自动的使用 MySQL 的触发器来提交更新到集群的队列中,在这个项目中,看到 MySQL 的触发器(TRIGGER)非常合适和 Gearman 的 UDF 配合来工作然后使用 MySQL 的自定义变量来做参数提交。
所以学着写了一下 MySQL 触发器,但是当我写完插入数据时,MySQL 总是报错:
Not allowed to return a result set from a trigger 。
发现触发器(TRIGGER)不能使用 select 来设置变量结果, 这样会返回结果集,如果在触发器(TRIGGER)中要写成 into 的方式
出错的触发器语法
delimiter |
CREATE TRIGGER queue_insert
AFTER INSERT ON queue
FOR EACH ROW
BEGIN
SELECT @args = concat(NEW.id,'|',NEW.title) ;
IF NEW.priority >= 1 THEN
SET @gd = gman_do_high_background('convert',@args);
ELSE
SET @gd = gman_do_background('convert',@args);
END IF;
END;
|
delimiter;必须写成下面这样
delimiter |
CREATE TRIGGER queue_insert
AFTER INSERT ON queue
FOR EACH ROW
BEGIN
SELECT concat(NEW.id,'|',NEW.title) INTO @args;
IF NEW.priority >= 1 THEN
SET @gd = gman_do_high_background('convert',@args);
ELSE
SET @gd = gman_do_background('convert',@args);
END IF;
END;
|
delimiter;