关于脏数据
比如说,有两个用户A,B同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行,然后A回滚了事务,即修改被取消了,那么,B读取到的那一行数据就是脏数据
上面这句话正确吗?如果事物A未提交,事物B能读到A所修改的数据吗?
如何判断A,B 是否属于同一个事物?
在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?
希望各位能详细回答一下,小弟不胜感激。
Q:如果事物A未提交,事物B能读到A所修改的数据吗?
A:当然看不到
Q:如何判断A,B 是否属于同一个事物?
A:这个应该不用判断吧,两次连接 就是属于两个“事物”
Q:在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?
A:因为这个是一个“事物”中,例如你在plsql developer中开启另一个窗口,就可以查到了。
“A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行”,因为A没有提交,B读取的是A修改前的数据。没有提交的数据只有自己能查询到,其他用户是查看不到的。
建议你多看看这方面的资料吧
楼主首先要弄清楚 事务是为了保证数据完整性的
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据
但是 在A事务中查询的话 查到的都是操作之后的数据
这个很好理解 你开两个sql窗口 在一个里边给一个表insert一条数据 不提交 紧接着select 有数据 但是去另一个sql窗口select 就没有数据
这个要看数据库工作在哪个隔离级别.只有在read uncommitted的时候才会出现脏读.
而oracle只支持read committed和read serialization两种,所以不会出现你说的情况.
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
引用:
+1
去查下隔离级别和脏读,不可重复读,幻读等现象的关系就明白了.
Oracle 如何设置事务隔离级别去让 B 也看到 A 正在改的那个数据?
该回复于2011-04-14 10:49:26被版主删除
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
没有提交的数据只有自己看得到,并没有update到数据库。
因为他只是在内存中修改,并没有被持久化
该回复于2012-07-31 14:23:34被版主删除
在A对数据进行写操作的时候,这时候这部分数据在缓冲区有一个备份数据。没有提交的话,是不会改变的,脏数据是提交但是没有保存到磁盘的数据。
比如说,有两个用户A,B同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行,然后A回滚了事务,即修改被取消了,那么,B读取到的那一行数据就是脏数据
上面这句话正确吗?如果事物A未提交,事物B能读到A所修改的数据吗?
如何判断A,B 是否属于同一个事物?
在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?
希望各位能详细回答一下,小弟不胜感激。
Q:如果事物A未提交,事物B能读到A所修改的数据吗?
A:当然看不到
Q:如何判断A,B 是否属于同一个事物?
A:这个应该不用判断吧,两次连接 就是属于两个“事物”
Q:在PL/SQL 中先删一条数据(没有提交)紧接着在查刚才那条数据是查不到的,既然没有提交为什么会查不到呢?
A:因为这个是一个“事物”中,例如你在plsql developer中开启另一个窗口,就可以查到了。
“A开始了一个事务,修改了某行,但还未提交,这个时候,B开始另一个事务,读取了该行”,因为A没有提交,B读取的是A修改前的数据。没有提交的数据只有自己能查询到,其他用户是查看不到的。
建议你多看看这方面的资料吧
楼主首先要弄清楚 事务是为了保证数据完整性的
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据
但是 在A事务中查询的话 查到的都是操作之后的数据
这个很好理解 你开两个sql窗口 在一个里边给一个表insert一条数据 不提交 紧接着select 有数据 但是去另一个sql窗口select 就没有数据
这个要看数据库工作在哪个隔离级别.只有在read uncommitted的时候才会出现脏读.
而oracle只支持read committed和read serialization两种,所以不会出现你说的情况.
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
引用:
楼主首先要弄清楚 事务是为了保证数据完整性的
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据
但是 在A事务中查询的话 查到的都是操作之后的数据
这个很好理解 你开两个sql窗口 在一个里边给一个表insert一条数据 不提交 紧接着select 有数据 但是去另一个sql窗口select 就没有数据
+1
去查下隔离级别和脏读,不可重复读,幻读等现象的关系就明白了.
Oracle 如何设置事务隔离级别去让 B 也看到 A 正在改的那个数据?
该回复于2011-04-14 10:49:26被版主删除
A没有提交之前,B只能看到行修改之前的数据,这是undo表空间的作用之一:维护数据的一致性.
没有提交的数据只有自己看得到,并没有update到数据库。
因为他只是在内存中修改,并没有被持久化
该回复于2012-07-31 14:23:34被版主删除
在A对数据进行写操作的时候,这时候这部分数据在缓冲区有一个备份数据。没有提交的话,是不会改变的,脏数据是提交但是没有保存到磁盘的数据。
相关推荐
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性是指当多个用户并发访问数据库时,比如...
1. **原子性(Atomicity)**:事务中的每个操作视为一个不可分割的整体,如果其中一个操作失败,整个事务都会回滚,保证数据库的状态不受影响。 2. **一致性(Consistency)**:事务执行前后,数据库都处于一致状态...
例如,事务A持有资源X并请求资源Y,而事务B持有资源Y并请求资源X,这时就形成了一个循环依赖,导致双方都无法继续执行。解决死锁的方法包括预防策略(如预分配资源顺序)、检测和恢复策略(如死锁超时和死锁检测算法...
数据库并发操作是数据库管理系统在处理多个用户同时访问和操作数据时的一种机制。在多用户环境中,比如Web应用程序或企业级系统,多个用户可能同时请求读取或修改同一份数据库资源,这时就需要有效的并发控制策略来...
在并发操作中,丢失更新问题是指两个事务对同一数据进行读写操作,可能导致某个事务的修改被另一个事务覆盖,这是并发控制需要避免的问题。 数据库系统还面临不同类型的故障,如事务故障、系统故障和介质故障。系统...
分布式数据库中的事务管理和恢复是数据库领域的一个重要主题,特别是在2022年及以后的高并发、大数据量的业务环境中。分布式事务旨在处理跨越多个地理位置、网络连接的数据库节点的数据操作,确保数据的一致性和完整...
- 这个级别保证了在一个事务内部,多次读取同一数据会得到相同的结果,避免了“不可重复读”。但是,由于其他事务可以在这期间插入数据,所以在事务的两次查询间隔内,可能会出现新的记录,导致“幻象读”。 4. **...
《数据库系统概论》第11章主要探讨的是并发控制这一关键主题,它在多用户数据库系统中至关重要,因为这样的系统允许多个用户或事务同时访问和操作数据。并发控制的目标是确保在多用户环境中,数据的完整性、一致性和...
在C#编程环境中,开发人员经常需要处理与数据库交互的任务,比如从数据库中获取数据并显示在用户界面,以及根据用户界面的修改实时更新数据库。本教程将详细讲解如何使用C#来访问SQL数据库,将数据展示在...
- 读请求B继续从数据库读取数据,此时写请求A尚未完成对数据库的修改,因此读取到了旧数据,并将其放入缓存中。 由此可见,在这种情况下,尽管写请求A先于读请求B发生,但由于网络延迟等因素的影响,读请求B可能会...
丢失修改是指两个事务读取同一数据并修改,最终结果覆盖了其中一个事务的修改。例如,在飞机订票系统中,如果两个售票点并发销售同一航班的机票,可能会导致实际售出的机票数量少于记录的数量。 不可重复读是指事务...
视图可以提高数据查询效率,提供数据的逻辑独立性,但视图的定义语句通常不包含数据更改语句,所以选项B正确。 关系模式中的插入异常是指在数据库的某些情况下,合法的数据无法被插入到数据库中,这通常是由于数据...
乐观锁假设事务之间不会发生冲突,因此在事务开始时不加锁,但在提交时检查数据是否被其他事务修改过。如果发现有冲突,则回滚事务。乐观锁通常通过记录版本号或时间戳来实现。在.NET中,实现乐观锁的常见方式包括...
丢失修改是指两个事务读取同一数据并修改,导致其中一个事务的修改被覆盖;不可重复读是指事务在不同时间读取同一数据时得到不同结果;读“脏”数据则是事务读取了未提交的修改,这些数据可能在后续被撤销。 封锁...
在隐式事务中,每条数据操作语句默认就是一个事务,而显式事务则需要通过BEGIN TRANSACTION和COMMIT或ROLLBACK来明确事务的开始和结束。例如,在ISO事务处理模型中,事务的开始是隐含的,而在Transact-SQL中,事务的...
并发控制是数据库管理系统中至关重要的一个方面,它确保在多用户环境下,事务的执行不会相互干扰,从而保证数据的一致性和完整性。并发控制的主要目的是防止并发操作带来的数据不一致性问题,如丢失修改、不可重复读...
事务是一个逻辑工作单元,包含了数据库中的一系列操作,这些操作要么全部成功,要么全部失败,从而保证了数据库的状态不受错误影响。事务必须满足四个基本属性,即ACID原则: 1. 原子性(Atomicity):事务中的每...
6. **脏数据块与热数据块**:脏数据块是内存中已经修改但尚未写入数据库的数据,热数据块则是经常需要修改的数据。这两个概念涉及到缓冲区缓存管理和数据库性能优化。 7. **LRU策略**:LRU(Least Recently Used,...
- 幻影数据行(Phantom Rows):一个事务两次读取数据时,由于其他事务的插入操作,出现了额外的“幻影”数据行。 为了保证并发操作的正确性和数据库的一致性,数据库系统采用以下几种并发控制协议: - 两段锁协议...
丢失修改是指一个事务的修改被另一个事务的修改覆盖,导致前者的修改丢失;不可重复读则是在同一事务中,两次读取同一数据得到不同结果;而读脏数据则是事务读取到未提交的修改,如果该事务被回滚,那么读取到的数据...