mysql 中锁的分类

内容纲要

mysql 锁的机制

锁的出现,是因为在并发的情况下,会出现数据竞争,这个时候需要保证数据的一致性,就需要锁来处理。mysql 中不同的引擎锁的粒度、开锁、性能等,都有差异。

锁的分类

mysql 中锁大致可分为读锁写锁两类。不同表引擎中的表现方式是存在一定的差别。

MyISAM 引擎中的锁分类

MyISAM 引擎是表级锁,开销小,加锁快,不会出现列锁;但锁粒度大,发生锁冲突的概率大,并行度低。

  • 表共享读锁(Table Read Lock)

    对 MyISAM 表的读操作,不会阻塞其他用户对同一表,但会阻塞对同一表的写请求。

  • 表独点写锁(Table Write Lock)

    对 MyISAM 表的写操作,会阻塞其他用户对同一表的读写操作

  • 举例

    1. 获取写锁
    2. 获取读锁

      实际开发中,并不要开发人员像上面一样显示的加锁,引擎会自动完成以上操作。规则是:查询前会对表加读锁,写操作时会加写锁。

  • 查看 MyISAM 中的锁状态方法

InnoDB 引擎中的锁分类

InnoDB 可以支持行锁和表锁,开销大,加锁慢,容易出现死锁;锁粒度小,发生锁竞争的概率低,并发度也高。

  • 共享锁(读锁)
  • 排他锁(写锁)
  • 举例
    1. 获取读锁
    2. 获取写锁

      从上面可以看出,InnoDB中的锁其实就是常说的事务。意不意外^^

后续

后面会在实验的基础上演示InnoDB,脏读、不可重复读、幻读的情况。

发表评论

邮箱地址不会被公开。 必填项已用*标注

8 × = 8