資料庫系統之幻影讀現象專案練習

2021-10-16 01:26:24 字數 1747 閱讀 6988

關於幻影讀現象的介紹可以看我的這篇文章:

在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 對於一些資料庫軟體會自帶相應的機制去解決髒讀,不可重複讀,幻讀等問題,因為這些自帶的機制,下述的一些實驗可能在某一資料庫管理軟體 的預設機制下並不成立,即我們並不能在所有資料庫管理...