Mysql四种事务隔离级别实现

原子性实现

事务是并发控制的最小单位,如果无法保证原子性,就无法保证一个事务的所有操作都被执行完成。原子性是通过事务回滚机制保证,undo log实现了事务回滚

在执行update/delete/insert跟更新操作时,会对应生成update/insert/delete相反的更新undo log日志,在部分事务执行失败的时候,使用undo log日志将已经执行的更新操作回滚,保证了事务的原子性。

Mysql四种事务隔离级别实现

持久性实现

持久性是指已经更新的操作会被记录在磁盘上,即使机器宕机,更新结果依然不会丢失

redo log主要用于机器宕机数据恢复,回复过程由mysql自动执行,bin log可以基于某个时间点对数据进行恢复,同时,bin log也用于主从复制。

隔离性

隔离性主要是指两个事务并行执行,彼此之间相互干扰。最高级别的隔离是串行化。锁+MVCC(读快照)是实现事务隔离级。

-写操作:锁
写-读操作:MVCC(脏读、不可重复读幻读)

锁的概况

select * from information_schema.innodb_locks;

InnoDB整体状态,其中包括锁的情况

show engine innodb status;

在事务A中执行:

start transaction;
update account SET balance = 1000 where id = 1;

#在事务B中执行:

start transaction;
update account SET balance = 2000 where id = 1;

Mysql四种事务隔离级别实现

  • 脏读:读了别人没有提交的数据。
  • 不可重复读:指读取同一条数据,前后数据不一致,由update引起。
  • 幻读:读取一个范围内的数据,读取的数量不一致,由insert/update组成。

一致性

原子性、持久性和隔离性合起来共同保证了一致性,也是事务要达到的目标,修改之间满足各种约束的,修改之后也依然满足各种约束,业务上从一个A账户转账到B账户,最终应该保证A扣除金额和B增加金额相等。

参考:
Mysql四种事务隔离级别实现

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
Makia98

ACID和事务四个隔离级别是两个维度哦,OP需要再深入理解下呢?

1年前 评论
my38778570 (楼主) 1年前
Makia98 (作者) 1年前
my38778570 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!