MySQL事务介绍

一、事务的基本要素(ACID)

1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。

2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3、隔离性(Isolation):不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,对数据的修改是永久性的,即使系统故障也不会丢失 。

总结:
隔离性由多版本控制机制和锁实现;
原子性、一致性由InnoDB的redo log、undo log来实现;
持久性通过(先写日志)force-log-at-commit 机制来实现;

二、事务的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新(UPDATE)并提交,导致事务A多次读取同一数据时,结果不一致。

3、幻读:是针对数据插入(INSERT)操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了幻觉,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表(当然了InnoDB采用采用next-key锁来解决)。

三、MySQL事务隔离级别

MySQL数据库提供的四种隔离级别(由低到高):

① Read uncommitted (读未提交):最低级别,任何情况都无法保证。

② Read committed (RC,读已提交):可避免脏读的发生。

③ Repeatable read (RR,可重复读):可避免脏读、不可重复读的发生。(注意事项:InnoDB的RR可以解决部分幻读,主要原因是MVCC读取快照)

④ Serializable (串行化):可避免脏读、不可重复读、幻读的发生。 (由MVCC降级为表锁方式,性能差,有死锁问题)

RU级别下,脏读问题
RC级别下,解决脏读,出现不可重复读问题 RR级别下,解决不可重复读问题

RR-解决幻读问题(因为MVCC,读取的是当前事务的快照版本,所以新插入的无法查询,幻读也就解决了)

RR-另一种类似幻读问题

我们可以看出这样一种现象,单纯的插入幻读可以解决,但是如果修改数据后就能读到,插入重复/删除数据都是可以操作的,也就是意味着能读到数据。那这是为什么呢?想要知道为啥有这个问题,那就需要涉及下一编文章MVCC中的知识了。

MySQL-07-事务相关推荐

  1. 详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  2. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程

    目录 01.反馈 02.回顾 03.并发访问MySQL-问题概述 并发访问的问题 04.并发访问MySQL-问题演示 05.并发访问MySQL-read-committed解决脏读问题 06.并发访问 ...

  3. MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)

    第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...

  4. mysql执行事务的语句_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  5. 简单介绍MySQL开启事务的两种方式

    本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 方式 1 START TRANSACTION 或 ...

  6. 【MySQL】MySQL的事务

    事务 目录 事务 1.1 为什么使用事务? 1.2 事务的概念 1.3 使用 2.事务的基本特性 2.1 脏读问题: 2.2 不可重复读: 2.3 幻读问题: 2.4 MySQL中事务的隔离级别 1. ...

  7. mysql+实例夯住的监控_Nagios 里面监控MySQL 监控事务夯住(RUNNING)报警通知

    序言: 业务报警订单提交异常,页面一直没有反应,排查后是事务没有提交或者回滚导致,想到如果及时监控事务的运行状态报警出来,那么就可以及时排查出问题所在,方便运营处理,所以自己就弄了一个shell脚本放 ...

  8. MySQL分布式事务(XA事务)

    MySQL分布式事务(XA事务) 官网:https://dev.mysql.com/doc/refman/5.7/en/xa.html 1.什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服 ...

  9. Mysql:事务管理——未完待续

    逻辑事务管理    --基本上应用于innodb引擎 begin [work]    start transaction [with consistent snapshot] commit [work ...

  10. MySQL之事务隔离级别--转载

    转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted ...

最新文章

  1. AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——10:00-10:30张亚勤教授《智能产业新浪潮》
  2. UI组件之TextView及其子类(一)TextView和EditText
  3. [知识库:python-tornado]异步调用中的上下文控制Tornado stack context
  4. 从头开始学JavaScript (四)——操作符
  5. 经典商业模式案例第1例:校园O2O
  6. CUDA编程之矩阵乘法
  7. 3dmax一键展uv_3Dmax批量展开场景物体的第二套UV
  8. Crypto-Enigma密码机原理
  9. FPGA实现AM调制
  10. 照片模糊怎么变清晰?不如试试这两个方法
  11. 从MIXMAX概率模型理解Bayesian建模方法
  12. 潮趣真无线蓝牙耳机,南卡小音舱真无线耳机评测来啦!
  13. 直插电阻通过色环读取电阻阻值,误差与温度系数方法总结
  14. 怎么样把计算机桌面的图标改小,怎样将电脑桌面图标变小_三招搞定桌面图标太小问题-系统城...
  15. POJ ZOJ题目分类
  16. MySQL的yum源
  17. python 爬虫(起点)网络小说
  18. 热工仪表及控制实训装置
  19. 风口之上,AI教育的一场“文火慢炖”
  20. 我们为什么要去月球“吃土”?

热门文章

  1. PIL安装失败解决方法
  2. 网络编程(3)—— 基于Windows系统的socket服务器端的编程步骤
  3. 你的数字困境是什么?
  4. 普里姆算法构造最小生成树
  5. 忽然之间发现自己还有胜算
  6. 测试场景设计(一):扫码付款场景
  7. win10 安装 mysql 5.7 msi版
  8. windows下添加路由
  9. 字体图标的作用和使用方式
  10. windows环境安装seata