【MySQL】事务四大特性ACID、并发事务问题、事务隔离级别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】事务四大特性ACID、并发事务问题、事务隔离级别

一、事务四大特性ACID

1.1 原子性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

事务是一组操作,这组操作是不可分割的最小操作单元,表示这组操作的内容要么全部执行成功,如果有一个操作没有成功,那么这组操作全部执行失败。

1.2 一致性

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

例如在进行转账操作时,一个账户给另一个用户转账,不管这个操作最终成功,还是因为转账失败回滚,最后这两个账户的余额相加都是一致的。

1.3 隔离性

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

隔离性指的是有若干个并发事务,比如有两个事务,事务1和事务2都在同时操作这个数据库,事务1去操作的时候不会影响并发的事务2的执行,事物2去操作的时候也不会影响并发的事务1去执行,这两个事务是在独立的环境下运行的。

1.4 持久性

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

数据库当中的数据最终是存放在磁盘当中的,一个事务不管是操作成功提交了还是操作异常回滚了,最终对数据库的改变是永久的保留到磁盘中的。

二、并发事务问题

2.1 脏读

  • 一个事务读到另外一个事务还没有提交的数据。

有两个并发执行的事物,事务A要进行select和update操作,事务B执行select操作,它们操作的是同一个数据库,当事务A执行完update操作还没有提交时,事务B进行了select操作,这时就查出了事务A将要修改但还没有提交修改的数据,这被称为脏读。

2.2 不可重复读

  • 一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

有两个并发事务,事务A有4个操作,第一个操作是select(id=1)一个数据,事务A在进行第二个操作时,事务B对事务A第一次查询的数据进行了修改,并且提交了这次修改,接着事务A进行第三个操作,依然是select(id=1),与第一个操作一样,但这次查到的数据发生了改变,这就是不可重复读。

2.3 幻读

  • 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影”。

有两个并发事务,事务A进行了select(id=1)的操作,在提交前事务B进行了insert(id=1)的操作,并且提交完成,此时数据库当中已经有了id为1的数据,接下来事务A进行insert(id=1)的操作,此时会提示插入失败,因为事务B已经插入了id为1的数据,此时事务A再次进行select(id=1)的操作,但还是没有查到(已经解决了不可重复读的问题了),这就类似出现了幻觉,这个现象称之为幻读。

三、事务隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted
Read committed(Oracle默认) ×
Repeatable Read(MySQL默认) × ×
Serializable × × ×
  • 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

  • 设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL {Read uncommitted|Read committed|Repeatable Read|Serializable  } ;

3.1 脏读演示

  • Read uncommitted:


  • Read committed:


3.2 不可重复读演示



3.3 可重复读演示




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
5天前
|
关系型数据库 MySQL 数据库
MySQL数据库基础第四篇(多表查询与事务)
MySQL数据库基础第四篇(多表查询与事务)
|
14天前
|
关系型数据库 MySQL 数据库
MySQL 8.0 新特性之不可见主键
【6月更文挑战第9天】MySQL 8.0 引入了不可见主键特性,提供更灵活的数据库管理方式。不可见主键能减少业务逻辑干扰,提高数据安全性和隐私,同时在某些场景下更适用。示例展示了如何创建和使用不可见主键,但需要注意它可能带来的理解和调试难题。此特性增加了设计和管理数据库的选项,适用于对数据隐私有高要求的场景。随着技术发展,不断学习和探索新特性将提升数据库性能和功能。
37 9
|
9天前
|
SQL 关系型数据库 MySQL
MySQL数据库——事务操作-begin-commit-rollback
MySQL数据库——事务操作-begin-commit-rollback
9 1
|
9天前
|
存储 SQL 关系型数据库
探讨MySQL事务
探讨MySQL事务
9 1
|
9天前
|
SQL JSON 关系型数据库
MySQL 8.0新特性?
【6月更文挑战第14天】MySQL 8.0新特性?
17 1
|
10天前
|
存储 SQL 关系型数据库
MYSQL--(1.存储引擎 *2.事务*)
MYSQL--(1.存储引擎 *2.事务*)
|
10天前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】2.6-InnoDB关键特性
【MySQL技术内幕】2.6-InnoDB关键特性
17 0
|
11天前
|
SQL 关系型数据库 MySQL
【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制
【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制
21 0
|
2天前
|
存储 关系型数据库 MySQL
关系型数据库mysql日志和临时文件
【6月更文挑战第15天】
20 4