【数据库】MySQL 事务图解

作者: 熊本极客 | 来源:发表于2022-02-08 19:52 被阅读0次

1.事务是什么?

事务是逻辑上的一组操作,要么都执行,要么都不执行

例子:假如张三要给李四转账200元,这个转账会涉及到两个关键操作就是:将张三的余额减少200元,将李四的余额增加200元。如果两个操作之间突然出现错误,例如银行系统崩溃导致张三余额减少,而李四的余额没有增加,这样的系统是有问题的。事务就是保证这两个关键操作要么都成功,要么都要失败。

事务的特性

image.png

原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性:执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性:一个事务被提交之后,对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

2.事务隔离级别及实践

并发事务带来的问题
脏读:当事务 T1 正在访问字段 A 并且对进行了修改,而这种修改还没有提交到数据库中。这时另外一个事务 T2 也访问和使用字段 A,但由于事务 T1 修改字段 A 后还没有提交 COMMIT,而那么事务 T2 读到的字段 A 是“脏数据”
丢失修改:事务 T1 读取 A=20,事务 T2 也读取 A=20,事务 T1 修改 A=A-1,事务 T2 也修改 A=A-1,最终结果 A=19,事务 T1 的修改被丢失。
不可重复读:一个事务内多次读同一数据且不一致。例如,事务 T1 在读取两次数据之间,事务 T2 修改了数据,导致事务 T1 两次读取的数据可能不太一样。
幻读:幻读与不可重复读类似。事务 T1 读取了几行数据,接着另一个并发事务 T2 插入了一些数据时。接着事务 T1 就会发现多了一些原本不存在的记录,就好像发生了幻觉一样。

事务隔离级别与并发问题的关系

隔离级别 脏读 不可重复读 幻影读
READ-UNCOMMITTED
READ-COMMITTED ×
REPEATABLE-READ × ×
SERIALIZABLE × × ×

如何设置和使用事务
① 设置方式:

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

② 使用方式

START TARNSACTION |BEGIN:显式地开启一个事务。
COMMIT:提交事务,使得对数据库做的所有修改成为永久性。
ROLLBACK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。

2.1 读取未提交 READ-UNCOMMITTED

允许读取尚未提交的数据变更,最低的隔离级别,可能导致脏读幻读不可重复读

场景:设置事务隔离级别为读未提交,导致脏读。

image.png

2.2 读取已提交 READ-COMMITTED

允许读取并发事务已经提交的数据,可以避免脏读,可能导致幻读不可重复读

场景:设置事务隔离级别为读已提交,避免脏读。

image.png

场景:设置事务隔离级别为读已提交,导致不可重复读。

image.png

2.3 可重复读 REPEATABLE-READ

同一个事务下多次读取结果都是一致的,除非数据是被自己的事务所修改,可以避免脏读不可重复读,但可能导致幻读

场景:设置事务隔离级别为可重复读,避免不可重复读。

image.png

相关文章

  • 【数据库】MySQL 事务图解

    1.事务是什么? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 例子:假如张三要给李四转账200元,这个转账...

  • 数据库笔记

    数据库 数据库⭐MySQL 默认存储引擎InnoDB(事务性存储引擎)一、事务 数据库事务? 数据库事务有什么作用...

  • 事物处理

    MySQL 事务 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 事务处理可以...

  • MySQL锁简介

    备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL 事务 一.MySQL锁概述 数据库锁定...

  • Mysql innodb SQL语句加锁方式

    mysql innodb存储引擎支持事务,是mysql的默认存储引擎。 数据库事务 事务是由一组sql语句组成的逻...

  • MySQL数据库高级(七)——事务和锁

    MySQL数据库高级(七)——事务和锁 一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻...

  • 聊聊数据库事务

    本文主要基于Mysql数据库的InnoDB存储引擎介绍事务相关知识。 1.先来说说数据库引入事务的目的。 事务...

  • 聊聊MySQL的隔离级别

    原文:聊聊MySQL的隔离级别 | MySQL隔离级别原理参考:oracle - mysql - 数据库事务隔离级...

  • Mac系统mysql设置事务隔离级别

    Mac系统mysql设置事务隔离级别 MySQL数据库事务隔离级别主要有四种: Serializable 串行化,...

  • mysql事务详解

    数据库事务 1.1数据库版本 Mysql8.0.12 1.2事务是由一组SQL语句组成的逻辑处理单元,事务具有以下...

网友评论

    本文标题:【数据库】MySQL 事务图解

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