【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-01

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【4月更文挑战第6天】MySQL事务的隔离性确保数据操作的完整性和一致性,ACID原则包括原子性、一致性、隔离性和持久性。事务隔离级别有四种:读未提交、读提交、可重复读和串行化,分别解决并发问题如脏读、不可重复读和幻读。不同隔离级别在效率和安全性间权衡,例如读未提交允许未提交变更可见,而串行化通过锁保证安全但可能降低效率。在不同隔离级别下,事务看到的数据状态会有所变化,例如在可重复读级别,事务始终看到初始数据,而在串行化级别,事务会等待其他事务完成再继续,避免数据冲突。

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

事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL里,事务支持是在引擎层实现的。MySQL是一个支持多引擎的系统,但不是所有的引擎都支持事务,MySQL原生的MyISAM引擎就不支持事务。

事务的四个特性,ACID,即原子性、一致性、隔离性和持久性。

隔离性与隔离级别

当数据库上有多个事务同时执行的时候,可能会出现脏读、不可重复读、幻读的问题,为了解决问题,就有了“隔离级别”的概念。

首先要明确的一点是,你隔离得越严实,效率就会越低。因此很多时候,我们都需要在二者之间寻找一个平衡点。SQL标准的事务隔离级别包括下面几个:

  • 读未提交read uncommited:一个事务还没提交时,它做的变更就能被别的事务看到
  • 读提交 read commited:一个事务提交以后,它做的变更才能被别的事务看到
  • 可重复读repeatable read:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务不可见。
  • 串行化serializable:对于同一行记录,写会加写锁,读会加读锁。当出现读写锁冲突时,后访问的事务必须等前一个事务执行完成,才能继续执行。

假设数据表T中只有一列,其中一行的值为1,下面是按照时间顺序执行两个事务的行为:

mysql> create table T(c int) engine=InnoDB;
insert into T(c) values(1);

image-20240409222503928.png

观察下在不同的隔离级别下,事务A会有哪些不同的返回结果,也就是图里V1/V2/V3的返回值分别是什么?

  • 读未提交:虽然事务B还没有提交,但是结果已经被A看到了所以V1=V2=V3=2
  • 读提交:事务B的更新在提交以后才能被A看到,所以V1=1,v2=v3=2
  • 可重复读:事务A在执行期间看到的数据前后是一致的,所以V1=V2=1,V3=2
  • 串行化:当事务B执行“将1改成2”的时候,会被锁住。直到事务A提交后,事务B才继续执行。所以v1=v2=1,v3=2
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
19 2
|
1天前
|
存储 关系型数据库 MySQL
MySQL事务简述
MySQL事务简述
6 0
|
1天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】分库分表
分库分表是一种数据库架构设计的方法,用于解决大规模数据存储和处理的问题。 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储,这就相当于原来一台服务器提供服务现在改成多台服务器组成集群共同提供服务。
28 8
|
1天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
1天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
13 0
|
1天前
|
存储 SQL 关系型数据库
MySQL万字超详细笔记???
MySQL万字超详细笔记???
76 1
MySQL万字超详细笔记???
|
1天前
|
SQL 安全 关系型数据库
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
【Mysql-12】一文解读【事务】-【基本操作/四大特性/并发事务问题/事务隔离级别】
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MySQL总结
MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
238 8
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
204 6
|
1天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
201 4
http://www.vxiaotou.com