日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 隔离级别 知乎_TiDB 事务隔离级别

發布時間:2024/1/23 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 隔离级别 知乎_TiDB 事务隔离级别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TiDB 事務隔離級別

事務隔離級別是數據庫事務處理的基礎,ACID 中的 “I”,即 Isolation,指的就是事務的隔離性。

SQL-92 標準定義了 4 種隔離級別:讀未提交 (READ UNCOMMITTED)、讀已提交 (READ COMMITTED)、可重復讀 (REPEATABLE READ)、串行化 (SERIALIZABLE)。詳見下表:Isolation LevelDirty WriteDirty ReadFuzzy ReadPhantomREAD UNCOMMITTEDNot PossiblePossiblePossiblePossible

READ COMMITTEDNot PossibleNot possiblePossiblePossible

REPEATABLE READNot PossibleNot possibleNot possiblePossible

SERIALIZABLENot PossibleNot possibleNot possibleNot possible

TiDB 實現了快照隔離 (Snapshot Isolation, SI) 級別的一致性。為與 MySQL 保持一致,又稱其為“可重復讀”。該隔離級別不同于 ANSI 可重復讀隔離級別和 MySQL 可重復讀隔離級別。注意:

在 TiDB v3.0 中,事務的自動重試功能默認為禁用狀態。不建議開啟自動重試功能,因為可能導致事務隔離級別遭到破壞。更多關于事務自動重試的文檔說明,請參考事務重試。

從 TiDB v3.0.8 版本開始,新創建的 TiDB 集群會默認使用悲觀事務模式,悲觀事務中的當前讀(for update 讀)為不可重復讀,關于悲觀事務使用注意事項,請參考悲觀事務模式

可重復讀隔離級別 (Repeatable Read)

當事務隔離級別為可重復讀時,只能讀到該事務啟動時已經提交的其他事務修改的數據,未提交的數據或在事務啟動后其他事務提交的數據是不可見的。對于本事務而言,事務語句可以看到之前的語句做出的修改。

對于運行于不同節點的事務而言,不同事務啟動和提交的順序取決于從 PD 獲取時間戳的順序。

處于可重復讀隔離級別的事務不能并發的更新同一行,當事務提交時發現該行在該事務啟動后,已經被另一個已提交的事務更新過,那么該事務會回滾。示例如下:

create table t1(id int);

insert into t1 values(0);

start transaction; | start transaction;

select * from t1; | select * from t1;

update t1 set id=id+1; | update t1 set id=id+1; -- 如果使用悲觀事務,則后一個執行的 update 語句會等鎖,直到持有鎖的事務提交或者回滾釋放行鎖。

commit; |

| commit; -- 事務提交失敗,回滾。如果使用悲觀事務,可以提交成功。

與 ANSI 可重復讀隔離級別的區別

盡管名稱是可重復讀隔離級別,但是 TiDB 中可重復讀隔離級別和 ANSI 可重復隔離級別是不同的。按照 A Critique of ANSI SQL Isolation Levels 論文中的標準,TiDB 實現的是論文中的快照隔離級別。該隔離級別不會出現狹義上的幻讀 (A3),但不會阻止廣義上的幻讀 (P3),同時,SI 還會出現寫偏斜,而 ANSI 可重復讀隔離級別不會出現寫偏斜,會出現幻讀。

與 MySQL 可重復讀隔離級別的區別

MySQL 可重復讀隔離級別在更新時并不檢驗當前版本是否可見,也就是說,即使該行在事務啟動后被更新過,同樣可以繼續更新。這種情況在 TiDB 會導致事務回滾,導致事務最終失敗,而 MySQL 是可以更新成功的。MySQL 的可重復讀隔離級別并非 Snapshot 隔離級別,MySQL 可重復讀隔離級別的一致性要弱于 Snapshot 隔離級別,也弱于 TiDB 的可重復讀隔離級別。

讀已提交隔離級別 (Read Committed)

從 TiDB v4.0.0-beta 版本開始,TiDB 支持使用 Read Committed 隔離級別。由于歷史原因,當前主流數據庫的 Read Committed 隔離級別本質上都是 Oracle 定義的一致性讀隔離級別。TiDB 為了適應這一歷史原因,悲觀事務中的 Read Committed 隔離級別的實質行為也是一致性讀。注意:

Read Committed 隔離級別僅在悲觀事務模式下生效。在樂觀事務模式下設置事務隔離級別為 Read Committed 將不會生效,事務將仍舊使用可重復讀隔離級別。

與 MySQL Read Committed 隔離級別的區別

MySQL 的 Read Committed 隔離級別大部分符合一致性讀特性,但其中存在某些特例,如半一致性讀 (semi-consistent read),TiDB 沒有兼容這個特殊行為。

更多閱讀

總結

以上是生活随笔為你收集整理的mysql 隔离级别 知乎_TiDB 事务隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。