支持的隔離級別及默認值
Oracle | MySQL | SQL Server | |
支持 |
|
|
|
默認 |
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