mysql的脏数据_数据库的脏数据问题
脏读dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。
不可重复的读non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。
虚读phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。
MYSQL事务隔离级别的认识
2010-08-06 10:27
在hibernate中如果要连续不间断的保存多个实体的实例,那么在我们保存第一个的时候,其实在数据库里是不存在数据的,即使用Session.flush()也无济于事,这到底是怎么回事呢?让我很是疑惑.......
在查阅了相关的资料后,原来是数据库对于事务的隔离级别的限制问题,而我原来的MYSQL数据库正好是不支持我上述操作的隔离级别。
1、在MYSQL中查询事务隔离级别:select @@tx_isolation;(tx其实就是transaction的缩写或者习惯缩写法)
我的结果是REPEATABLE-READ(即可重复读,稍后会引用专业结束文档)
2、修改MYSQL事务隔离界别:set transaction isolation level 目标隔离级别;
3、再次查询隔离级别进行检验是否已经成功修改。
这样在修改了隔离级别之后,在进行save()的时候,数据库中就会存在一些数据了,问题解决了。关于其他的数据库产品,思想都是一样的。
附加、官方的SQL事务隔离级别文档:
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
MySQL事务隔离级别详解
mysql的脏数据_数据库的脏数据问题相关推荐
- mysql表的组成_数据库中的数据表由什么组成?
在数据库中,数据表是由表名.表中的字段和表的记录三个部分组成的.在建立表之前都必须先设计它的结构,表结构描述了一个表的框架.设计表结构实际上就是定义组成一个表的字段个数,每个字段的名称.数据类型和长度 ...
- java查询数据库大批量数据_数据库有百万数据量的情况下,分页查询的方法及其优化方式...
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点. 下面简单说一下我知道的一些 ...
- mysql数据库每秒能写入多少条数据_数据库插入速度能有50W每秒吗
写入速度 MySQL每秒可以插入50w条记录吗? 带着疑问,我们一起看看mysql每秒可以插入多少条记录? 要回答这个问题,首先要考虑影响mysql插入速度的因素有哪些? 硬盘的速度,网卡的速度,写入 ...
- mysql 怎么同时删除两张表的数据库,mysql怎样删除多个表格数据库数据_数据库
mysql删除多个表格数据库数据的要领:在两个表之间竖立级联删除关联,完成删除一个表的数据时,同时删除另一个表中相干的数据,语句为[delete t1,t2 from t1,t2 where 前提]. ...
- mysql 查找相似数据_数据库存储引擎大揭秘,不看不知道这里面的骚操作可真多!...
吊打各种树这篇文章 带大家学习一遍数据结构中的各种树,对数据结构还不够熟悉的同学,那篇文章可以作为基础入门,我画了很多图理解起来不困难,建议回头先学习下那篇文章,更容易理解本文要讲的内容. 文章里有提 ...
- mysql表之间怎么联动_数据库之间的数据联动调整方法、装置及系统的制作方法...
数据库之间的数据联动调整方法.装置及系统的制作方法 [技术领域] [0001]本发明涉及一种信息处理技术领域,特别是涉及一种数据库之间的数据联动调整方法.装置及系统. [背景技术] [0002]随着信 ...
- mysql一个表中可以有几个主键_数据库的单个数据表中有几个主键?
数据库的单个数据表中只能有一个主键.数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性:主键主要是用与其他表的外键关联,以及本记录的修改与删除. 数据库的单 ...
- 以下 D 不是MYSQL的对象权限_数据库课后习题及答案
一.选择题[数据库系统的概述] 1. 数据库(DB).数据系统(DBS).数据管理系统(DBMS)之间关系是(C) A.DB包含DBS和DBMS B.DBMS包含DB和DBS C.DBS包含DB和DB ...
- MySQL删除空值语句_数据库语句sql 删除空记录
最简单删除SQL Server中所有数据的方法 原文:最简单删除SQL Server中所有数据的方法 最简单删除SQL Server中所有数据的方法 编写人:CC阿爸 2014-3-14 其实 ...
- 大数据_数据库(DBMS、DB、SQL )
目录 开篇 一.数据库 1.数据库(通常概念) 1.1 数据库简介 1.2 数据库的好处 1.3 数据库相关概念 2.DBMS数据库管理系统概述 2.1 具体概念 2.2 DBMS根据数据的保存格式( ...
最新文章
- 使用 WordPress 插件模板开发高质量插件
- Servlet体系结构
- 得推分类信息 v4.0 强大且好用的网站信息编辑管理工具
- 使用工具包自动生成向EBS系统注册表和字段的代码
- 使用fastJson把对象转字符串首字母大小写问题的解决
- 1031 质量环(深层搜索演习)
- 开机进入boot menu和application menu,无法开机
- mysql的随机查询
- Stellarium(虚拟天文馆)
- 第一单元:函数预备知识——邻域——01
- 从排序数组中删除重复项-Python-LeetCode
- linux版本的xmind怎么安装教程,linux安装xmind
- WriteError Resulting document after update is larger than 16777216
- QLineEdit setFocus失效问题
- 区块链:Neutral Dollar(NUSD)亚稳态的可视化
- 使用buildroot构建根文件系统遇到问题【已解决】
- 啊哈c语言 潦草的初步笔记(1)
- 如何用示波器测量串口
- 数字家庭五大网络应用方案全解析
- 申请域名绑定IP开通80端口记录