美文网首页
mysql的锁和mvcc

mysql的锁和mvcc

作者: 新时代农民工 | 来源:发表于2021-06-15 10:15 被阅读0次

mysql的事物隔离级别由锁和mvcc相互配合形成

事务的 ACID

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

MySQL 的 InnoDB 引擎才支持事务,其中可重复读是默认的隔离级别。

读未提交和串行化基本上是不需要考虑的隔离级别,前者不加锁限制,后者相当于单线程执行

读提交解决了脏读问题,行锁解决了并发更新的问题。并且 MySQL 在可重复读级别解决了幻读问题,是通过行锁和间隙锁的组合 Next-Key 锁实现的

一、数据库三种问题:

脏读(Drity Read):事务A更新记录但未提交,事务B查询出A未提交记录。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几行数据,而另一个事务却在此时插入了几行数据,先前的事务在接下来的查询中,就会发现有几行数据是它先前所没有的。

二、四种隔离级别

Read Uncommitted(读取未提交内容):可能读取其它事务未提交的数据。不能避免:脏读+不可重复读+幻读---实际上没有数据库选这个

Read Committed(读取提交内容):一个事务只能看见已经提交事务所做的改变。但同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。不能避免:不可重复读+幻读

Repeatable Read(可重读):它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行不能避免:幻读

Serializable(可串行化):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

三、MVCC

1.普通MVCC

每行数据都存在一个版本,每次数据更新时都更新该版本

修改时Copy出当前版本随意修改,各个事务之间无干扰

保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)

就是每行都有版本号,保存时根据版本号决定是否成功,听起来含有乐观锁的味道

2.Innodb的实现方式是:

事务以排他锁的形式修改原始数据

把修改前的数据存放于undo log,通过回滚指针与主数据关联

修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback)

二者最本质的区别是,当修改数据时是否要排他锁定,如果锁定了还算不算是MVCC

mysql锁

相关文章

  • 蚂蚁面试

    1、mysql乐观锁和悲观锁的区别? 乐观锁通过MVCC,版本实现,悲观锁select... for update...

  • mysql的锁和mvcc

    mysql的事物隔离级别由锁和mvcc相互配合形成 事务的 ACID 事务具有四个特征:原子性( Atomicit...

  • MySQL中的锁和并发控制

    综述 对MySQL中并发控制所用到的机制和锁进行整理。 行锁 表锁 间隙锁 临键锁 MVCC 悲观锁 乐观锁 行锁...

  • MVCC原理机制

    目录 背景 前提回顾什么是MVCC什么是当前读和快照读当前读,快照读和MVCC关系MVCC,乐观锁,悲观锁关系 M...

  • Mysql MVCC原理和锁详解

    一、什么是MVCC?   MVCC(Multi-Version Concurrency Control)多版本并发...

  • 数据库事务管理详解

    参考文献:MySQL的MVCC及实现原理数据库四大特性Innodb中的事务隔离级别和锁的关系

  • Mysql多版本并发控制(MVCC)

    Mysql多版本并发控制(MVCC) MVCC是个行级锁变种,他在普通读情况下避免了加锁操作,因此开销更低。实现了...

  • MySQL索引、事务、锁、MVCC简述

    目录 MySQL索引、事务、锁、MVCC简述一、索引1.1 执行计划 Explain1.2 索引结构1.2.1 H...

  • MySQL锁机制和MVCC版本控制

    一、MySQL锁机制 1.1 锁分类 按锁的粒度 划分: 表锁:表锁是粒度最大的锁,开销小,加锁快,不会出现死锁,...

  • Mysql性能优化-事务、锁和MVCC

    事务 mysql中如何开启事务: begin/start transaction --手工 commit/roll...

网友评论

      本文标题:mysql的锁和mvcc

      本文链接:https://www.haomeiwen.com/subject/zjxzeltx.html