MySQL学习笔记-事务的隔离性

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL学习笔记-事务的隔离性

最经典的事务相关的例子就是转账,小明向小红转 100 元,小明账户减 100,小红账户加 100,对于这一组操作,必须要保证要么都成功,要么都失败,而 MySQL 的事务具有 ACID 特性,其中隔离性是最难理解的,这篇文章主要来熟悉一下 MySQL 的隔离性,熟悉隔离性可以帮助后面学习多版本并发控制(MVCC)原理。

1.笔记图

2.事务

  • 就是要保证一组数据库操作,要么全部成功,要么全部失败
  • ACIDAtomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)

3.隔离级别

  • 串行化(serializable ):对于同一行记录,会加写锁会加读锁
  • 可重复读(repeatable read):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的,未提交变更对其他事务是不可见的
  • 读提交(read committed):一个事务提交之后,它做的变更才会被其他事务看到
  • 读未提交(read uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到

  • 若隔离级别是读未提交V1 的值是 2V2V3 的值都是 2
  • 若隔离级别是读提交V1 的值是 1V2V3 的值都是 2
  • 若隔离级别是可重复读V1V2 的值都是 1V3 的值是 2
  • 若隔离级别是 串行化,事务 B 执行将 1 改成 2 的时候,会被锁住,直到事务 A 提交后,事务 B 才可以继续执行,V1V2 的值是 1V3 的值是 2
  • 查看当前隔离级别
show variables like 'transaction_isolation';

4.什么时候会创建视图

  • 可重复读隔离级别下,视图是在事务启动时创建的,整个事务存在期间都用这个视图
  • 读提交隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的
  • 读未提交隔离级别下直接返回记录上的最新值,没有视图概念
  • 串行化隔离级别下直接用加锁的方式来避免并行访问

5.事务隔离的实现

  • 每条记录在更新的时候都会同时记录一条回滚操作
  • 记录上的最新值,通过回滚操作,都可以得到前一个状态的值

  • 当前值是 4,不同时刻启动的事务会有不同的 read-view
  • 在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)
  • 当没有事务再需要用到这些回滚日志时,回滚日志会被删除

6.事务的启动方式

  • 显式启动事务语句beginstart transaction,配套的提交语句是 commit,回滚语句是 rollback
  • set autocommit=0:该命令会将这个线程的自动提交关掉,如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
126 6
|
26天前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
97 43
|
1月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
53 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
70 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1630 14
|
1月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
2月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
500 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
2月前
|
SQL 关系型数据库 MySQL
MySQL基础:事务
本文详细介绍了数据库事务的概念及操作,包括事务的定义、开启、提交与回滚。事务作为一组不可分割的操作集合,确保了数据的一致性和完整性。文章还探讨了事务的四大特性(原子性、一致性、隔离性、持久性),并分析了并发事务可能引发的问题及其解决方案,如脏读、不可重复读和幻读。最后,详细讲解了不同事务隔离级别的特点和应用场景。
142 4
MySQL基础:事务
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】索引和事务
【MySQL】索引和事务
54 0