mysql杂说——mysql锁
Mysql用到了很多这种锁机制,行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。这些锁统称为悲观锁(Pessimistic Lock)。 1、mysql存储引擎分为:innodb 和 myisam 事务, 表锁 行锁 innodb 支持 支持 支持 myisam 不支持 支持 不支持 2、数据库锁:行锁的是索引 加锁的目的:减少资源的竞争 表级锁: 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁: 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 3、 mysql5.7解决了幻读:解决思路通过间隙锁 防止幻读,以满足相关隔离级别的要求 间隙锁:1,3,5 存在(-∞,1),(1,3),(3,5),(5,∞) 四个间隙,分别存在4个间隙锁 4、InnoDB实现了以下两种类型的行锁。 共享锁(s):又称读锁。 允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这 保证了其他事务可以读A , 但在T释放A上的S锁之前不能对A做任何修改 。 排他锁(X):又称写锁。