Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新
2017-03-28 18:15
441 查看
前言
实际上,我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的sql,你也得看看你说操作的数据库是否支持,而阿福,最近就遇到这样的一个坑。问题
先带大家来看一段sql的配置,<update id="updateAllAvailable"> <foreach collection="skuOptionList" item="item" index="index" open="" close="" separator=";"> update t_xxx <set> old_id = #{item.oldId} </set> where id = #{item.id} </foreach> </update>
看似似乎没有一点问题,这里用到了Mybatis的动态sql,实际上说白了也就是拼sql,不过这个繁杂的工作交给Mybatis帮我们去做了。可是,只要一执行就要报语法错误。调试了好久,发现只要传一个值进去就没有问题,就是list的成员只有一个。这引起了我的警觉。
解决方案
后来发现,原来mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。扩展
实际的业务系统里面oracle数据库也用的非常的多,当然,oracle数据库不需要做特殊的配置,但是相应的sql要做变化。<update id="updateAllAvailable"> <foreach collection="skuOptionList" item="item" index="index" open="begin" close="end;" separator=";"> update t_xxx <set> old_id = #{item.oldId} </set> where id = #{item.id} </foreach> </update>
总结
有些时候,遍寻代码而无错也找不到问题的时候,不妨去找找系统环境的问题,说不定,就只在一瞬,问题迎刃而解。感谢各位看官。
相关文章推荐
- Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新
- 关于mysql 执行批量的sql 语句问题:&allowMultiQueries=true
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true 的作用
- mybits 动态sql 批量操作报错 关于allowMultiQueries
- springboot druid 数据库批量更新错误 multi-statement not allow
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
- Mybatis+mysql+allowMultiQueries=true
- mybatis批量更新 allowMultiQueries
- jdbc.url,请记得带上我,allowMultiQueries=true
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
- Mysql 批量更新操作的时候出错 “Multi-statement transaction required more than 'max_binlog_cache_size' bytes of s
- 修改$("form:first").serialize(); 中某一名称的checkbox一个均未选择, 取不到name, 后台无法更新为null的错误
- 写了一个查询数据库的程序,不熟的Tomcat6。查询条件为英文时运行正常,为中文时出现乱码。后在tomcap的server.xml中加入useBodyEncodingForURI="true解决了问题
- 批量更新某字段内容的部分内容 replace(要替换的字段,'被替换的字符串,'替换成的字符串')
- Struts2+Ibatis+Spring.30(完整例子,含3.0事务配置,OSCache缓存配置,JreeChart配置,log4j日志输出Sql,对一个表实现完整的查询,批量删除,添加,更新)
- oracle批量更新一个表中的一个字段
- 移动文章分类的sql语句,查询并更新同一个表的方法 You can't specify target table 'news_articles' for update in FROM clause
- 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql)
- 【Oracle批量更新】根据一个大表批量更新另一大表的方法比较
- android为什么不允许新开启一个线程来更新UI,而是用handler来更新界面