与Node-Red插入事务期间的ER_PARSE_ERROR

时间:2016-04-09 09:58:08

标签: mysql node.js node-red

我有一些Node-Red流作为我正在处理的Web应用程序的REST接口。但是,我遇到了在MySQL上插入事务的墙。

提供给mysql节点的查询是:

START TRANSACTION;
INSERT INTO `light_schedule` (`name`, `light_pwm`, 
    `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, `strobe`, 
    `start_date`, `start_time`, `end_date`, `end_time`, `repeat_type`, 
    `repeat_every`, `repeat_sunday`, `repeat_monday`, `repeat_tuesday`, 
    `repeat_wednesday`, `repeat_thursday`, `repeat_friday`, `repeat_saturday`, 
    `repeat_by`, `end_after_num`, `end_on`, `is_template`)
VALUES ('example', NULL, NULL, NULL, NULL, 1, '2016-4-1', NULL, NULL, NULL, 2, 1, 1, 1, 1,
    1, 1, 1, 1, NULL, NULL, NULL, 0);

SET @schedule = LAST_INSERT_ID();

INSERT INTO `strobe_colors` (`schedule_id`, `order_index`, 
    `duration`, `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, 
    `rainbow`)
VALUES (@schedule, 0, 4600, NULL, NULL, NULL, 1),
       (@schedule, 1, 4100, 150, 200, 163, 0);

INSERT INTO `lights_schedules` (`light_id`, `schedule_id`)
VALUES (5, @schedule),
       (6, @schedule);

COMMIT;

如果我将其复制并粘贴到phpMyAdmin的查询窗口中,则此查询可以正常工作。但是,当我尝试通过我的流程解雇它时,我收到一个错误:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO
`light_schedule` (`name`, `light_pwm`, `accent_pwm_red`, `accent_pw' at line 2

我无法在此错误上取得很大进展。我发现最接近帮助的是建议确保我对所有列和表名都有反引号,这些都是我做过的无用的。

1 个答案:

答案 0 :(得分:0)

这似乎是node-red的mysql节点的限制。我尝试将我的查询分解为最简单的部分,然后从那里开始构建以查看事情的中断点。经过一些测试和大量垃圾进入我的数据库后,似乎没有构建节点类型来处理多个查询,包括无法处理事务。

我的下一个解决方案是尝试创建一个存储过程来运行事务,但是使用一个简单的SELECT过程进行测试似乎表明此节点也存在过程问题。无论我在数据库上设置了什么权限,或者用户创建了什么程序,mysql节点都会声称它没有执行权限。

我已经解决的解决方案是创建一系列mysql调用,通过flow.set将相关数据传递给函数节点。这确实意味着我不能利用交易,但不幸的是,对于这个项目,他们很高兴有#34;不仅仅是一个关键的数据库功能。