专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Oracle技术

数据库怎么实现事物间数据完整性-帖

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
数据库如何实现事物间数据完整性--求助帖
create table XX_DDL_LOCK_TEST
(
  id   INTEGER,
  name VARCHAR2(20)
)
insert into xx_ddl_lock_test values (1001,'NO01');
insert into xx_ddl_lock_test values (1002,'NO02');
commit

事务一
insert into xx_ddl_lock_test values (1002,'NO02'); 未提交
事务二
select * from xx_ddl_lock_test for update;
删除1002这一行,提交

之后事务一进行提交,结果如下
SQL> select * from xx_ddl_lock_test;
                                     ID NAME
--------------------------------------- --------------------
                                   1001 NO01
                                   1002 NO02
有哪位可以大致说下oracle是如何实现这种事物间的数据完整性和一致性的呢?
------解决方案--------------------
引用:
create table XX_DDL_LOCK_TEST
(
  id   INTEGER,
  name VARCHAR2(20)
)
insert into xx_ddl_lock_test values (1001,'NO01');
insert into xx_ddl_lock_test values (1002,'NO02');
commit

事务一
insert into xx_ddl_lock_test values (1002,'NO02'); 未提交
事务二
select * from xx_ddl_lock_test for update;
删除1002这一行,提交

之后事务一进行提交,结果如下
SQL> select * from xx_ddl_lock_test;
                                     ID NAME
--------------------------------------- --------------------
                                   1001 NO01
                                   1002 NO02
有哪位可以大致说下oracle是如何实现这种事物间的数据完整性和一致性的呢?

这个结果没问题啊。
事务1没有提交,对于其他session来说是不可见的(由于没有提交,还没有真正的同步到表里),但是在同一个session中,新插入的记录是可见的。
事务2删除记录并提交,此时表中只有一条记录。
提交事务1,将缓存中的记录提交到表里,此时对于每一个session来说这一条记录都可见,所以当你提交过后又有2条记录。
------解决方案--------------------
切勿自己把自己绕进去。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: