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 事务 -> 正文阅读

[大数据]Mysql 事务

什么是事务

事务是用户对数据库的一系列操作 , 这些操作要么同时成功要么同时失败

事物的四大特性 ( ACID )?

?A (Atomicity) 原子性

事务里的所有操作要么全部做完 , 要么都不做

?C ( Consistency ) 一致性

数据库要一直处于一致的状态 , 简单来讲就是 : 某张表插入一条数据要在多个表中保持同步更新

?I ( Isolation ) 独立性

并发的事务之间不会相互影响 , 一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响

?D ( Durability ) 持久性

事务提交后 , 它所做的修改会永久的保存在数据库上

并发性和 ( Isolation ) 隔离性矛盾关系及带来的问题

脏读 , 不可重复读 , 幻读 都是数据库读一致性问题 , 使用数据库提供的隔离机制来解决

?

1. 脏读

当一个事务读取另一个事务尚未提交的改变 (update , insert , delete ) 时 , 产生了脏读

2. 不可重复度

同一查询在同一事务中多次进行, 但由于其他提交事务所做的修改和删除操作 , 导致每次查询返回不同的结果集 , 产生了不可重复度

3. 幻读

同一查询在同一事务中多次进行, 但由于其他提交事务所做的插入操作操作, 导致每次返回不同的结果集 , 产生了幻读

mysql 事务隔离级别

Read Uncommitted(读未提交)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读 ( Dirt Reads ) 该级别用的很少。

Read Committed(读已提交)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的), 一个事务只能看到已经提交事务所做的改变 , 换句话说就是事务提交之前对其余事务不可见。这种隔离级别也支持不可重复读 ( Non - Repeatable ) ,?同一事务中 , 某实例 A 正在处理数据时 , 其他的实例会有新的提交 , 修改了数据 , 导致前后两次 A 读取 (查询) 数据的结果不一致

?

Repeatable Read(可重复读)

这是 MySQL 的默认事务隔离级别,同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过在理论上,这会产生一个新的问题:幻读 ( phantom Reads )。幻读 : 当用户读取某一范围的数据行时另一个事务又在该范围内插入了新行,当用户再次读取该范围的数据行时,会发现这个新的数据 , 但是 InnoDB 引擎通过多版本并发控制( MVCC ) 解决了幻读的问题 , 所以不会造成幻读

?

Serializable( 可串行化 )

MySQL事务的最高隔离级别 ,多个事务对数据库表进行 dml 操作,其中一个隔离级别为可串行化 ,如果其他的事务修改了数据,但是没有提交,则这个级别为串行化的事务也无法进行dml 操作,就卡到那里了, 必须等待其他事务完成提交 , 此隔离为加锁的操作 , 相当于一边的事务拿到了锁但是还没有释放锁 , 则其他设置了此隔离级别的事务要排队等待

InnoDB 支持四个隔离级别 , 隔离级别越高 , 事务的并发度就越低 , 唯一的区别在于 , InnoDB 在可重复读的级别上解决了幻读的问题 , 也是 InnoDB 使用可重复读作为事务默认的隔离级别的原因

不可重复读和幻读的区别

SQL92 标准的官网 : http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

?

根据官网解读 :

不可重复是修改和删除,幻读是插入,所以,无论是脏读,还是不可重复读,还是幻读,它们都是数据库的读一致性的问题,都是在一个事务里面前后两次读取出现了不一致的情况。

如何解决幻读 :

InnoDB 实现的可重复读 , 通过 mvcc 机制 ( 多版本并发控制机制 )?避免了这种幻读现象

可以看到 SQL92 标准和 mysql 标准不一样

  1. MySOL 的 RR 级别的语义跟 SQL 标准的 RR 级别不同的
  2. 也就是说在Innodb引擎下MySQL里执行的事务,默认情况下不会发生脏读、不可重复读和幻读的问题事务的执行都是并行的

对比SQL规范和SQL规范落地的产品 mysql 数据库

1. SQL的规范

2. mysql 数据库,在 Innodb 引擎 + RR (可重复读) 隔离级别下,就能解决幻读,所以他是 mysql 的默认存储引擎。

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/4 12:23:58-

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