Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新

前言

           利用Mybatis批量更新或者批量插入,实际上即使Mybatis完美支持你的sql,你也得看看你操作的数据库是否完全支持,而同事,最近就遇到这样的一个坑!

问题

先带大家来看一段sql的配置:

    

1 <update id="updateAllAvailable">
2   <foreach collection="skuOptionList" item="item" index="index" open="" close="" separator=";">     update t_xxx
3      <set> old_id = #{item.oldId} </set>
4      where id = #{item.id}
5    </foreach>
6 </update>

以上的配置动态SQL看着没有问题,这里用到了Mybatis的动态sql,实际上说白了也就是拼sql,不过这个繁杂的工作交给Mybatis帮我们去做了,可是,只要一执行就要报语法错误。

  解决方案

    后来发现,原来mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。

   

原文地址:https://www.cnblogs.com/yvanBk/p/9845797.html

时间: 2024-11-07 04:08:23

Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新的相关文章

MySQL多表更新的一个坑

简述 MySQL支持update t1,t2 set t1.a=2;这种语法,别的关系数据库例如oracle和sql server都不支持.这种语法有时候写起来挺方便,但他有一个坑. 测试脚本 drop database fander; create database fander; use fander; create table t1(a int); create table t2(a int); insert into t1 value(1); select * from t1; upda

mysql 中desc 作为一个表项导致的不能更新表项的问题

今天碰到一个mysql数据库更新问题,报错如下 于是我查看了下star_link_upgrade_history 没看出什么问题. 尝试了下更新别的项 更新cur_sw_ver项没有问题. 查看了下数据库项 desc与cur_sw_ver都是字符串类型.为啥一个有问题一个没有问题呢. 忽然想到desc是个关键字,是不是不能作为一个表项使用呢,尝试修改了这个项的名字,重建了这个表,再次操作更新没有问题了. 牢记不要把关键字作为表项!!! 原文地址:https://www.cnblogs.com/h

MySQL JDBC的queryTimeout的一个坑

遇到一个MySQL JDBC的queryTimeout的坑,比较恶心,算是它的BUG,也可以不算,^_^,为啥这么说?看一下下面的解释: 现象: 用同一个Connection执行大批量SQL的时候,导致了OOM现象. 细节现象描述: 1.SQL是从某个存储设备上拿到的,不会直接占用大量的内存,每次只会取最多1千条数据过去,也会判定容量不超过多少M. 2.每一批SQL执行会单独创建Statement对象,执行一批SQL后,会将这个Statement关闭掉. 3.SQL语句中只有insert,没有其

一个系统存储由memcache+mysql组成,写一条数据的时候,更新memcache有几种方式,

一个系统存储由memcache+mysql组成,写一条数据的时候,更新memcache有几种方式,优缺点是什么? 缓存更新(不仅仅是memceche)有2种策略 一种是写时更新 一种是读时更新 一.写时更新是指  写db成功以后  同时更新缓存 , 能有效减少穿透  但是  容易引起数据的不一致 二.读时更新是说 写完db  删除缓存,等到 需要读得时候  在重建缓存, 一致性可以保证  但是  穿透大,容易给db造成压力

mysql中把一个表的数据批量导入另一个表中(不同情况)

mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段. 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中. 类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:(此方法只适合导出两表在同一database) INSERT INTO 目标表 SELECT * FROM 来源表;

MySQL可重复读采坑记录-对事务B进行更新时,事务A提交的更新会不会影响到事务B

之前线上出现数据重复插入的问题,通过对问题进行排查发现该问题和MySQL的默认隔离级别-Repeatable Read(可重读)有关系,可重复读确保同一事务的多个实例在并发读取数据时,会看到同样的数据行.现在通过实验,对问题进行下分析. 1.在终端A开启事务A,查询一下. START TRANSACTION; select spt.id,spt.audit_status,spt.is_deleted from stat_point_task spt limit 5; 结果如下: 2.在终端B开启

如何使用MySQL一个表中的字段更新另一个表中字段

这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下 1,修改1列 ? 1 2 3 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 ? 1 2 3 update a, b set a.title=b.title, a.name=b.name where a.id=b.id ?子查询 ? 1 update student s set ci

mysql的jdbc.url携带allowMultiQueries=true参数的作用及其原理

如下配置 jdbc.url=jdbc:mysql://127.0.0.1:3306/chubb_2?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true allowMultiQueries=true参数的作用: ①可以在sql语句后携带分号,实现多语句执行. 如:mybatis的mapper.xml文件 <select id="getAll" re

Ibatis.Net执行Sql超时commandTimeout的一个坑

项目中使用了Ibatis.Net,数据库是Mysql,在做一个批量Update的操作时,需要执行40几秒,在执行到30秒的时候,会抛出异常:Timeout expired , The timeout period elapsed prior to completion of the operation or the server is not responding 网上一查,说设置mysql的command timeout,于是在Ibatis.Net的providers.config文件里设置了