select for update與autocommit關係

redhouser發表於2014-01-06

select for update與autocommit關係

一直以為,autocommit on時,select for update不會對行加鎖。今天測試了一下,結果出乎意料。

ORACLE10R2/ORACLE11R2 sqlplus中:

create table t(x int);
insert into t values(1);
commit;

測試1:
--會話1
set autocommit on

select * from t for update;

--會話2
delete from t;
--會話被阻塞
--在會話1提交後,會話2繼續執行。


測試2:
--會話1
set autocommit on

select * from t for update;


--會話2
delete from t;
--會話被阻塞

--會話1
delete from t;
已刪除 1 行。
提交完成。


--會話2
已刪除0行。。

 


測試3:
--會話1
SQL> insert into t values(1);
已建立 1 行。
提交完成。

SQL> select * from t for update;
         X
----------
         1


--會話2
delete from t;
--會話被阻塞

--會話1
SQL> insert into t values(2);
已建立 1 行。
提交完成。

--會話2
已刪除 1 行。

SQL> select * from t;
         X
----------
         2
==>會話1新提交的2沒有被刪除。

 

 

看來需要勤動手,不能想當然。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-1067682/,如需轉載,請註明出處,否則將追究法律責任。

相關文章