事务的隔离性

事务的隔离性影响的是事务中对数据的可见性

4种隔离级别

READ UNCOMMITED

可以读取到其他事务未提交的数据,由于未提交的数据无法保证一致性(未来可能会回滚),因此这个隔离级别应用场景几乎没有。

READ COMMITED

可读取到其他事务提交后的数据。因此两次读取同一条记录,得到的数据可能不同。

应用场景:
对数据的实时性有要求,例如批量申请ID时,先查询当前maxId,然后通过乐观锁进行更新。

REPEATABLE READ

多次读取同一条记录,获取到一致的试图。

应用场景:
例如获取商品价格,下订单。在下订单的事务中读取价格,后续价格可能发生变化吗,但多次读取价格一致。

SERIALIZABLE

事务串行执行,已经是单线程了,就不存在可见性问题了。

快照读 vs 当前读

REPEATABLE READ 读取的是一致的快照
READ COMMITED 读取的是当前最新提交的数据

隔离级别 & 锁机制

除了SERIALIZABLE隔离级别,其他隔离级别下,普通的SELECT语句不会对记录加锁,而UPDATE语句则会对记录加锁。
例如,REPEATABLE READ隔离级别下:

事务1:

UPDATE `product` SET `price` = 1.5 WHERE `id` = 1;  #步骤1
SELECT `price` FROM `product` WHERE `id` = 1; #步骤3

事务2:

UPDATE `product` SET `price` = 1.5 WHERE `id` = 1; #步骤2
SELECT `price` FROM `product` WHERE `id` = 1; #步骤4

步骤2将阻塞,直到事务1提交。

事务内伪代码:

var transaction = new Transaction();
transaction.begin();
var recordLock = new RecordLock("order", 1);
recordLock.lock();
// update order whose id is 1
recordLock.unLock();
transaction.end();

UPDATE语句为何需要加锁:
是为了保持事务的一致性,加锁防止多个事务同时修改同一条记录。

事务4种隔离级别和应用场景相关推荐

  1. 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别

    http://www.cnblogs.com/adforce/archive/2011/04/20/2021929.html 一.脏读.不可重复读.幻读 1.脏读:脏读就是指当一个事务正在访问数据,并 ...

  2. MySql事务4种隔离级别以及悲观锁和乐观锁

    前言:在那鬼公司呆着发现自己居然把事务给搞明白了. 缘由:公司做的一个项目在进行首页内容显示的时候发现查询结果特别慢,有时候需要一到五分钟才能显示出结果.于是乎,我就顺着SQL语句查询慢的原因找了下去 ...

  3. 数据库事务4种隔离级别和7种传播行为

    一.数据库隔离级别:是在在数据库操作中,为了有效保证并发读取数据的正确性提出的. 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大.对于多数应用程序,可以优先考虑把数据库系统的隔 ...

  4. 数据库事务的四种隔离级别

    文章目录 1. 引言 2. 事务隔离级别 2.1 事务四种隔离级别 2.2 查看隔离级别 3. 脏读/幻读/不可重复读 3.1 脏读 3.2 不可重复读 3.3 幻读 4. 总结: 1. 引言 &qu ...

  5. MySQL事务的4种隔离级别

    文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...

  6. 事务的4种隔离级别,3大问题,脏读幻读不可重复读

    一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...

  7. 事务的四种隔离级别(一)Read uncommitted

    背景知识 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 之所以提出事务隔离级别,是因为同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会 ...

  8. 4种事务特性,5种隔离级别,7种传播行为

    去面试,面试官问,说一下spring事务的几种隔离级别,你项目用的是哪个.一脸茫然,之后...... 什么是事务? 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务 ...

  9. MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?

    1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...

最新文章

  1. rejection from Cambridge Machine Learning and Machine Intelligence MPhil
  2. 简单实例讲解linux的module模块编译步骤
  3. 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
  4. Ajax用证书调用,跨域的jQuery AJAX调用,带证书(Cross domain jQuery ajax call
  5. python print format
  6. WORD如何生成两个目录?
  7. Js 与 as 相互通信
  8. [转载] 基于Python, Selenium, Phantomjs无头浏览器访问页面
  9. Wayland 1.0 发布,图形服务器
  10. 计算机网络布线总结,网络综合布线实训总结
  11. 通俗易懂的讲解梯度,散度,旋度(有图很好理解)!!!
  12. PS改变证件照片背景颜色
  13. 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...
  14. php发送邮件email
  15. vbs在excel中打开html文件,从命令行使用VBScript从Excel外部运行Excel宏
  16. ubuntu云输入法ibus cloud pinyin
  17. 让孩子赢在起跑线。。。
  18. CentOS7 运维 - 磁盘管理与文件系统 | 超详细 | 附挂载教程及错误排查 | parted超大磁盘分区教程
  19. ubuntu系统配置中文输入法以及安装ros2,docker等开发环境
  20. JMX 入门(二)Java客户端

热门文章

  1. c# Sastoken方式访问微软blob帮助类
  2. 驱动学习1--USB设备驱动
  3. vue的模板语法 {{ }} 和 v- 指令
  4. 看了字节跳动月薪20K测试岗面试题,让我工作3年的测试工程师,很汗颜
  5. 关于vue中的$refs和$emit,以及props
  6. 计算机进制换算方法 ppt,计算机基础数制及其相互转换.ppt
  7. 算法刷题【洛谷U193902】橡皮泥
  8. 实战演练——拦截史迪仔电话
  9. mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
  10. 为何在2019年之后应用型本科开设ROS课程优势消逝