IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【MySQL】事务(ACID特性、并发存在的问题、隔离级别) -> 正文阅读

[大数据]【MySQL】事务(ACID特性、并发存在的问题、隔离级别)

MySQL事务

什么是事务

事务就是一组逻辑操作的集合。

  • 事务:一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元
  • 事务的所有SQL语句全部执行成功,才能提交(commit)事务,把结果写回磁盘上。
  • 事务执行过程中,有的SQL出现错误,那么事务必须要回滚(rollback)到最初的状态

怎么实现事务

实现事务就是要保证可靠性和并发隔离,或者说,能够满足ACID特性的机制。而这些主要是靠日志恢复和并发控制实现的

  • 日志恢复:数据库里有两个日志,一个事redo log,一个事undo log。redo log记录的是已经成功提交的事务操作信息,用来恢复数据,保证事务的持久性。undo log记录的是事务修改之前的数据信息,用来回滚数据,保证事务的原子性
  • 并发控制:并发控制主要靠读写锁和MVCC(多版本控制)来实现。读写锁包括共享锁和排它锁,保证事务的隔离性。MVCC通过为数据添加时间戳来实现

事务的ACID特性

  • 原子性(Atomic):事务是一个不可分割的工作单位,这组操作要么全部发生,要么全部不发生
  • 一致性(Consistency):在事务开始以前,数据库中的数据有个一致的状态。在事务完成以后,数据库中的事务也应该保持这种一致性。即事务应该将数据从一个一致性状态移动到另一个一致性状态
  • 隔离性(Isolation):数据库中的事务不会受另一个并发执行的事务的影响
  • 持久性(Durability):事务对数据库的改变是永久的。事务完成(commit)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据!

事务并发存在的问题

  • 脏读(Dirty Read):脏读是指一个事务在处理过程中读取了另一个还没提交的事务的数据。
  • 不可重复读(NonRepeatable Read):不可重复读是对于数据库中的某一个字段,一个事务多次查询却返回了不同的值,这是由于在查询的间隔中,该字段被另一个事务修改并提交了。
  • 幻读(Phantom Read ):事务多次读取同一个范围的时候,查询结果的记录数不一样,这是由于在查询的间隔中,另一个事务新增或删除了数据。

事务的隔离级别

为了保证数据库事务一致性,解决脏读,不可重复读和幻读的问题,数据库的隔离级别一共有四种隔离级别:

  • 读未提交:最低级别的隔离,不能解决以上问题
  • 读已提交:只允许读已提交的数据,可以避免脏读的发生
  • 可重复读:确保事务可以多次从一个字段中读取相同的值,在该事务执行期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读。 通过锁行来实现
  • 串行化:最严格的事务隔离机制,要求所有事务被串行执行,可以避免以上所有问题。 通过锁表来实现
隔离级别脏读不可重复度幻读
读未提交未解决未解决未解决
读已提交解决
可重复读解决解决
串行化解决解决解决

Oracle的默认隔离级别是读已提交,实现了四种隔离级别中的读已提交和串行化隔离级别

MySQL的默认隔离级别是可重复读,并且实现了所有四种隔离级别

MySQL事务处理的命令

# 查看MySQL是否自动提交事务
select @@autocommit;  # 0表示手动提交事务,1表示自动提交事务

# 设置事务提交方式为手动提交方式
set autocommit=0;

# 开启一个事务
BEGIN

#提交一个事务
COMMIT

# 回滚一个事务到初始的位置
ROLLBACK

# 设置一个名字为point1的保存点
SAVEPOINT point1; 

# 事务回滚到保存点point1,而不是回滚到初始状态
ROLLBACK TO point1;

# 设置事务的隔离级别
SET TX_ISOLATION='REPEATABLE-READ'; 

# 查询事务的隔离级别
SELECT @@ TX_ISOLATION;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:25:14  更:2022-05-05 11:26:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:50:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码