對TM鎖和TX鎖的簡單理解

yeahokay發表於2009-04-15

此文章為轉載,參考一下大家的看法

DML鎖包括table-level locks(TM)和Row-level locks(TX)


A table-level lock (TM type) is set for any DML transaction that modifies a table: INSERT, UPDATE, DELETE, SELECT...FOR UPDATE, or LOCK TABLE. The table lock prevents DDL operations that would conflict with the transaction.
--說明table lock(TM type)是防止和事務衝突的DDL操作,比如在insert時防止表被drop。

The row-level lock (TX type) is automatically acquired for each row modified by INSERT, UPDATE, DELETE, or SELECT...FOR UPDATE statements. The row-level lock ensures that no other user can modify the same row at the same time. Therefore, there is no risk that a user can modify a row that is being modified and not yet committed by another user.
--說明row-level lock(TX type)是為了確保其它使用者不可以在相同的時間修改相同的行。
TM 是物件鎖,表示可能在這個物件上做了什麼操作,還沒有結束,所以不允許ddl。update 0 條記錄,因為鎖定發生在真實修改發生之前,不知道會修改多少記錄,所以tm先產生了,結果卻沒有更新到任何記錄,也就沒使用回滾段,於是沒有tx產生

TX 是事務鎖,表示發起了一個事務,發起事務的判別標準,是根據 是否使用回滾段中作為評判標準的。
也就是說,TM表示你鎖定了系統中的一個物件,對於資料庫系統表來說 可以看作鎖定了 一個object的記錄別人不能對這個object的記錄進行 刪除和修改。而tx呢,是以回滾段的使用作為標準的,通常情況下,使用了回滾段就涉及到了記錄行,我們習慣上認為是記錄發生了變化(插入、修改、刪除)。如下,我們發起一個事務,沒有修改任何記錄,但是已經使用了回滾段,在回滾段事物表中就能找著記錄了。
exec dbms_output.put_line( dbms_transaction.local_transaction_id(true) );
然後檢視V$LOCK發現產生了TX鎖。
select * from v$lock;
[@more@]

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

相關文章