mysql事务与锁(一)精谈Mysql事务

本文详细介绍了MySQL事务的ACID特性,包括原子性、一致性、隔离性和持久性,并探讨了事务的四种隔离级别:读未提交、读已提交、可重复读和串行化。重点解析了MySQL中的多版本并发控制(MVCC)机制,解释了MVCC如何实现读写并行以及其在读已提交和可重复读隔离级别下的工作原理。此外,还讨论了并发事务可能引发的问题和解决策略,以及事务隔离级别与锁的关系。
摘要由CSDN通过智能技术生成

前言

本机开始将机介绍mysql的事务和锁

事务介绍

事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割。例如我们的转账这个业务,就需要进行数据库事务的处理。

事务的四个特性(ACID)

  • 一致性 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。一致性包括两方面的内
    容,分别是约束一致性和数据一致性
    • 约束一致性:创建表结构时所指定的外键、Check、唯一索引等约束,可惜在 MySQL 中不支持Check
    • 数据一致性:是一个综合性的规定,因为它是由原子性、持久性、隔离性共同保证的结果,而不是单单依赖于某一种技术

一致性也可以理解为数据的完整性。数据的完整性是通过原子性、隔离性、持久性来保证的,而这3个特性又是通过 Redo/Undo 来保证的。逻辑上的一致性,包括唯一索引、外键约束、check 约束,这属于业务逻辑范畴。

  • 原子性 指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。
    修改—》Buffer Pool修改—》刷盘。可能会有下面两种情况:
    • 事务提交了,如果此时Buffer Pool的脏页没有刷盘,如何保证修改的数据生效? Redo
    • 如果事务没提交,但是Buffer Pool的脏页刷盘了,如何保证不该存在的数据撤销?Undo

每一个写事务,都会修改BufferPool,从而产生相应的Redo/Undo日志,在Buffer Pool 中的页被刷到磁盘之前,这些日志信息都会先写入到日志文件中,如果 Buffer Pool 中的脏页没有刷成功,此时数据库挂了,那在数据库再次启动之后,可以通过 Redo 日志将其恢复出来,以保证脏页写的数据不会丢失。如果脏页刷新成功,此时数据库挂了,就需要通过Undo来实现了。

  • 隔离性 事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
    InnoDB 支持的隔离性有 4 种,隔离性从低到高分别为:读未提交、读提交、可重复读、可串行化。锁和多版本控制(MVCC)技术就是用于保障隔离性的
  • 持久性 事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库。
    如下图所示,一个“提交”动作触发的操作有:binlog落地、发送binlog、存储引擎提交、flush_logs,check_point、事务提交标记等。这些都是数据库保证其数据完整性、持久性的手段
    在这里插入图片描述
    MySQL的持久性也与WAL技术相关,redo log在系统Crash重启之类的情况时,可以修复数据,从而保障事务的持久性。通过原子性可以保证逻辑上的持久性,通过存储引擎的数据刷盘可以保证物理上的持久性

举例:

小明去银行转账给小红十元钱。 这一过程就是一个事务。

转账要不成功,要不失败,这就是事务的原子性。

转账金额为10元钱,转账成功小红多了十元钱,小明少了十元钱。转账失败小明依然存有十元钱,无论转账成功与否,10元钱这金额不会改变,这就是一致性。

小明转账给小红,如果其他人也在转账,小明转账的金额不会出现到其他账户上,这就是事务的隔离性。

小明转账给小红这一记录银行要保存下来,方便日后统计以及当凭证,这就是持久性。

ACID 及它们之间的关系如下图所示,4个特性中有3个与 WAL 有关系,都需要通过 Redo、Undo 日志来保证等。
WAL的全称为Write-Ahead Logging,先写日志,再写磁盘。
在这里插入图片描述

mysql的事务控制的演进

并发事务

事务并发处理可能会带来一些问题,比如:更新丢失、脏读、不可重复读、幻读等

  • 更新丢失:当两个或多个事务更新同一行记录,会产生更新丢失现象。可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值