myisam与innodb的锁

本文整理了一些myisam和innodb锁的知识点,以便查阅。


Myisam的锁

# 使用表锁

# 事务A获取读锁后,事务A可以读取,但是不能修改,事务B可以读取,修改会等待事务A释放锁

# select、insert、update、delete等操作都会自动加锁

# 同一时间,不同进程对同一张表获取锁时,写锁优先级大于读锁,这也是Myisam存储引擎不适合有大量写操作应用的原因,大量写操作会导致读锁等待

# 可以通过给insert、update、delete等加low_priority属性降低语句的优先级

# max_write_lock_count: 当等待读锁数量达到该值时,降低写锁优先级,让读锁获得一定的机会


InnoDB的锁

# update、select、delete都会自动加排他锁,select不会加锁

# select...IN SHARE MODE获得共享锁,如果当前事务会对同一记录执行更新操作,则应该用select...FOR UPDATE获得排他锁,否则可能造成死锁

# InnoDB的行锁是加在索引上的,也就意味着如果当前选择没有命中索引,则会加表锁

# InnoDB加锁策略还与执行计划有关,如果SQL执行计划认为权标扫描效率更高,则会使用表锁,而不是行锁

# 乐观锁与悲观锁:《深入理解乐观锁与悲观锁》

猜你喜欢

转载自blog.csdn.net/maquealone/article/details/81030320
今日推荐