《mysql》之锁
作者:互联网
死锁
死锁原因
MyISAM 表锁是 deadlock free 的,这是因为 MyISAM 总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。
但在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB 中发生死锁是可能的
避免死锁
1)不同程序并发存取多个表时,或者设计多行记录时,以相同的顺序访问表,以相同的顺序存取表中的行。
2)选择合理的事务大小,小事务发生的锁冲突的概率更小。
3)一次性请求足够级别的锁。比如要修改数据的话,最好直接申请排他锁,而不是先申请共享锁,修改时再请求排他锁,这样容易产生死锁;
4)对于一些特定的事务,可以升级锁粒度,通过表锁来减少死锁的可能。
5)在同一事务中,一次锁定所需要的所有资源。
标签:之锁,要么,事务,死锁,InnoDB,MyISAM,mysql,存取 来源: https://www.cnblogs.com/zrzct/p/14204131.html