问题描述
con.setAutoCommit(false);pstmt=con.prepareStatement(sql1);//实例化PreapredStatement对象pstmt.execute();//执行pstmt=con.prepareStatement(sql2);//实例化PreapredStatement对象pstmt.execute();//执行con.commit();使用事物就出现java.sql.SQLException:Deadlockfoundwhentryingtogetlock;tryrestartin求大神解决
解决方案
解决方案二:
你的两句sql当中有问题么?放到plsql之类的客户端中跑,会跑死锁么?
解决方案三:
引用1楼skgary的回复:
你的两句sql当中有问题么?放到plsql之类的客户端中跑,会跑死锁么?
如果不用事物能正常执行用事物并发时就异常
解决方案四:
引用2楼xiaov2的回复:
Quote: 引用1楼skgary的回复:
你的两句sql当中有问题么?放到plsql之类的客户端中跑,会跑死锁么?如果不用事物能正常执行用事物并发时就异常
我问的不是在java代码里增加事物,而是在sql的客户端里面跑你的sql.如果在客户端里都有问题的话,只能是sql语句的问题
解决方案五:
大神来帮帮忙
解决方案六:
是什么数据库?
解决方案七:
引用5楼gaofuqi的回复:
是什么数据库?
mysql
解决方案八:
你的sql1和sql2是怎么写的
解决方案九:
引用7楼longtian1213的回复:
你的sql1和sql2是怎么写的
就是简单的sql1是插入sql2是更新不用事物的话没问题(但是我担心万一其中一条执行了另一条没执行所有要用事物)
解决方案十:
存储引擎是什么?两个语句又是什么?
解决方案十一:
引用9楼fangmingshijie的回复:
存储引擎是什么?两个语句又是什么?
sql就是最简单的插入a表一条数据更新b表一条数据
解决方案十二:
引用3楼skgary的回复:
Quote: 引用2楼xiaov2的回复:
Quote: 引用1楼skgary的回复:
你的两句sql当中有问题么?放到plsql之类的客户端中跑,会跑死锁么?如果不用事物能正常执行用事物并发时就异常
我问的不是在java代码里增加事物,而是在sql的客户端里面跑你的sql.如果在客户端里都有问题的话,只能是sql语句的问题
sql语句没问题正常运行
解决方案十三:
引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
解决方案十四:
引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
解决方案十五:
引用13楼xiaov2的回复:
Quote: 引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
什么意思?你通过客户端界面修改,还是执行SQL命令?
解决方案:
引用14楼gaofuqi的回复:
Quote: 引用13楼xiaov2的回复:
Quote: 引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
什么意思?你通过客户端界面修改,还是执行SQL命令?
mysql工具
解决方案:
引用15楼xiaov2的回复:
Quote: 引用14楼gaofuqi的回复:
Quote: 引用13楼xiaov2的回复:
Quote: 引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
什么意思?你通过客户端界面修改,还是执行SQL命令?
mysql工具
我知道是客户端工具,你是以命令行的方式修改还是在界面上修改?其实这个问题不重要,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
解决方案:
引用16楼gaofuqi的回复:
Quote: 引用15楼xiaov2的回复:
Quote: 引用14楼gaofuqi的回复:
Quote: 引用13楼xiaov2的回复:
Quote: 引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
什么意思?你通过客户端界面修改,还是执行SQL命令?
mysql工具
我知道是客户端工具,你是以命令行的方式修改还是在界面上修改?其实这个问题不重要,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
大神这个pstmt.execute();//执行是最后执行一次还是每次都要执行
解决方案:
引用17楼xiaov2的回复:
Quote: 引用16楼gaofuqi的回复:
Quote: 引用15楼xiaov2的回复:
Quote: 引用14楼gaofuqi的回复:
Quote: 引用13楼xiaov2的回复:
Quote: 引用12楼gaofuqi的回复:
Quote: 引用6楼xiaov2的回复:
Quote: 引用5楼gaofuqi的回复:
是什么数据库?mysql
mysql好像支持表级锁,不支持行级锁,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
我手动改数据时只有操作的那行数据不能操作其他可以有解吗?
什么意思?你通过客户端界面修改,还是执行SQL命令?
mysql工具
我知道是客户端工具,你是以命令行的方式修改还是在界面上修改?其实这个问题不重要,你看一下你的Mysql版本,看看是否支持行级锁,然后从SQL语句分析,可能并发的操作两张表,相互在等待对方释放锁,造成死锁。
大神这个pstmt.execute();//执行是最后执行一次还是每次都要执行
你就不能看一下的你的MYSQL版本是多少?存储引擎是什么?
解决方案:
错误是哪行报的?
解决方案:
没有beginTransaction吗?看看你的sql语句时候操作同一张表吧
解决方案:
引用18楼gaofuqi的回复:
你就不能看一下的你的MYSQL版本是多少?存储引擎是什么?
其实大家的怀疑是一致的,就是sql本身的问题。。。