Mysql事务、锁和MVCC

本文最后更新于:10 天前

Mysql事务、锁和MVCC”


1、事务

1.1目的

保证数据最终的一致性

1.2特性

ACID
原子性(Atomicity)
要么同时成功,要么同时失败,底层依赖undo log实现
隔离性(Isolation)
事务之间需要有隔离,互不影响。Mysql提供四种隔离级别,隔离级别底层实现是

四种隔离级别:

  • read uncommit (读未提交)
  • read commit (读已提交)
  • repeatable read (可重复复读)
  • serializable (串行)

持久性(Durability)
一旦提交事务,数据永久记录。Mysql底层使用redo log来持久化数据。

一致性(Consistency)
一致性是事务的目的,需要通过应用程序来保证一致性
「隔离性」「原子性」「持久性」均是为了保障「一致性」的手段

2、锁

InnoDB 引擎下,按锁的粒度分类,可以简单分为行锁表锁

  • 命中索引是行锁,不命中是表锁
  • 行锁实际上是作用在索引之上的
  • 行锁又可以简单分为读锁(共享锁、S 锁)和写锁(排它锁、X 锁)
  • 读锁是共享的,多个事务可以同时读取同一个资源,但不允许其他事务修改
  • 写锁是排他的,写锁会阻塞其他的写锁和读锁

3、MVCC

MVCC 的主要是通过 read viewundo log 来实现的
待整理…

总结:

  • 事务为了保证数据的最终一致性
  • 事务有四大特性,分别是原子性、一致性、隔离性、持久性
  • 原子性由 undo log 保证
  • 持久性由 redo log 保证
  • 隔离性由数据库隔离级别供我们选择,分别有 read uncommit,read commit,repeatable read,serializable
  • 一致性是事务的目的,一致性由应用程序来保证
  • 事务并发会存在各种问题,分别有脏读、重复读、幻读问题。上面的不同隔离级别可以解决掉由于并发事务所造成的问题,而隔离级别实际上就是由 MySQL 锁来实现的
  • 频繁加锁会导致数据库性能低下,引入了 MVCC 多版本控制来实现读写不阻塞,提高数据库性能
  • MVCC 原理即通过 read view 以及 undo log 来实现

Mysql事务、锁和MVCC
https://calmchen.com/posts/c058a5a3.html
作者
Calm
发布于
2022年8月30日
更新于
2022年8月30日
许可协议