在开发环境中,会存在一些连带逻辑处理,比如先删后增,或者先修改这个表然后再修改另一个表数据,往往他们都是在同一个事务中且是连续的逻辑关系
于是我就给多条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
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注入攻击。
配置完之后再次运行单元测试两条都被正常更新并无报错