ER_PARSE_ERROR 在使用 Node-Red 插入事务期间
ER_PARSE_ERROR during insert transaction with 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 的查询 window 中,该查询将完美运行。但是,当我尝试通过我的流程启动它时,出现错误:
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
我无法在这个错误上取得很大进展。我发现最接近帮助的建议是确保我在所有列和 table 名称上都有反引号,但我已经无济于事了。
看来这是 mysql 节点对 node-red 的限制。我试着将我的查询分解成我能做的最简单的部分,然后从那里开始构建,看看哪里出了问题。经过一些测试并将大量垃圾插入我的数据库后,节点类型似乎不是为处理多个查询而构建的,其中包括无法处理事务。
我的下一个解决方案是尝试为 运行 事务创建一个存储过程,但使用一个简单的 SELECT
过程进行测试似乎表明该节点也存在过程问题。无论我在数据库上设置什么权限或哪个用户创建了过程,mysql 节点都会声称它没有执行权限。
我确定的解决方案是创建一个 mysql 调用链,通过 flow.set
将相关数据转发到功能节点。不幸的是,这确实意味着我无法利用事务,但对于这个项目,它们 "nice to have" 不仅仅是一个关键的数据库功能。
我有一些 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 的查询 window 中,该查询将完美运行。但是,当我尝试通过我的流程启动它时,出现错误:
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
我无法在这个错误上取得很大进展。我发现最接近帮助的建议是确保我在所有列和 table 名称上都有反引号,但我已经无济于事了。
看来这是 mysql 节点对 node-red 的限制。我试着将我的查询分解成我能做的最简单的部分,然后从那里开始构建,看看哪里出了问题。经过一些测试并将大量垃圾插入我的数据库后,节点类型似乎不是为处理多个查询而构建的,其中包括无法处理事务。
我的下一个解决方案是尝试为 运行 事务创建一个存储过程,但使用一个简单的 SELECT
过程进行测试似乎表明该节点也存在过程问题。无论我在数据库上设置什么权限或哪个用户创建了过程,mysql 节点都会声称它没有执行权限。
我确定的解决方案是创建一个 mysql 调用链,通过 flow.set
将相关数据转发到功能节点。不幸的是,这确实意味着我无法利用事务,但对于这个项目,它们 "nice to have" 不仅仅是一个关键的数据库功能。