mysql批量更新出错

### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
; SQL []; Deadlock found when trying to get lock; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
2014-06-09 08:00:01,176 [] ERROR core.JobRunShell - Job DEFAULT.adSspDataTask threw an unhandled Exception:
java.lang.RuntimeException: 11org.springframework.dao.DeadlockLoserDataAccessException:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
问题的具体描述在:http://www.iteye.com/problems/101887

这个错误是由于你用了事物,导致表的死锁。 死锁的原因很多,如果你的批量插入有依赖性的话,可能在Mysql里面形成了脏读。
第一步先解决你的死锁问题,用指令show engine innodb status \G 查看是那一个查询进程锁表, 找出来ID,杀掉它。
第二步检查自己的程序的SQL语言,一般批量插入的话尽量用insert into (),(),().... 一个SQL来执行,如果需要检查是否存在然后插入或替换,如果表有唯一索引或主键,用replace, 其他格式一样。
第三步检查你的访问数据库的逻辑,在什么时候进行的commit,你在读写的时候是否设定了独占式访问方法, 或数据库中已经其他的存储过程或触发器同时在操作这个表。

如果以上都无效,你最好是通过上述指令同时监控你的程序并在mysql里面用show process list查看是哪一个ID出了问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-14
创建一个表:createtableusers(usernamevarchar(15)notnullPrimaryKey,userpassvarchar(15)notnull);插入一条记录:insertintousersvalues('user1','pass1');再创建一个表:createtableroles(usernamevarchar(15)notnullreferencesusers(username),rolenamevarchar(15));再插入一条记录:insertintorolesvalues('dd','ddd');安分驷皋雁皓孟菑员缴功恪简歧悌燕烁邰战舆颟本回答被网友采纳
第2个回答  2014-06-09
我完全明白你的意思,不过我真没见过这种用法还是老老实实在程序里逐个更新,或者用游标(mysql5.0以上版本才支持)吧本回答被提问者采纳

mysql批量更新出错
这个错误是由于你用了事物,导致表的死锁。 死锁的原因很多,如果你的批量插入有依赖性的话,可能在Mysql里面形成了脏读。第一步先解决你的死锁问题,用指令show engine innodb status \\G 查看是那一个查询进程锁表, 找出来ID,杀掉它。第二步检查自己的程序的SQL语言,一般批量插入的话尽量用insert ...

mysql并发批量更新死锁问题?
在探讨 MySQL 并发批量更新死锁问题时,我们首先面临的现象是钉钉群报警提示出现 db 层面异常,进而发现这一异常与死锁有关。下文通过复现、排查过程以及解决办法,对这一问题进行深入解析。现象分析:1.1 钉钉群报警1.2 查看日志发现死锁异常 为了解答问题,我们首先对业务场景和代码逻辑进行说明。接口用于...

MySQL限制大量更新操作mysql不支持大量更新
批量更新操作是指对多个数据行进行统一修改的操作,可以减少系统的负载,提高数据库的性能和可靠性。在大量更新操作中,我们可以使用批量更新操作来更新多个数据,从而减少更新操作的次数,提高系统的效率。以下是一个使用批量更新操作的示例代码:UPDATE table1 SET column1=’value1′ WHERE id...

关于MySQL lock time out问题的处理
在进行数据库批量更新操作时,我遇到了IDEA控制台的连接断开和客户端超时错误,具体日志已删除。初步猜测可能是由于试图更新的数据库表或记录被锁定,导致后续请求在获取锁时等待时间过长。为深入了解问题,我登录到MySQL控制台进行尝试,更新某条数据时,发现操作确实陷入了停滞。为了解决这个问题,我查阅了...

批量更新方法会造成mysql死锁吗
同时第二个线程准备更新id=1的数据,也因为无法取得id=1的行锁,就造成了死锁。解决办法的就是:如果更新条件的,比如说是主键,则根据主键排序之后批量做更新。如果更新条件不是主键,可以那么单线程处理。也可以通过单条语句执行来避免死锁。不过,不使用批量性能太低了,你还是需要结合你的业务来调整...

MySQL禁止批量修改保证数据安全mysql不允许批量修改
在MySQL中,事务的使用可以有效地限制批量修改。开启事务后,提交语句将会一个一个被执行,如果其中一个失败了,其他语句就不会执行,这样就根本不可能进行批量修改了。因此,通过使用事务,可以有效地杜绝批量修改。2.采用触发器实现数据修改的安全性 有时,可能需要在记录被插入、更新或删除之前执行一些...

MySQL教程如何进行批量更新操作mysql中中批量更新
1. 批量更新语法 批量更新语法如下:UPDATE table_name SET column1 = value1, column2 = value2, …WHERE condition;其中,UPDATE是修改的关键字,table_name是需要修改的表名,SET列出要修改的列和新值,WHERE语句用于指定要更新的记录。2. 批量更新示例 下面我们以employees表为例,演示如何...

SQL批量更新数据(mysql批量更新数据)
SQL批量更新共有以下四种办法 1使用replace into 批量更新。2、编写代码使用insert into 和on duplicate key update批量更新。3、创建临时表,先更新临时表,然后从临时表中update,这种方法需要用户有temporary 表的create 权限。4、使用SQL自带的语句构建批量更新。

手摸手系列之批量修改MySQL数据库所有表中某些字段的类型\/注释\/默认值...
如租户ID字段从Oracle的NUMBER类型错误地转换为MySQL的decimal(10),应更正为bigInt(20),而逻辑删除标记DEL_FLAG则被错误地设定为decimal类型,正确应为int(1)。鉴于涉及到数百个表,逐个手动修改显然不可行。接下来,将分享如何实现批量修改数据库中字段的数据类型、默认值与注释。首先,查询系统表以...

java对mysql进行批处理插入数据,如何返回错误的没插入数据
方法 executeBatch 返回的数组中的元素可能为以下元素之一:1、大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数。2、SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的 如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,...

相似回答