You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL语法看似正确却报错,请求排查MySQL多语句执行问题

问题排查与解决

核心原因分析

报错指向第二条UPDATE语句开头,大概率是执行环境不支持一次性执行多条SQL语句,同时JSON字符串的转义方式也存在错误。

具体解决步骤

1. 拆分语句单独执行

将三条SQL语句分开,每次仅执行一条,同时修正JSON字符串的转义问题:

  • 第一条更新语句:
UPDATE accounts 
SET lastSerialChange = CURRENT_TIMESTAMP 
WHERE username = 'Jayden';
  • 第二条更新语句(把HTML转义的"替换为实际双引号"):
UPDATE accounts 
SET serialChanges = '[{"serial":"D06ACE5BBE90E803590D1691FB9254B3","reason":"test","date":1695495618004}]' 
WHERE username = 'Jayden';
  • 第三条插入语句:
INSERT INTO serial_requests 
(username, serial, reason, requestedAt) 
VALUES  ('Jayden',
'D06ACE5BBE90E803590D1691FB9254B3',
'test',
1695495618004);

2. 若需批量执行,开启多语句支持

如果必须一次性执行多条语句:

  • 命令行客户端:MySQL命令行默认支持多语句,确保每条语句用分号;正确分隔后直接粘贴执行即可。
  • 编程语言驱动:若使用JDBC、pymysql等驱动,需手动开启多语句执行配置:
    • JDBC:在连接URL后追加allowMultiQueries=true
    • pymysql:连接时设置client_flag=pymysql.constants.CLIENT.MULTI_STATEMENTS
      注意:开启该配置会提升SQL注入风险,需严格做好参数校验。

3. 优化JSON字段的写入方式(针对MySQL 5.7+)

如果serialChanges是JSON类型字段,推荐用MySQL内置JSON函数构造数据,避免手动转义引号的错误:

UPDATE accounts 
SET serialChanges = JSON_ARRAY(
    JSON_OBJECT(
        'serial', 'D06ACE5BBE90E803590D1691FB9254B3',
        'reason', 'test',
        'date', 1695495618004
    )
)
WHERE username = 'Jayden';

内容的提问来源于stack exchange,提问作者Jaydendev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:22:12