MySql锁理论学习

  1. 锁的种类
  • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响。
  • 写锁(排他锁):当前写操作没有完成前,会阻止其它写锁和读锁。
  1. 选锁的因素:加锁速度,开销,粒度,并发性能,死锁。
  2. 表锁(偏向MyISAM引擎,开销小,加锁快,无死锁,锁定粒度大,锁冲突概率高,并发低)
  • 对表加读锁:设想一个情况,两个会话1和2,一张table表。会话一对table表加读锁,此时:会话1和会话2都可读这张表;;会话1不可读除table外的其他表;会话1和会话2都不可改这张表,但会话1将表锁释放后,等待中的会话2会执行更改操作。
  • 对表加写锁:情况同上,但会话1对table加了写锁。此时:会话1可以读+写此表;会话1不可读除table外的其他表;会话2不可读+不可写此表,除非会话1释放锁。
  1. 命令

    • show open tables 展示加锁的表
    • show status like "table%"展示加锁的情况,包括被加了几次锁和线程堵塞了几次。
  2. 行锁(偏向InnoDB引擎,开销大,加锁慢,会出现死锁。锁定粒度小,锁冲突概率低,并发高)----关于事务,底下会有详细介绍

  • InnoDB 和MyISAM最大区别就是:InnoDB支持事务;采用了行级锁。
  1. 事务:一组SQL语句组成的逻辑处理单元
  • 四大特性:ACID原子性,一致性,隔离性,持久性
  • 并发处理事务带来的问题:a.更新丢失–两人同时更新同一文件,导致了覆盖;b.幻读—A读到了B提交的新数据,不符合隔离性;c.脏读—读取了已修改但尚未提交的数据;d.不可重复读----A读到了B已提交修改的数据,违反了隔离性。
  • 事务隔离级别:由低到高为未提交读,已提交读,可重复读,可序列化。通过show variables liek "tx_isolation"可知当前数据库隔离级别,默认为可重复读。

猜你喜欢

转载自blog.csdn.net/weixin_40485391/article/details/107413847
今日推荐