程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SYBASE事務

編輯:SyBase綜合文章
本篇文章描述了數據庫事務隔離級對鎖的影響,通過對比事務隔離級0和1,理解鎖與髒讀的關系。

實驗內容:分別設置0和1級隔離級,執行兩個不同但又有相關的事務。本實驗環境如下:

1、 有權訪問用戶數據庫(在此是aca_database)和對數據庫表有修改和查詢權限。

2、 數據庫中有表auths,包含salary列(數據類型是money),有一定數據量(在此有1萬行)。

步驟:

1、 如在同一台機器,可分別執行兩次“SQL Advantage”,分別用合法帳號登錄,准備各自執行一個事務。

2、 在各自界面打開用戶數據庫aca_database,設置隔離級為1(此亦為缺省值):

set transaction isolation level 1,查看當前隔離級別用select @@isolation

3、 執行第一個事務的前兩句,暫不執行後面的提交或回滾。

begin transaction

update auths set salary=salary+100

commit transaction

(rollback transaction)

4、 執行第二個事務 select sum(salary) from auths

5、 第一個事務正常執行結束,但只在內存緩沖區完成修改,事務並沒有真正結束,相應也不釋放鎖,第二個事務處於等待狀態。可執行sp_lock和sp_who命令查看。

6、 執行第3步中的提交或回滾命令,第二個事務得到執行。

7、 改變事務隔離級為0,重復執行3-4步。第一個事務沒有任何變化,第二個事務很快出來根據第一個事務修改數據而成的結果,似乎在執行響應上並不受第一個事務的影響。

8、 重復第6步結束。

通過上面的實驗我們知道:

1、 隔離級0時事務允許髒讀,隔離級1時事務不允許髒讀,而只是等待前一個修改事務真正結束並釋放鎖。

2、 隔離級為0時,如果在修改事務的最後是回滾操作,則查詢讀事務將不能讀到正確的數據。

3、 在確信事務中沒有回滾操作的可能,並要求更高的執行效率和並行性,只有這時可考慮設置隔離級為0。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved