java面試題(16):Mysql一致性視圖是啥時候建立的

1 演示錯誤案例

先給大家來一個錯誤演示。

我們打開兩個會話窗口,默認情況下隔離級別是可重復讀,我們來看下:

首先在 A 會話中查看當前 user 表,查看完成后開啟事務:

?

可以看到id=3的數據sex是男。

接下來在 B 會話中修改 sex:

?

查看修改成功

?

接下來回到A會話查詢:

?

可以看到,A 會話的記錄也變了。完整測試流程如下:

一致性問題
A會話B會話
select? * from user;
begin;
update user set sex='女' where id = 3;
select * from user;

說好的可重復讀呢?

按理說,可重復讀就是別的事務對數據的操作不影響當前事務,但是上面這個案例似乎和我們理解的可重復讀有出入。

2 分析

不知道小伙伴們是否還記得可重復讀的特點:

用戶在另外一個事務中執行同條 SELECT 語句數次,結果總是相同的。

從這個角度來說,第一小節的案例似乎也沒有問題,因為我們在 A 會話中執行 SELECT 語句多次,查到的結果也都是相同的,sex 都是 女。

但是我們疑惑的是明明 B 會話的事務后開啟的,但是我們卻在 A 會話中讀取到了 B 的修改,這似乎不應該。

這里就涉及到一個問題,事務的一致性視圖是何時建立的?

事實上,我們執行的 begin 語句并不是一個事務真正的起點。執行完 begin 之后,接下來執行的第一句 SQL,事務才真正啟動。

我們稍微修改一下第一小節的案例:

一致性問題
A會話B會話
select? * from user;
begin;
select * from user;
update user set sex='男' where id = 3;(之前已經改成了女)
select * from user;

A會話結果如下:

?

B會話結果如下:

?

在 A 會話中,事務開啟之后,立馬先執行一條 SELECT 語句,然后再去 B 會話中做修改,修改完成后再回到 A 會話繼續查詢,此時發現 B 中的修改對 A 并不可見,這個結果也符合用戶在另外一個事務中執行同條 SELECT 語句數次,結果總是相同的。

如果我們想要執行完 begin 之后,就立馬開啟事務,那么可以通過如下方式來執行:

start transaction with consistent snapshot;

這個 SQL 執行完之后,事務立馬就啟動了。

接下來,回到第一小節的案例,我們修改一下事務啟動的命令:

一致性問題
A會話B會話
select? * from user;

start transaction with consistent snapshot;

update user set sex='女' where id = 3;
select * from user;

此時,A 會話中事務的查詢就看不見 B 中的修改了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38639.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38639.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8S系列一:概念入門

寫在前面 本文組織方式: K8S的架構、作用和目的。需要首先對K8S整體有所了解。 K8S是什么? 為什么是K8S? K8S怎么做? K8S的重要概念,即K8S的API對象。要學習和使用K8S必須知道和掌握的幾個對象。 Pod 實例 Volume 數…

php錯誤類型與處理

1 語法編譯錯誤,少了分號,這是系統觸發的錯誤,不需要我們去管。 2 錯誤類型有四種:error致命錯誤,代碼不會往下運行;warning:提醒錯誤,會往下運行,但是會有意想不到的結果…

【C++學習】STL容器——stack和queue

目錄 一、stack的介紹和使用 1.1 stack的介紹 1.2 stack的使用 1.3 stack的模擬實現 二、queue的介紹和使用 2.1 queue的介紹 2.2 queue的使用 2.3 queue的模擬實現 三、priority_queue的介紹和使用 3.1 priority_queue的介紹和使用 3.2 priority_queue的使用 3.4 p…

JVM---理解jvm之對象已死怎么判斷?

目錄 引用計數算法 什么是引用 可達性分析算法(用的最多的) 引用計數算法 定義:在對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加一;當引用失效時,計數器值就減一&#xff1…

國內外醫療器械政策法規網站集合

隨著醫療技術的不斷發展,醫療器械在現代醫療中扮演著重要的角色。為了確保醫療器械的安全性、有效性和質量,各國紛紛制定了一系列的政策法規來監管醫療器械的研發、生產、銷售和使用。這些政策法規的制定和實施對于保障公眾健康、促進醫療器械產業的健康…

docker--------介紹、常用命令,國內源配置

1 docker 國內源配置 # 鏡像:一堆文件 -目前從遠程倉庫下載的:https://hub.docker.com/ -鏡像有很多人提供:官方提供,第三方提供 -鏡像--》更新--》Tag不同版本 -centos:latest 最新 -docker pull 能找到…

舊版本docker未及時更新,導致更新/etc/docker/daemon.json配置文件出現docker重啟失敗

一、背景 安裝完docker和containerd之后,嘗試重啟docker的時候,報錯如下: systemctl restart dockerJob for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “…

學習ts(一)數據類型(基礎類型和任意類型)

運行 起步安裝 npm install typescript -g 運行tsc index.ts生成對應的js文件,然后使用node index.js執行js文件 為了方便運行還可以安裝插件,ts-node index.ts運行即可 npm i ts-node -g npm init -y npm i types/node -D基本數據類型 // 1.字符…

探索不同類型的代理服務器 (代理 IP、socks5 代理)及其在網絡安全與爬蟲中的應用

1. 代理服務器簡介 代理服務器是一臺充當中間人的服務器,它在客戶端與目標服務器之間傳遞網絡請求。代理服務器在不同層級上可以執行不同的任務,包括緩存、過濾、負載均衡和隱藏客戶端真實IP地址等。在網絡安全和爬蟲領域,代理服務器具有重要…

ARM(匯編指令)

.global _start _start:/*mov r0,#0x5mov r1,#0x6 bl LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0mov pc,lr*/ mov r0,#0x1mov r1,#0x0mov r2,#0x64bl Loop Loop:cmp r0,r2bhi stopadd r1,r1,r0add r0,r0,#0x01mov pc,lr stop:B stop.end

現有的vue3+ts+vite項目集成electron

效果圖 什么時Electron Electron是使用JavaScript,HTML和CSS構建跨平臺的桌面應用程序框架。 Electron兼容Mac、Windows和Linux,可以構建出三個平臺的應用程序。 現有的vue3項目集成Electron 安裝依賴 原來有一個vue3+ts+vite+pnpm的項目,其中sub-modules是子項目,web是…

Monge矩陣

Monge矩陣 對一個m*n的實數矩陣A&#xff0c;如果對所有i&#xff0c;j&#xff0c;k和l&#xff0c;1≤ i<k ≤ m和1≤ j<l ≤ n&#xff0c;有 A[i,j]A[k,l] ≤ A[i,l]A[k,j] 那么&#xff0c;此矩陣A為Monge矩陣。 換句話說&#xff0c;每當我們從矩陣中挑…

全面梳理Python下的NLP 庫

一、說明 Python 對自然語言處理庫有豐富的支持。從文本處理、標記化文本并確定其引理開始&#xff0c;到句法分析、解析文本并分配句法角色&#xff0c;再到語義處理&#xff0c;例如識別命名實體、情感分析和文檔分類&#xff0c;一切都由至少一個庫提供。那么&#xff0c;你…

地理數據的雙重呈現:GIS與數據可視化

前一篇文章帶大家了解了GIS與三維GIS的關系&#xff0c;本文就GIS話題帶大家一起探討一下GIS和數據可視化之間的關系。 GIS&#xff08;地理信息系統&#xff09;和數據可視化在地理信息科學領域扮演著重要的角色&#xff0c;它們之間密切相關且相互增強。GIS是一種用于采集、…

歐拉函數和最大公約數

分析&#xff1a;如果兩個數的最大公約數是一個質數p&#xff0c;那么這兩個數都除以p&#xff0c;得到的兩個數的最大公約數一定是1. 反證法&#xff1a;如果得到的兩個數的最大公約數不是1&#xff0c;那么把此時的最大公約數乘以上邊的最大公約數&#xff0c;得到的一定比上…

文件操作 和 IO

目錄 ?編輯一、認識文件 1、文件路徑 2、其它知識 二、Java 中操作文件 三、文件內容的讀寫 1、Reader 2、InputStream 3、輸出 一、認識文件 文件是在硬盤上存儲數據的一種方式&#xff0c;操作系統幫我們把硬盤的一些細節都封裝起來了 我們只需要了解文件相關的一些…

【前端 | CSS】滾動到底部加載,滾動監聽、懶加載

背景 在日常開發過程中&#xff0c;我們會遇到圖片懶加載的功能&#xff0c;基本原理是&#xff0c;滾動條滾動到底部后再次獲取數據進行渲染。 那怎么判斷滾動條是否滾動到底部呢&#xff1f;滾動條滾動到底部觸發時間的時機和方法又該怎樣定義&#xff1f; 針對以上問題我…

數據集成革新:去中心化微服務集群的無限潛能

在當今數據密集型的業務環境下&#xff0c;傳統的集中式架構已經難以滿足高可用性和高并發性的要求。而去中心化微服務集群則通過分散式的架構&#xff0c;將系統劃分為多個小型的、獨立部署的微服務單元&#xff0c;每個微服務負責特定的業務功能&#xff0c;實現了系統的高度…

centos系統kubeadm安裝K8S_v1.27.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)

kubeadm安裝K8S_v1.27.x容器使用docker 按照需要的文檔點擊這里下載 一.環境部署 1.1基礎環境配置 主機IP 主機名規劃 192.168.186.128 k8s-master01 192.168.186.129 k8s-node01 192.168.186.130 k8s-node02 1.2修改機器名稱 #永久修改主機名 hostnamectl set-hostname …

docker搭建opengrok環境

引言&#xff1a; 由于這幾天開始 http://aospxref.com/ 網站沒法用了。用習慣了opengrok的方式看AOSP的源碼&#xff0c;其他的在線查看源碼的網站用起來都不是很理想。所以考慮搭建一個環境。 首先網上看了下opengrok的環境搭建的方式&#xff0c;最終還是采用docker的方…