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条记录。
------解决方案--------------------
切勿自己把自己绕进去。