欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中的快照讀和當(dāng)前讀用法

 更新時間:2025年08月29日 10:14:02   作者:學(xué)亮編程手記  
快照讀不加鎖,讀事務(wù)開始時的數(shù)據(jù)快照,確保一致性;當(dāng)前讀加鎖,讀最新數(shù)據(jù),用于更新及鎖定操作,兩者在RC和RR隔離級別下表現(xiàn)不同,MVCC機(jī)制支持快照讀,而加鎖機(jī)制保障當(dāng)前讀的數(shù)據(jù)一致性

在 MySQL 的 InnoDB 存儲引擎中,快照讀(Snapshot Read)和當(dāng)前讀(Current Read)是兩種不同的數(shù)據(jù)讀取方式,它們的主要區(qū)別在于是否加鎖以及數(shù)據(jù)一致性。

下面詳細(xì)介紹這兩種讀取方式及其應(yīng)用場景。

快照讀(Snapshot Read)

快照讀是一種非加鎖的讀取方式,它讀取的是事務(wù)開始時的數(shù)據(jù)快照。

快照讀主要用于讀取數(shù)據(jù)的一致性視圖,確保在一個事務(wù)中多次讀取同一數(shù)據(jù)時結(jié)果一致。

特點(diǎn)

  1. 非加鎖:快照讀不會對數(shù)據(jù)加鎖,因此是非阻塞的。
  2. 一致性視圖:讀取的是事務(wù)開始時的數(shù)據(jù)快照,不會看到其他事務(wù)在此期間對數(shù)據(jù)的更改。
  3. 多版本并發(fā)控制(MVCC):通過 MVCC 機(jī)制,快照讀可以訪問數(shù)據(jù)的多個版本,確保事務(wù)隔離。

應(yīng)用場景

  • 讀提交(Read Committed, RC)隔離級別:每次 SELECT 語句都會生成一個新的快照,讀取的是當(dāng)前已提交的數(shù)據(jù)。
  • 可重復(fù)讀(Repeatable Read, RR)隔離級別:事務(wù)開始時生成一個快照,事務(wù)中的所有 SELECT 語句都會使用這個快照,確保事務(wù)中多次讀取同一數(shù)據(jù)時結(jié)果一致。

示例

-- 會話 1
START TRANSACTION;
SELECT * FROM t_user;  -- 快照讀,讀取事務(wù)開始時的數(shù)據(jù)快照

-- 會話 2
START TRANSACTION;
UPDATE t_user SET age = 35 WHERE name = 'Bob';
COMMIT;

-- 會話 1
SELECT * FROM t_user;  -- 快照讀,仍然讀取事務(wù)開始時的數(shù)據(jù)快照

當(dāng)前讀(Current Read)

當(dāng)前讀是一種加鎖的讀取方式,它讀取的是數(shù)據(jù)的最新版本,并且會對讀取的數(shù)據(jù)加鎖,以確保其他并發(fā)事務(wù)不能修改當(dāng)前記錄。

特點(diǎn)

  1. 加鎖:當(dāng)前讀會對讀取的數(shù)據(jù)加鎖,確保數(shù)據(jù)的一致性和完整性。
  2. 最新版本:讀取的是數(shù)據(jù)的最新版本,可以看到其他事務(wù)已經(jīng)提交的更改。
  3. 事務(wù)隔離:通過加鎖機(jī)制,確保事務(wù)的隔離性。

應(yīng)用場景

  • 讀提交(Read Committed, RC)隔離級別:當(dāng)前讀會讀取最新的已提交數(shù)據(jù)。
  • 可重復(fù)讀(Repeatable Read, RR)隔離級別:當(dāng)前讀會讀取最新的已提交數(shù)據(jù),并加鎖。
  • 更新操作UPDATE、DELETE、INSERT 等修改數(shù)據(jù)的操作會觸發(fā)當(dāng)前讀。
  • 鎖定讀SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE 會觸發(fā)當(dāng)前讀。

示例

-- 會話 1
START TRANSACTION;
SELECT * FROM t_user WHERE name = 'Bob' FOR UPDATE;  -- 當(dāng)前讀,讀取最新版本并加鎖

-- 會話 2
START TRANSACTION;
UPDATE t_user SET age = 35 WHERE name = 'Bob';  -- 被會話 1 的鎖阻塞
COMMIT;

-- 會話 1
UPDATE t_user SET age = 40 WHERE name = 'Bob';  -- 更新操作,讀取最新版本并加鎖
COMMIT;

總結(jié)

  • 快照讀:非加鎖的讀取方式,讀取的是事務(wù)開始時的數(shù)據(jù)快照,確保事務(wù)中多次讀取同一數(shù)據(jù)時結(jié)果一致。
  • 當(dāng)前讀:加鎖的讀取方式,讀取的是數(shù)據(jù)的最新版本,確保數(shù)據(jù)的一致性和完整性。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解析mysql中max_connections與max_user_connections的區(qū)別

    解析mysql中max_connections與max_user_connections的區(qū)別

    本篇文章是對mysql中max_connections與max_user_connections的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql技巧之select count的區(qū)別分析

    mysql技巧之select count的區(qū)別分析

    在工作過程中,時不時會有開發(fā)咨詢幾種select count()的區(qū)別,我總會告訴他們使用select count(*) 就好。下文我會展示幾種sql的執(zhí)行計劃來說明為啥是這樣。
    2013-08-08
  • Ubuntu 20.04 安裝和配置MySql5.7的詳細(xì)教程

    Ubuntu 20.04 安裝和配置MySql5.7的詳細(xì)教程

    這篇文章主要介紹了Ubuntu 20.04 安裝和配置MySql5.7的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • MySql 8.0.11安裝配置教程

    MySql 8.0.11安裝配置教程

    這篇文章給大家介紹了MySql 8.0.11安裝配置教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,感興趣的朋友一起看看吧
    2018-05-05
  • mysql數(shù)據(jù)庫數(shù)據(jù)批量插入的實(shí)現(xiàn)

    mysql數(shù)據(jù)庫數(shù)據(jù)批量插入的實(shí)現(xiàn)

    本文介紹了在MySQL數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)批量插入和性能測試的方法,包括使用Navicat批量插入數(shù)據(jù)、編寫SQL測試、索引的創(chuàng)建和使用、查詢測試以及提升SQL性能的優(yōu)化方法,感興趣的可以參考一下
    2024-11-11
  • MySQL分庫分表動態(tài)擴(kuò)容縮容方式

    MySQL分庫分表動態(tài)擴(kuò)容縮容方式

    MySQL分庫分表動態(tài)擴(kuò)容縮容方案,通過選擇數(shù)據(jù)庫中間件,設(shè)計分庫分表方案,進(jìn)行環(huán)境測試,完成單庫單表到分庫分表的遷移,實(shí)現(xiàn)雙寫方案,并上線提供服務(wù),擴(kuò)容時,通過增加數(shù)據(jù)庫服務(wù)器,呈倍數(shù)擴(kuò)容,由DBA負(fù)責(zé)庫表遷移,無需修改路由規(guī)則,即可基于新的資源提供服務(wù)
    2025-02-02
  • KubeSphere部署mysql的詳細(xì)步驟

    KubeSphere部署mysql的詳細(xì)步驟

    本文介紹了在KubeSphere中部署Mysql的詳細(xì)步驟,包括創(chuàng)建mysql配置、pvc掛載、工作負(fù)載、服務(wù),并測試數(shù)據(jù)庫連接,步驟詳盡,包括yaml配置和環(huán)境變量設(shè)置,特別強(qiáng)調(diào)了路徑一致性和外部訪問設(shè)置,還提到了使用NodePort模式解決自定義域名連接問題
    2024-10-10
  • mysql啟動時出現(xiàn)ERROR 2003 (HY000)問題的解決方法

    mysql啟動時出現(xiàn)ERROR 2003 (HY000)問題的解決方法

    這篇文章主要為大家詳細(xì)介紹了mysql啟動時出現(xiàn)ERROR 2003 (HY000問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • MySQL 請選擇合適的列

    MySQL 請選擇合適的列

    如果你的表結(jié)構(gòu)設(shè)計不良或你的索引設(shè)計不佳,那么請你優(yōu)化你的表結(jié)構(gòu)設(shè)計和給予合適的索引,這樣你的查詢性能就能提高幾個數(shù)量級?!獢?shù)據(jù)越大,索引的價值越能體現(xiàn)出來
    2012-05-05
  • MySQL8.0.32的安裝與配置超詳細(xì)圖文教程

    MySQL8.0.32的安裝與配置超詳細(xì)圖文教程

    這篇文章主要介紹了MySQL8.0.32的安裝與配置超詳細(xì)圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論