mysql的事务死锁问题
李海华 2012-06-22 05:11:46 我有个web工程,加载时用定时器在后台启动了一个进程,后台进程每过一分钟对数据库进行一次操作,这个操作方法serviceA()是有事务的,操作涉及了A表
当我在IE里发请求时也对A表操作,但这个方法clientA()没有事务。可是如果调用clientA时正赶上serviceA执行,此时clientA就有问题了,页面卡住不动,约过几分钟返回错误:
mysql : Lock wait timeout exceeded; try restarting transactio
试了下serviceA方法也卡住了,在clientA返回错误到页面后它才继续循环执行
我感到奇怪的是,clientA方法只访问了一个A表,这种情况下不可能死锁,即clientA方法获得A表锁就一定能不受阻碍地执行完,因为不需要访问的表。
我并且进一步试了,把clientA方法也设成有事务的,仍然不行,除非在clientA方法的第一行就执行一个A表的update操作,空操作也行,这样获得A表的锁,就再也不会等待了。
这是为什么呢?甚至我遇到过没有事务的读方法也会卡住