本文整理了一些myisam和innodb锁的知识点,以便查阅。
Myisam的锁
# 使用表锁
# 事务A获取读锁后,事务A可以读取,但是不能修改,事务B可以读取,修改会等待事务A释放锁
# select、insert、update、delete等操作都会自动加锁
# 同一时间,不同进程对同一张表获取锁时,写锁优先级大于读锁,这也是Myisam存储引擎不适合有大量写操作应用的原因,大量写操作会导致读锁等待
# 可以通过给insert、update、delete等加low_priority属性降低语句的优先级
# max_write_lock_count: 当等待读锁数量达到该值时,降低写锁优先级,让读锁获得一定的机会
InnoDB的锁
扫描二维码关注公众号,回复:
3661591 查看本文章
![](/qrcode.jpg)
# update、select、delete都会自动加排他锁,select不会加锁
# select...IN SHARE MODE获得共享锁,如果当前事务会对同一记录执行更新操作,则应该用select...FOR UPDATE获得排他锁,否则可能造成死锁
# InnoDB的行锁是加在索引上的,也就意味着如果当前选择没有命中索引,则会加表锁
# InnoDB加锁策略还与执行计划有关,如果SQL执行计划认为权标扫描效率更高,则会使用表锁,而不是行锁
# 乐观锁与悲观锁:《深入理解乐观锁与悲观锁》