死锁大家应该不会陌生,互相占用对方资源,互相等待释放,从而产生恶性循环,在数据库中当多个事务试图以不同的顺序来锁定资源的时候,就有可能出现死锁问题,下面举个简单例子:
事务1:update ... where id=1
update ... where id=2
事务2:update ... where id=2
udpate ... where id=1
如果凑巧,事务1,2都执行完自己的第一条update语句,同时也锁定该行数据,进入第二条,这时发现都有上锁,那么就会彼此等待,这时候就会死锁。
InnoDB目前处理死锁的方法是:将持有最少行级排它锁的事务进行回滚操作(这是相对简单死锁回滚算法)