| |
|
开发:
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的事务 |
简单谈谈MySQL的事务文章目录事务的基本特性和隔离级别基本特性 ACID事务的基本特性就是ACID ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:
我们需要根据事务的原子性、隔离性和持久性来保证数据的一致性 那么多个事务访问同一个资源时,如何保证资源的可见性呢,这里需要谈到隔离级别了 4个隔离级别
隔离级别中可能出现的问题
ACID是靠什么保证的
在innodb中有两个日志,undo log和redo log 在mysql server中有一个叫bin log的日志,也和事务有关 事务的成功不仅要在bin log中留下记录,而且也在redo log中写入commit提交状态的记录,表示事务已经完成提交 什么是MVCCMVCC,全称 读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据——版本链 MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存 MVCC 在 MySQL InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读 MVCC只在RC和RR两钟隔离级别下工作,即read commit不可重复读和repeatable read可重复读
一般我们认为MVCC有下面几个特点:
在InnoDB中,会在每行数据后添加两个额外的隐藏的字段来实现MVCC ,一条记录除了包括各个字段值,还包括了当前事务id(trx_id)和一个回滚指针(roll_pointer)。
注:一个事务的事务id在第一次insert/delete/update时生成 readview是什么其实Read View的最大作用是用来做可见性判断的 也就是说当某个事务在执行快照读的时候,对该记录创建一个Read View的视图,把它当作条件去判断当前事务能够看到哪个版本的数据 有可能读取到的是最新的数据,也有可能读取的是当前行记录的undolog中某个版本的数据 事务开启后会创建readview,用于维护当前活动的事务的id(活动=未提交的事务),并排序生成一个数组 readview中存储了当前Read View中最大的ID及最小的ID 之前提到了在数据的隐藏列中trx_id用于储存了事务id(获取的是最大的那个id,即最新的id),在读取数据时,会拿到这个事务id去和readview中的比对
MVCC是如何实现不可重复读和可重复读的读已提交(不可重复读)隔离级别下的事务在查询的开始会创建一个独立的readview 可重复读隔离级别下的事务在第一次读的时候生成一个readview,之后的读都是复用的这个readview 即:通过不同的readview生成策略来实现不同的隔离级别 mysql的原子性和持久性是如何实现的原子性:
持久性:
当前读、快照读,到底读的是什么当前读:读取的是数据的最新版本,总是能读取到最新的数据 快照读:读取的是历史版本的快照记录 为什么mysql中会有历史版本的记录呢? 原子性由undo log日志保证,它记录了需要回滚的日志信息,有时候可能会需要回滚,所以才将其记录了下来 在mysql默认的RR不可重复读隔离级别中,select读是快照读,读取的是历史版本的快照记录 而上锁或对表的操作是当前读
共享锁、排他锁
关于mysql锁其实还有很多,可以查看一下这个博客 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 7:43:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |