MySQL如何实现事务特性

MySQL如何实现事务特性

目录

事务有那些特性

原子性如何实现

持久性如何实现

隔离性与一致性如何实现

事务有那些特性

事务是由MySQL的引擎 InnoDB 来实现的

事务的特性 :

原子性 不存在中间状态,要么完成,要么不完成

一致性 事务操作前和操作后,数据满足完整性的约束,数据库保持一致的状态

隔离性 事务与事务之间互不干扰,允许多个并发事务同时对其数据进行读写修改

持久性 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

原子性如何实现

原子性是通过 undo log(回滚日志) 来保证的,那么什么是回滚日志

CREATE TABLE my_table (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(255) NOT NULL

);

如上,我创建一张表,表中含有 id 和 name 字段 在 数据存储中如下

每条记录都拥有着隐藏字段,包含事务id 和 undo 指针 (相当于版本链表) 如下

所以 当我们对数据操作成功时,保持在当前的undo指针 ,失败时,回到上一个 undo指针

持久性如何实现

如图

Buffer bool 如何管理缓存 请看MySQL如何改进LRU算法_mysql 改进 lru-CSDN博客

也就是说 redo log 文件是专门记录某个数据页更改了什么,这样即使是系统故障,也能保证数据完整

为什么已经有数据写入磁盘,还要redo log(重做日志)写入磁盘 这样多此一举呢?

写入 redo log(重做日志) 的方式使用了追加操作, 所以磁盘操作是顺序写,

而写入数据需要先找到写入位置,然后才写到磁盘,所以磁盘操作是随机写。

磁盘的「顺序写 」比「随机写」 高效的多,因此 redo log 写入磁盘的开销更小。

为什么是追加操作? 因为磁盘中有专属的Redo log 文件

隔离性与一致性如何实现

隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的; 一致性则是通过持久性+原子性+隔离性来保证;

MVCC 主要依赖 Read View(快照) 与 undo log(回滚日志实现)

undo log 示意如下:

Read View 示意如下

事务id划分

相关推荐

宝可梦图鉴
世界杯365体育

宝可梦图鉴

📅 10-08 👁️ 9405
如何通过有效管理提升足球球队纪律性与团队协作能力
“不是每一滴血都叫大姨妈”,女人要警惕阴道异常出血!
365永久激活怎么做到的

“不是每一滴血都叫大姨妈”,女人要警惕阴道异常出血!

📅 01-16 👁️ 4771
韩元兑人民币汇率
365bet不能注册

韩元兑人民币汇率

📅 06-13 👁️ 9051
众安保险一年交多少钱?一文读懂保费奥秘
365永久激活怎么做到的

众安保险一年交多少钱?一文读懂保费奥秘

📅 08-04 👁️ 6486
水滴是如何结冰的?—北师大孙刚教授研究组最新《自然·通讯》_手机网易网
热浪语音交友app
世界杯365体育

热浪语音交友app

📅 08-06 👁️ 499
秋天的苹果像什么拟人句  ( 树上的苹果红了,那么什么那么什么造句 )
‎FaceApp:完美人脸编辑器
365永久激活怎么做到的

‎FaceApp:完美人脸编辑器

📅 08-14 👁️ 9065