关于脏数据比如说,有两个用户A,B同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时...
2015-05-13 11:04
701 查看
关于脏数据
比如说,有两个用户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同时操作数据库,A开始了一个事务,修改了某行,但还未提交,这个时
- 在一个修改了数据的事务被提交之前,Oracle进行了以下操作
- C#中关于在一个数据库同时修改2个数据的语法使用!
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- 关于 xpo 修改字段值,提交成功后,却没有保存到数据库中的一个原因。
- 怎样将数据同时插入两个表中(事物开始后,插入语句后,自动增长列有没有生成一个值,有的话,值怎样获得)
- Spring控制多张数据表同时提交的事务操作
- 关于“ORA-02041: 客户数据库未开始一个事务处理”
- 关于Excel操作编写的一个软件设计构思案例[连载] --如何打开Excel文件,获取需要列的数据显示到表格内做修改
- 将数据库常用的操作(连接数据库,获得所有数据,获得一条记录,获得一列记录,获得一条索引数组,获得一条关联数组)都给封装到db.class.php里面,谁需要谁继承这个类 注意:提交封装的类文件
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- 提交数据为两个值为一个数组,提交数据库
- 利用jquery把一个表单的数据同时提交给两个页面
- C#.NET执行Oracle DBLink关于“ORA-02041: 客户数据库未开始一个事务处理”
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?
- 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
- C++实现线程同步的几种方式 线程同步是指同一进程中的多个线程互相协调工作从而达到一致性。之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多
- oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录