Abstract
介紹數據事務隔離級別. 以mysql操作爲例進行介紹
操作步驟
mysql -uroot -p // 連接
start transaction;
set global transaction isolation level xxxxlevel; // 設置全局
set session transaction isolation level xxxlevel; // 設置事務隔離級別
// do some ops
commit; // 提交事務
SELECT @@GLOBAL.transaction_isolation, @@SESSION.transaction_isolation; // 查看事務級別
事務隔離級別
可重複讀 Repeatable read
InnoDB默認. 基於事務開始的第一次讀的快照.
- 是否可以看見當前事務插入數據? YES
- 是否可以看見其他事務插入新的一行的未提交數據? NO
- 是否可以看見其他事務插入的已提交數據? NO
- 是否允許其他事務修改同一行數據? NO 無論當前事務是否提交. 會block後面嘗試修改的事務 如果當前未提交的話.
已提交讀 READ COMMITTED
只允許讀取已經提交的數據. 每次讀取時, 重新快照.
- 是否可以看見當前事務插入數據? YES
- 是否可以看見其他事務插入新的一行的未提交數據? NO
- 是否可以看見其他事務插入新的一行的已提交數據? NO
- 是否允許其他事務修改同一行數據? YES. 未提交時無法看見, 已提交可以看見.
未提交讀 READ UNCOMMITTED
允許讀取未提交的數據. 不被使用的. 不滿足ACID特性.
可串行化 Serializable
允許可串行化執行的級別. 比repeatable read更加嚴格的場景.
References