| |
|
开发:
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)原子性:事务是最小的执行单位,要么全成功,要么全失败。 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 隔离性:一个事务内部的操作及使用的数据对其他并发事务是隔离性的,多个事务并发执行时,一个事务的执行不影响其他事务的执行。 持续性:事务提交后,对数据的修改是永久性的,即使系统故障也不会丢失。 事务的并发问题,什么是脏读?幻读?不可重复读?脏读: 当前事务可以读到其他事务未提交的数据(脏数据) 不可重复读: 事务两次读同一个数据,数据不同。
幻读: 事务两次读同一条数据,条数不同。 例如有一个事务查询了几列(row)数据,而另一个事务却在此时插入了新的几列数据,之前的事务在接下来的查询中,就会发现有几列数据是它先前没有的。
事务的隔离级别读未提交: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读、不可重复读。 读已提交: 允许读取并发事务已经提交的数据,可以阻止脏读,但可能发生幻读或不可重复读。 可重复读: mysql默认隔离级别 。对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但仍可能发生幻读。 可串行化: 最高隔离级别,完全服从ACID。所有的事务依次逐个执行,事务之间不可能产生干扰,可以防止脏读、不可重复读、幻读。
如何实现ACID深入学习MySQL事务:ACID特性的实现原理 一致性:
隔离性: 各个隔离级别原理各不相同 持久性: MySQL事务的持久性是通过 隔离级别实现原理读未提交(READ UNCOMMITTED): 读不会加任何锁,写会加排它锁,并到事务结束之后释放。实例:写-写:阻塞 读已提交(READ COMMITTED): InnoDB在该隔离级别下写数据时,使用排它锁,读取数据不加锁而是使用了MVCC机制。在读已提交的级别下,都会通过MVCC获取当前数据的最新快照,不加任何锁,也无视任何锁(因为历史数据是构造出来的,身上不可能有锁)。 可重复读(REPEATABLE READ): 可重复读级别不同的是MVCC版本的生成时机。 即:一次事务中只在第一次select时生成版本,后续的查询都在这个版本上进行,从而实现可重复读。 原因:
解决方法:
可串行化(SERIALISABLE): 完全使用读锁和写锁保证数据一致性。针对同一数据的所有读写都变成互斥,可靠性大大提高,并发性大大降低。 参考
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 6:27:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |