简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。

1、事务的特性:原子性、一致性、隔离性、持久性

2、多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读

3、事务隔离级别:读未提交、读提交、可重复读、串行化

4、不同事务隔离级别的区别

  • 读未提交:一个事务还未提交,它所做的变更就可以被别的事务看到。
  • 读提交:一个事务提交之后,它所做的变更才可以被别的事务看到。
  • 可重复读:一个事务执行过程中看到的数据是一致的。未提交的更改对其他事务是不可见的。
  • 串行化:对应一个记录会加读写锁,出现冲突的时候,后访问的事务必须等前一个事务执行完成才能继续执行。

5、配置事务隔离级别的方法:启动参数transaction-isolation

6、事务隔离的实现

  1. 每条记录在更新的时候都会同时记录一条回滚操作
  2. 同一条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC)

7、回滚日志什么时候删除 系统会判断当没有事务需要用到这些回滚日志的时候,回滚日志会被删除。

8、什么时候不需要了 当系统里没有比这个回滚日志更早的read-view的时候。

9、为什么尽量不要使用长事务
长事务意味着系统里面会存在很老的事务视图,在这个事务提交之前,回滚记录都要保留,这会导致大量占用存储空间。
除此之外,长事务还占用锁资源,可能会拖垮库。

10、事务启动方式

  1. 一、显式启动事务语句,begin或者start transaction,提交commit,回滚rollback;
  2. 二、set autocommit=0,该命令会把这个线程的自动提交关掉。
  3. 这样只要执行一个select语句,事务就启动,并不会自动提交,直到主动执行commit或rollback或断开连接。

11、建议使用方法一,如果考虑多一次交互问题,可以使用commit work and chain语法。在autocommit=1的情况下用begin显式启动事务,如果执行commit则提交事务。如果执行commit work and chain则提交事务并自动启动下一个事务。

思考题:

在开发过程中,尽可能的减小事务范围,少用长事务,如果无法避免,保证逻辑日志空间足够用,
并且支持动态日志空间增长。监控Innodb_trx表,发现长事务报警。

因此,我会建议你总是使用 set autocommit=1, 通过显式语句的方式来启动事务

近早提交事务,尽量减少长事务的出现

https://time.geekbang.org/column/article/68963

03 | 事务隔离:为什么你改了我还看不见?笔记(转)相关推荐

  1. 3 事务隔离:为什么你改了我还看不见?

    3 事务隔离:为什么你改了我还看不见? 在数据库中,事务是要保证一组数据库操作,要么全部成功,要么全部失败,在mysql中,事务在引擎层实现,innodb支持事务 隔离性与隔离级别 事务,ACID(a ...

  2. 03 | 事务隔离:为什么你改了我还看不见?

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱. 转账过程具体到程序里会有一系列的操作,比如查询余额 ...

  3. 03 | 事务隔离:为什么你改了我还看不见

    1. 简介   简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败.在 MySQL中,事务支持是在引擎层实现的.你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持 ...

  4. MySQL实战45讲--事务隔离:为什么你改了我还看不见?(03)

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱. 转账过程具体到程序里会有一系列的操作,比如 ...

  5. 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“

    最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...

  6. MySQL事务隔离与行锁的关系

    MySQL事务隔离与行锁的关系 1. MySQL事务隔离 2. MySQL行锁 3. 事务隔离问题 1. MySQL事务隔离 MySQL事务详解 MySQL事务详解中介绍了事务隔离相关概念原理,如果是 ...

  7. MySQL可重复读事务隔离具体是怎么实现的?

    事务的启动会有的操作 事务的隔离等级有四种,现在说默认的可重复读,可重复读就是一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的.当然在可重复读隔离级别下,未提交变更对其他事务也是 ...

  8. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    阅读目录 概述: 一.事务 二.锁 三.阻塞 四.隔离级别 五.死锁 以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. ...

  9. MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...

最新文章

  1. SQLite三种JDBC驱动的区别
  2. 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件(转载)
  3. 大小端、位段(惑位域)和内存对齐
  4. apache重写规则转Nginx
  5. python解释器把python代码一次性翻译成目标代码_Python语言程序设计----【第1周 Python基本语法元素】之1.1 程序设计基本方法...
  6. scala递归求斐波那契数列
  7. java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。
  8. 2008RDS高可用:DNS轮询
  9. 百度网盘解析工具 利用IDM等工具提速下载
  10. 作为一个大学才开始入门学计算机编程的孩子想要的东西-----听我扯,你蛋疼,他菊紧,我开心
  11. 华为云医疗智能体,助力医疗健康加速智能化
  12. 设置py文件在pycharm里的工作环境/路径
  13. 最大堆和最小堆(数据结构)
  14. js清空input类型为type的文件框的内容
  15. 第41部分-Linux x86 64位汇编MMX使用
  16. 运行时常量区-方法区
  17. 关于Oralce OAM/OIM及与P6/Unifier 集成SSO的想法
  18. K8s常见问题分析解决(未分类问题一)
  19. lotus domino服务器及oa系统,基于Lotus Domino OA系统的研究和实现
  20. android 异形图片布局,杜蕾斯一张图说明异形全面屏手机进化史!刘海屏到水滴屏很形象...

热门文章

  1. Linux修改文件句柄数与vm.max_map_count参数
  2. 任务调度之Timer、TimerTask
  3. rdd转换成java数据结构_Spark RDD转换成其他数据结构
  4. python包导入详细教程脚本之家_python包导入详细教程脚本之家_Python使用import导入本地脚本及导入模块的技巧总结......
  5. 基于 Spring Boot 开发 OA 开源产品
  6. java String类常用的方法
  7. mvc 怎么把后台拼接好的div写到前台_五、controller层配置和前台数据crud操作的实现...
  8. python在windows上安装_在Windows上安装Python | 严佳冬
  9. mysql索引学习笔记
  10. Tomcat 改BUG之 localhost:8080 404