资讯专栏INFORMATION COLUMN

Mysql事务级别

QiuyueZhong / 1927人阅读

摘要:可使用事务级别来设置事务级别。相反的事务等级为则在客户端未提交时无法读取到客户端修改的数据。当事务等级为时,读取同一数据,结果是不同的。

2016/12/15

事务分为4个等级:
1.read uncommitted :无法避免脏读、不可重复读、虚读(幻读)
2.read committed :可以避免脏读
3.repeatable read :避免脏读、不可重复读
4.serializable :避免脏读、不可重复读、虚读

脏读指的是:
事务A读取到了事务B未提交的数据


不可重复读指的是:
在一个事务里读取同一个数据,2次的结果不一样(侧重点在于修改了数据)或者理解为事务A读取到了事务B已提交的更改数据


虚读指的是:事务A读取某些数据后,事务B删除了某些数据后,事务A重新读取这些数据时,发现某些数据莫名的消失了。或者是事务A读取某些数据后,事务B插入了一些数据,事务A重新读取这些数据时,发现莫名的多了些数据


Mysql的默认事务级别为:repeatable committed;

可使用 select @@tx_isolation; 查询事务的等级!

下面对4个等级进行介绍

首先声明表的类型,及表中的数据

create table test (id int , num int);

test表中的测试数据如下:

下面准备客户端A、客户端B。

可使用
set session transaction isolation level XXXXX(事务级别)`
来设置事务级别。

(1)测试 read uncommitted

客户端A: 将客户端A的事务等级设置为 read uncommitted

客户端B

客户端A

客户端B

客户端A

(2)测试 read committed (可避免脏读)

客户端A

客户端B

客户端A

客户端B

客户端A

但是却无法避免不可重复读,因为客户端A读到了2次数据。

(3)测试 repeatable read (避免脏读、不可重复读)

客户端A

客户端B

客户端A

客户端B

客户端A

客户端B

客户端A

客户端B

对比一下当事务等级为repeatable read 和 事务等级为 read committed;可以发现事务等级为read committed时,客户端A修改了数据,并且提交了,那么在客户端B不管提交还是未提交都可以读取到客户端A的数据。相反的事务等级为repeatable read 则在客户端B未提交时无法读取到客户端A修改的数据。
在回想一下不可重复读的定义:在一个事务里,读取同一数据,2次的结果不同。当事务等级为read committed时,读取同一数据,结果是不同的。而当事务等级为repeatable read,在客户端B事务还未提交时,读取同一数据的值是一样的。当客户端B提交事务后,便读取到了客户端A修改的数据

但是,却无法防止虚读现象,不过值得一提的是,事务等级设置为repeatable read 时,只有在某些情况下(至于什么情况下,我也不大懂)才会出现虚读现象(幻读现象),我自己测试了好久都没测出在该事务等级下出现虚读现象

(4)测试serializable

客户端A

客户端B

客户端A

客户端B

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46919.html

相关文章

  • 循环渐进 MySQL 事务隔离级别

    摘要:隔离级别事务隔离性的解释通常情况下,事务在提交之前对于其他事务不可见。数据库有四种隔离级别,当然也是如此。串行化串行化是最高隔离级别,强制事务串行执行。示例演示,客户端和设置隔离级别为可串行化。 本篇文章的重点在于总结MYSQL事务。 什么是事务 事务简言之就是一组 SQL 执行要么全部成功,要么全部失败。MYSQL 的事务在存储引擎层实现。 事务都有 ACID 特性: 原子性(At...

    W_BinaryTree 评论0 收藏0
  • mysql事务以及隔离级别

    摘要:事务以及隔离级别简介事务主要用于处理操作量大,复杂度高的数据。事务隔离分为不同级别,包括读未提交读提交可重复读和串行化。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为,它能够避免脏读取,而且具有较好的并发性能。 mysql事务以及隔离级别 1. 简介 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也...

    thursday 评论0 收藏0
  • MySQL的锁和事务隔离级别

    摘要:隔离级别越低,事务请求的锁越少或持锁时间越短,因此大部分数据库的默认隔离级别为。但是有相关的分析也指出,隔离级别的性能开销几乎一样,因此用户无须通过调整隔离级别来提高性能。这也是隔离级别的一大特性。 如今的互联网,开发一个大型的多人APP,你一定离不开数据库。而如何保证所有人能够高并发的进行读写一直是一个高难度的架构问题,先刨去高并发,保证一致性读写这个问题最常用的手段是事务,而实现一...

    littleGrow 评论0 收藏0
  • mysql(InnoDB)事务隔离级别(READ UNCOMMITTED) 与 锁

    摘要:所以可以得出隔离级别下读不会加任何锁。而写会加排他锁,并到事务结束之后释放。参考资料高性能官方文档慕课同学手记美团技术博客 前言 先针对自己以前错误的思维做个记录, 大家可以直接跳过 由于以前看到很多资料在谈到并发控制的时候, 都会提到用锁来控制并发, MySQL也不例外, 也有很多和锁相关的概念(留到后面会单独整理一篇笔记出来), 所以一提到高并发产生的问题, 我会不自觉地提出一个...

    dayday_up 评论0 收藏0
  • 【深入浅出事务】(3):事务的隔离级别(超详细)

    摘要:客户端设置手动提交,修改事务隔离级别为,并且开启事务一定要在开启事务前修改事务的隔离级别,不然当前还是保持着原来的事务隔离级别,直到当前事务提交。 本质 隔离级别定义了数据库系统中一个操作产生的影响什么时候以哪种方式可以对其他并发操作可见,隔离性是事务的ACID中的一个重要属性,核心是对锁的操作。 锁 从数据库系统角度 共享锁(Shared Lock) 读锁,保证数据只能读取,不能被修...

    zhangrxiang 评论0 收藏0
  • MySQL 数据库事务

    摘要:简介事务是一组原子性的查询或者说是一个独立的工作单元在事务内的语句要么全部执行成功要么全部执行失败事务的性质数据库事务拥有以下四个特性即性质原子性事务作为一个整体被执行包含在其中的对数据库的操作要么全部执行成功要么全部失败回滚对于一个事务来 简介 事务是一组原子性的 SQL 查询, 或者说是一个独立的工作单元. 在事务内的语句, 要么全部执行成功, 要么全部执行失败. 事务的 ACID...

    remcarpediem 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<