文档章节

一个幻象读的例子

猪刚烈
 猪刚烈
发布于 2014/10/12 11:41
字数 323
阅读 5
收藏 0
点赞 0
评论 0

      近期工作中遇到一个BUG报重复提交会生成两条同样的记录。因为这种数据的一个字段在一定范围内不允许重名(并不是全表数据不允许重名因此这个字段没有unique约束),所以每次保存记录时会先检查有没有重名,如果没有重名才会保存。但是在重复提交过程中若操作间隔足够短就会出现以下情况:
      第一个事务首先查询,结果没有重名,接着第二个事务也开始查询,结果也没有重名,然后第一个事务插入数据并提交,接着第二个事务也将同样一份数据插入,因为没有unique约束,因此也插入成功。假设第二个事务在提交之前再查询是否有重名就会发现已经存在重名了,这样第一次查询就是典型的“幻象读”。幻象读的标准描述如下:


      杜绝幻象读必须使用最高的隔离级别,即事务串行化。

 

NOTE:如无特别设定,程序总是使用数据库的默认隔离级别。mysql的默认级别是第三级:REPEATABLE-READ。

© 著作权归作者所有

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
【伸手】数据库并发问题的简单复现例子(java)?

数据库事务并发带来的问题有:更新丢失、脏读、不可重复读、幻象读。 有没有这些问题的简单复现例子?

itwriter ⋅ 2017/03/26 ⋅ 1

MySQL InnoDB存储引擎的事务隔离级别

我们知道,在关系数据库标准中有四个事务隔离级别: 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的...

miyae ⋅ 2014/03/25 ⋅ 0

Oracle Data Concurrency and Consistency一之Oracle事务隔离级别

越来越多的接触并发、吞吐量、锁、一致性等等问题,很多时候也经常听到一些说系统性能太低,加并发提高性能,这往往是泛泛之谈。 把握不清楚问题的症结、问题源,并发很有可能不仅对性能无益...

hawk682808 ⋅ 2013/11/27 ⋅ 0

数据库事务及锁机制介绍

事务介绍 因为一直使用Spring这种声明式的事务管理,一直以为事务的主要作用是对一个业务方法中多次执行数据库操作的最终提交。近期重新了解了下事务,有了新的认识。数据库事务除了有异常回...

EveryDayNew ⋅ 2016/01/13 ⋅ 0

mysql事务隔离级别 脏读,不可重复读,幻象读

1.事务里一些有问题的读取:脏读,不可重复读,幻象读 脏读 (dirty read)事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取更新后的行,然后T1执行回滚操作,取消了刚才所...

rotiwen ⋅ 2013/11/20 ⋅ 0

数据库事务基础

一、概述 1.事务概念 在数据库中,事务是指一组逻辑工作单元执行的一系列动作,要么都执行,要么都不执行。 2.事务ACID特性 原子性(Atomic)原子性是指组成一个事务的多个数据库操作是一个不...

小米米儿小 ⋅ 2015/08/28 ⋅ 0

关系型数据库的四大事物隔离级别

在关系数据库标准中有四个事务隔离级别 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracl...

suyajun001 ⋅ 2017/07/23 ⋅ 0

事务隔离级别-REPEATABLE-READ && 间隙锁

事务隔离级别-REPEATABLE-READ && 间隙锁 表结构 Session A Session B Session A 我们在Session A里执行当前读的select...for update操作,那这条sql语句时如何加锁的呢?看下图, 这幅图中有...

秋风醉了 ⋅ 2015/09/01 ⋅ 0

Spring 的事务隔离级别和传播特性

今天被人问了一个Oracle 关于事务的简单问题,结果自己一时间竟然说错了 死了死了的,只能说自己没有用心去理解这个问题。 找了一下别人的解释贴这里更直观 ------------------------------...

triankg ⋅ 2013/07/13 ⋅ 1

WFeB全球免费图书馆 World Free eBook

WFeB全球免费图书馆 World Free eBook 全球免费开放的电子图书馆(https://universsky.github.io/) 道之所在,虽千万人吾往矣;义之所当,千金散尽不后悔;情之所钟,世俗礼法如粪土;兴之所...

东海陈光剑 ⋅ 2016/11/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 40分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部