Oracle|MySQL|SQL Server的事務隔離級別

支持的隔離級別及默認值

  Oracle MySQL SQL Server

支持

  • Read Committed提交讀

  • Serializable可串行化

  • Read Uncommitted未提交讀

  • Read Committed提交讀

  • Repeatable Read可重複讀

  • Serializable可串行化

  • Read Uncommitted未提交讀

  • Read Committed提交讀

  • Repeatable Read可重複讀

  • Serializable可串行化

  • Snapshot快照

  • Read Committed Snapshot已經提交讀隔離

默認

Read Commit提交讀

Repeatable Read可重複讀

Read Commit提交讀

 

設置語句

Oracle

-- 設置提交讀
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 設置可串行化,SYS用戶不支持該操作
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

MySQL

MySQL的設置可以分爲系統級別(GLOBAL)和會話級別(SESSION)

-- 未提交讀
SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- 提交讀
SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 可重複讀
SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 可串行化
SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SQL Server

-- 未提交讀
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- 提交讀
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 可重複讀
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 可串行化
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 快照
ALTER DATABASE TEST SET ALLOW_SNAPSHOT_ISOLATION ON;
-- 已經提交讀隔離
ALTER DATABASE TEST SET READ_COMMITTED_SNAPSHOT ON;

查詢語句

Oracle

SELECT S.SID,S.SERIAL#,
      CASE BITAND(T.FLAG,POWER(2,28)) 
      WHEN 0 THEN 'READ COMMITTED' ELSE 'SERIALIZABLE' END AS ISOLATION_LEVEL
FROM V$TRANSACTION T 
JOIN V$SESSION S
ON T.ADDR = S.TADDR AND S.SID = SYS_CONTEXT('USERENV','SID')

MySQL

-- 查詢當前會話的事務隔離級別
SELECT @@TX_ISOLATION;
-- 查詢數據庫系統的事務隔離級別
SELECT @@GLOBAL.TX_ISOLATION;
-- 兩者同時查詢
SELECT @@TX_ISOLATION AS current_session_isolation_level,
    @@GLOBAL.TX_ISOLATION as global_isolation_level

SQL Server

DBCC USEROPTIONS

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章