| |
|
开发:
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四种隔离级别理解 |
脏读 数据库隔离级别为读未提交的时候,可能发生脏读。读未提交指当会话 A 的数据库操作尚未commit时,会话 B 可以读取到这个未提交的数据。而此时如果会话 A 因为某些原因rollback了,那么会话 B 读取的数据就是错误的,也就是脏读。当隔离级别提高到读已提交时,则可以避免脏读。 不可重复读 简单的理解就是多次读取结果不一致,在会话 A 中多次相同的操作读取的数据是不一致的。比如,在会话 A 的两次读取操作直接,会话 B 对此数据进行了提交,那么会话 A 第一次读取的是之前的数据,第二次读取的是之后的数据。通过隔离级别可重复读来解决这个问题。 幻读 不可重复读的特殊场景,不可重复读主要是指在读取某条记录时发生,而幻读指的是范围。比如,会话 A 第一查询年龄大于 18 的人,发现没有数据,但当第二次进行查询时,却查询到了数据。在串行化的隔离级别下,不会发生幻读。 数据库锁 又称为 X 锁,写锁。一个事务对数据对象 O 加了 排他锁,就可以对 O 进行读取和更新。加锁期间其它事务不能对 O 加任何锁。 共享锁 又称为 S 锁,读锁。一个事务对数据对象 O 加了共享锁,可以对 O 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 O 加 共享锁,但是不能加排他锁。 隔离级别 如果一个事务已经开始写操作,那么其他事务则不允许同时进行写操作,但允许其他事务读此行数据。 写操作不加锁;读操作不加锁; 读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行(比如A事务分两次读取数据,B事务修改数据并提交,那A事务就会读到不同的结果)。 写操作加排他锁,保持到事务结束;读操作加锁共享锁,此次查询结束后立即释放共享锁,保证读取的数据都是已提交的数据。 读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。保证了在同一个事务中多次读取同样数据的结果是一样的。(读取数据在一次事务中不会发生改变,两个事务如果同时执行写操作,先写的会加锁,但是读取数据不限制,而且读到的数据仍然是原数据,不是被修改的数据,只有提交后修改的数据才能读到。两个事务同时修改一条数据,先执行的修改数据提交后,后事务再前者事务结果基础上再做修改。) 写操作加排他锁;读操作加共享锁,保持到事务结束。不妨碍其他事务读,但其它事务无法修改这些数据,无法锁住insert的数据(造成幻读);InnoDB中,SELECT、UPDATE、DELETE操作的不可重复读问题可以通过MVCC(多版本并发控制)来解决,但是INSERT操作的幻读问题需要通过MVCC + Next-Key Locks 来解决。 极大的降低数据库的并发能力。读用读锁,写用写锁,读锁和写锁互斥 写操作加排他锁;读操作加排他锁; 在InnoDB引擎中,对于索引的扫描,不仅锁住扫描到的索引,而且还锁住这些索引覆盖的范围,因此这个范围是内插入数据是不允许的。使用select @@tx_isolation;查询数据库的隔离级别。隔离级别越高(读未提交->读已提交->可重复读->串行化),越能保证数据的完整性和一致性,对并发性能的影响也会越大。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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/23 10:40:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |