关于数据库死锁的了解

死锁在数据库中是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象。任何时间,多个事务同时加锁一个资源,一定产生死锁。下面这个例子:
 
 

 
如果两个事务都同时执行了第一个查询,更新了数据行,并且也加锁了该行,即事务1加锁了 stock_id = 4 的记录,事务2加锁了 stock_id = 3 的记录,接着,两个事务都试图更新第二个数据行时,就会发现数据都已被对方(事务)加锁了 :(
 
为 了解决该类问题,数据库系统实现了各种死锁检测和死锁超时机制。而对于 MySQL 中的 InnoDB 存储引擎可以预知循环相关性,并立刻返回错误。这种解决方式很有效,否则会因死锁导致非常慢的查询。并且,当前的 InnoDB 处理死锁的方法是 回滚拥有最少排他行级锁(一种对最易回滚事务的大致估算)。

你可能感兴趣的:(InnoDB,数据库死锁)