日期:2014-05-16  浏览次数:20807 次

为什么指定索引更新数据也会造成死锁?
非常简单的update SQL语句,where条件只有一个id索引,按道理应该是直接就运行了,为了还会造成死锁呢?

mysql能不能设置事务超时时间?

------解决方案--------------------
如果更新的where条件没有索引 则会产生表锁
------解决方案--------------------
where id <100;这样是会用到索引,但是需要锁定的索引项是个范围,在锁定这个范围时,对索引项是依次加锁的,这就可能和别的session发生死锁。


------解决方案--------------------
有可能死锁,
假设 UPDATE TT SET ...WHERE ID > 10000,会锁定所有主键大于等于1000的所有记录,在该语句完成之前,你就不能对主键等于10000的记录进行操作
------解决方案--------------------
你用的什么存储引擎? INNODB是可以实现行锁,但MYISAM仅实现表锁。
------解决方案--------------------
锁和死锁是两个不同的概念
查看死锁用show engine innodb status \G