MySQL事物与锁
-
InnoDB与MyISAM区别
- MyISAM不支持事物回滚,InnoDB是支持事物
- MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking)。
- InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
- MyISAM更适合查询多的情况
- InnoDB更适合写入多的
-
行级锁 & 表级锁
- 行级锁开销大,加锁慢,锁定粒度最小,发生锁冲突概率最低,并发度最高
- 表级锁开销小,加锁快,锁定粒度大、发生锁冲突最高,并发度最低
-
乐观锁&悲观锁
- 乐观锁:读取商品数量时不加锁,到修改商品数量是回校验,当前商品数量和刚读取的数量是否一致,如果相同加排他锁,然后写入,否则重试
- 悲观锁:读取商品数量时就加一把排它锁,直到修改商品数量完成释放排它锁,其他线程才能读取商品数量
-
共享锁 & 排它锁
- 共享锁(读锁):所有线程都可以读这个数据,但不能写
- 排它锁(写锁)