8.2 快照讀,當前讀
當前讀
這些是當前讀:
select...lock in share mode (就這個是共享鎖)
select...for update
update , delete , insert
當前讀, 就是加了鎖
讀取的是最新版本, 並且對讀取的記錄加鎖, 不讓其他事務同時去改(其他事務要阻塞下)
快照讀:
普通select時是,
基於提升併發的考慮,
基於MVCC多版本併發控制(行鎖的變種)
改進成不加鎖了(除非是隔離級別是序列),
讀的是檢視, 不是最新資料
如果先select 再update 可能會看到幻行, 因為select讀的可能是老的版本, 有其他事務插入或者刪除過行,所以和更新讀到的最新版本行數不一樣
讀已提交
select (快照讀)
select...lock in share mode(當前讀)
結果是一樣的
因為快照讀, 採納的是這之前提交的最後版本
當前讀 是讀的最新版本
是同一版本
重複讀
select (快照讀): 快照讀的版本
select...lock in share mode(當前讀) : 最新版本
結果可能不同, 後者可能更新
即使有過當前讀, 再快照讀, 也還是讀快照
undo log:
每行除了資料外 還有
DB_TRX_ID: 最後更新的事務id(update,delete,insert)
DB_ROLL_PTR: 回滾指標, 指向前一個版本 , 組成 undo 鏈
DB_ROW_ID: 行id的值 自增
- insert undo log: 只在事務回滾時需要, 事務提交就可以刪掉了
- update undo log: 包括update 和 delete , 回滾和快照讀 都需要
開始只有最下面一行,
事務1 先排他鎖鎖住它(當前讀,讀到最新資料然後獨佔),複製到第二行,更新欄位, 把自己的id填入DB_TRX_ID, 讓DB_ROLL_PTR 指向原資料
事務2也有一樣, 產生的第三行
相關文章
- mysql snapshot read快照讀及current read當前讀與鎖lock之一MySql
- MySQL事務(4種事務隔離級別、髒寫、髒讀、不可重複讀、幻讀、當前讀、快照讀、MVCC、事務指標監控)MySqlMVC指標
- MySQL學習之MVCC原理和當前讀MySqlMVC
- [AHK]讀取演示PPT當前頁的備註
- MapReduce和Spark讀取HBase快照表Spark
- Mysql可重複讀(1) —— 快照何時建立MySql
- Clion中C++使用當前目錄讀取檔案失敗C++
- 8. transaction id,row trx_id,undo log,檢視陣列,當前讀陣列
- 【讀書】我在北大當教授
- 使用MySQL 8.2透明讀/寫分離,代價幾何?(譯文)MySql
- 資料庫系列:RR和RC下,快照讀的區別資料庫
- PostgreSQL 原始碼解讀(117)- MVCC#2(獲取快照#2)SQL原始碼MVCC#
- PostgreSQL 原始碼解讀(116)- MVCC#1(獲取快照#1)SQL原始碼MVCC#
- 小專案想當大Boss? 你該讀讀《孫子兵法》
- 案例分享:Qt modbusTcp除錯工具(讀寫Byte、Int、DInt、Real、DReal)(當前v1.0.0)QTTCP除錯
- Linux當前當前程式Linux
- 適當調大arraysize減少邏輯讀
- php 獲取當前域名和當前協議PHP協議
- 排名前10的免費 RSS 閱讀器
- PHP-擴充套件-安裝前讀我PHP套件
- vue重新整理當前頁面或者當前元件Vue元件
- 新興趨勢:解讀當下,洞悉未來
- 2.1.4 當前容器
- windows powershell 如何讀取大檔案前10行Windows
- 髒讀,幻讀,不可重複讀
- 當你扛不住的時候就讀一遍
- 小專案想當大Boss? 你該讀讀《孫子兵法》 | 京東雲技術團隊
- 藍凌OA前臺任意檔案讀取漏洞利用
- 髒讀、幻讀和不可重複讀
- Linux基礎——BClinux8.2 排查vmcore異常當機問題Linux
- 如何用js獲取當前時間和ip地址以及當前城市JS
- 髒讀、幻讀和不可重複讀?為啥?
- 什麼是髒讀,不可重複讀,幻讀
- JavaScript 獲取當前月份JavaScript
- 獲取當前時間
- 釋出前準備工作指南:解讀遊戲上線前的重要環節遊戲
- jquery/js透過當前URL對當前欄目連結高亮顯示jQueryJS
- 8.2 ELMo