关键是你的系统是如何定义垃圾数据的,常见的有如下:
1比如系统只要查询当年内的数据,那么去年及更早的数据就是垃圾数据。
2系统升级或改造后,某些功能被去除,部分相关的表可能永远也不会再用到,那么那些表的数据可以算垃圾数据。
3错误的数据,比如不小心插入的错误数据,或者BUG导致错误数据,这些数据通常都是垃圾数据。
4缓存表的数据,某些表只是作为增加性能额外添加的(例如先同步到缓存表再作二次处理的情况),这些缓存表通常都是一次性用途,用完之后,就变成垃圾数据。
5辅助表的数据,有时为了开发或测试方便添加的一些跟业务无关的表,这些表的数据可以算是垃圾数据。
PS:即使是垃圾数据,也不排除有利用的一天。
脏读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中如果要连续不间断的保存多个实体的实例,那么在我们保存第一个的时候,其实在数据库里是不存在数据的,即使用Sessionflush()也无济于事,这到底是怎么回事呢?让我很是疑惑
在查阅了相关的资料后,原来是数据库对于事务的隔离级别的限制问题,而我原来的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(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
就是事务完整性受到了破坏
一般现在主流的数据库比如oracle,db2都会通过锁机制来减少脏数据的产生
就是不同session之间由于某个seesion对表进行 *** 作而影响其他session的查询结果
以上就是关于数据库中什么是垃圾数据全部的内容,包括:数据库中什么是垃圾数据、Access数据库中如何避免脏数据、数据库中用户对‘脏数据’的读出是什么规则收到了破坏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)