我有一些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
我无法在此错误上取得很大进展。我发现最接近帮助的是建议确保我对所有列和表名都有反引号,这些都是我做过的无用的。
答案 0 :(得分:0)
这似乎是node-red的mysql节点的限制。我尝试将我的查询分解为最简单的部分,然后从那里开始构建以查看事情的中断点。经过一些测试和大量垃圾进入我的数据库后,似乎没有构建节点类型来处理多个查询,包括无法处理事务。
我的下一个解决方案是尝试创建一个存储过程来运行事务,但是使用一个简单的SELECT
过程进行测试似乎表明此节点也存在过程问题。无论我在数据库上设置了什么权限,或者用户创建了什么程序,mysql节点都会声称它没有执行权限。
我已经解决的解决方案是创建一系列mysql调用,通过flow.set
将相关数据传递给函数节点。这确实意味着我不能利用交易,但不幸的是,对于这个项目,他们很高兴有#34;不仅仅是一个关键的数据库功能。