關於幻影讀現象的介紹可以看我的這篇文章:
在pl/sql中實現兩個處理資料庫的stored procedures並通過這兩個stored procedures觸發乙個幻影現象。
要模擬資料庫事務的併發處理,請使用標準pl/sql包dbms_lock中的pl/sql procedure sleep。
使用sql*plus的命令來展示執行結果
set echo on
set feedback on
set linesize 100
set pagesize 100
set serveroutput on
t1的操作如下:
set echo on
set feedback on
set linesize 100
set pagesize 100
set serveroutput on
create
orreplace
procedure phantom1
is num_ number;
begin
select
count(*
)into num_
from department;
dbms_output.put_line(
'the total number of rows in table department is: '
||num_)
;dbms_lock.sleep(10)
;select
count(*
)into num_
from department;
dbms_output.put_line(
'the total number of rows in table department is: '
||num_)
;end phantom1;
/execute phantom1;
t2的操作如下:
set echo on
set feedback on
set linesize 100
set pagesize 100
set serveroutput on
create
orreplace
procedure phantom2
is num_ number;
begin
insert
into department values(8
,'test'
,'00999'
, to_date(
'12/09/2019'
,'dd/mm/yyyy'))
;commit
;end phantom2;
/execute phantom2;
執行結果如下:
sql
>
execute phantom1;
the total number of
rows
intable department is: 7
the total number of
rows
intable department is: 8
幻影讀是因為在t1「phantom1」休眠10秒期間,t2「phantom2」將新行插入表中,從而使「phantom1」讀取一些「不可見」行,導致兩個「select」語句的結果顯示不同的數字。 資料庫系統之Row trigger專案練習
關於trigger觸發器的介紹可以看我的這篇文章 準備好後,儲存create trigger語句和在指令碼中全面測試觸發器的所有sql語句。全面的測試意味著觸發器必須拒絕違反一致性約束的sql語句,並接受不違反一致性約束的sql語句。如果sql語句沒有違反一致性約束,那麼觸發器必須不返回任何訊息。使...
資料庫系統之Deadlock專案練習
關於deadlock死鎖的介紹可以看我的這篇文章 使用pl sql在sample資料庫上進行事務操作,讓它們併發處理導致死鎖情況發生。要模擬資料庫事務的併發處理,請使用標準pl sql包dbms lock中的pl sql procedure sleep。使用sql plus的命令來展示執行結果 se...
資料庫讀現象
資料庫管理軟體的 讀現象 指的是當多個事務併發執行時,在讀取資料方面可能碰到的問題,包括又髒讀,不可重複讀和幻讀.ps 對於一些資料庫軟體會自帶相應的機制去解決髒讀,不可重複讀,幻讀等問題,因為這些自帶的機制,下述的一些實驗可能在某一資料庫管理軟體 的預設機制下並不成立,即我們並不能在所有資料庫管理...