数据库
首页 > 数据库> > 《mysql》之锁

《mysql》之锁

作者:互联网

死锁

 

死锁原因

MyISAM 表锁是 deadlock free 的,这是因为 MyISAM 总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。

但在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB 中发生死锁是可能的

 

 

避免死锁

1)不同程序并发存取多个表时,或者设计多行记录时,以相同的顺序访问表,以相同的顺序存取表中的行。

2)选择合理的事务大小,小事务发生的锁冲突的概率更小。

3)一次性请求足够级别的锁。比如要修改数据的话,最好直接申请排他锁,而不是先申请共享锁,修改时再请求排他锁,这样容易产生死锁;

 

4)对于一些特定的事务,可以升级锁粒度,通过表锁来减少死锁的可能。

5)在同一事务中,一次锁定所需要的所有资源。

标签:之锁,要么,事务,死锁,InnoDB,MyISAM,mysql,存取
来源: https://www.cnblogs.com/zrzct/p/14204131.html