SQL> create table test(x int,y int) ;
表已创建。
SQL> insert into test values(1,1);
已创建 1 行。
SQL> insert into test values(2,2);
已创建 1 行。
SQL> insert into test values(3,3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> savepoint update_1;
保存点已创建。
SQL> update test set y=1000 where x=1;
已更新 1 行。
SQL> savepoint update_2;
保存点已创建。
SQL> update test set y=2000 where x=2;
已更新 1 行。
session B更新x=3的行,没有影响
SQL> update test set y=3000 where x=3;
已更新 1 行。
session B更新x=1的这一行,需要等待
SQL> update test set y=3000 where x=1;
session在等待。。。
session A回滚到savepoint update_2
SQL> rollback to savepoint update_2;
回退已完成。
session B还是在等待
session A回滚到savepoint update_1
SQL> rollback to savepoint update_1;
回退已完成。
session B还是在等待
此时按道理row=1这行的资源已经被释放了,为什么session B还是等待
session C来修改x=1这行,发现更新成功
SQL> update test set y=3333 where x=1;
已更新 1 行。
当session A 执行rollback后
session B更新成功
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22111412/viewspace-620364/ ,如需转载,请注明出处,否则将追究法律责任。