解决mysql的一个update语句写多个sql用分号间隔执行报错check the manual that corresponds to your MySQL server version for

在开发环境中,会存在一些连带逻辑处理,比如先删后增,或者先修改这个表然后再修改另一个表数据,往往他们都是在同一个事务中且是连续的逻辑关系

于是我就给多条sql放在一个update语句中执行,这样代码中即可减少业务判断,如下执行sql:

delete from tableA where id = 4; insert into tableA(id,value) values (4,'2')

但是在项目中执行报错

### Error updating database. Cause: java.sql.SQLSyntaxErrorException: 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 tableA(id,value) values (4,'2')' at line 1

但是给这个sql丢到数据库中是可以执行的,代码中不能执行应该是需要配置什么,于是百度后发现数据源需要配置一个&allowMultiQueries=true

ing.datasource.druid.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true

MySQL的allowMultiQueries配置选项是用来控制是否允许在单个SQL语句中包含多个查询的。当设置为true时,允许在一个SQL语句中包含多个查询,以分号(;)分隔它们。这在某些情况下可能是有用的,但也存在潜在的安全风险。

以下是关于allowMultiQueries配置的一些重要信息:

默认值:在MySQL中,默认情况下,allowMultiQueries配置是禁用的,即设置为false,这意味着不能在单个SQL语句中包含多个查询。

安全性考虑:允许多个查询在一个语句中可以增加SQL注入攻击的风险,因为攻击者可以在单个语句中插入恶意SQL代码。因此,在生产环境中,通常建议将allowMultiQueries设置为false以提高安全性。

使用场景:allowMultiQueries可能在某些特定情况下有用,例如,用于导入或执行包含多个查询的SQL脚本。但请小心使用它,并确保只在受信任的环境中启用它。

要在MySQL中设置allowMultiQueries选项,你可以在MySQL配置文件(通常是my.cnf或my.ini)中进行配置,或者在连接字符串中使用参数设置。以下是在连接字符串中设置的示例:
jdbc:mysql://localhost:3306/database_name?allowMultiQueries=true

请注意,如果你决定启用allowMultiQueries,要确保你的应用程序中没有接受用户输入的SQL语句,或者要对用户输入进行充分验证和过滤,以防止SQL注入攻击。

配置完之后再次运行单元测试两条都被正常更新并无报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oNuoyi

你的鼓励将是我创作的做大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值