最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀)

 更新時(shí)間:2022年08月24日 16:04:02   作者:哇~是小菜呀  
這篇文章主要介紹了Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀),文章通告InnoDB展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

因?yàn)镮nnoDB是支持事務(wù)的,所以只對(duì)InnoDB的事務(wù)進(jìn)行討論。

一、事務(wù)

(一)什么是事務(wù)

事務(wù)是由一組SQL語(yǔ)句組成的邏輯處理單元,是一組不可分割的操作序列。

(二)事務(wù)的特征

  • 原子性(Actomicity):事務(wù)是一個(gè)原子操作單元,其對(duì)數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行
  • 一致性(Consistent):在事務(wù)開始和完成時(shí),數(shù)據(jù)都必須保持一致狀態(tài)。
  • 隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供一定的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的“獨(dú)立”環(huán)境執(zhí)行。
  • 持久性(Durable):事務(wù)完成之后,它對(duì)于數(shù)據(jù)的修改是永久性的,即使出現(xiàn)系統(tǒng)故障也能夠保持。

(三)手動(dòng)開啟、提交、回滾事務(wù)

-- 開啟事務(wù)
start transaction;
update user_count set balance = balance + 20 where id = 1;
update user_count set balance = balance - 20 where id =2;
-- 回滾事務(wù)
rollback;
-- 提交事務(wù)
commit;

注意:在回滾和提交之前,數(shù)據(jù)庫(kù)中的數(shù)據(jù)都是操作的緩存中的數(shù)據(jù),而不是數(shù)據(jù)庫(kù)中的真實(shí)數(shù)據(jù)。

二、臟讀、幻讀、可重復(fù)讀

(一)臟讀 read uncommit

讀取到了未提交的數(shù)據(jù)。

臟讀對(duì)應(yīng)的是read uncommitted讀未提交的事務(wù)隔離級(jí)別,即從緩存中讀取數(shù)據(jù),而不是讀取已經(jīng)持久化的數(shù)據(jù)。

事務(wù)B在select的時(shí)候,讀取到了被事務(wù)A更新在緩存的數(shù)據(jù),但是該數(shù)據(jù)沒有真正的持久化到數(shù)據(jù)庫(kù)中,一旦事務(wù)A會(huì)滾,事務(wù)B就會(huì)讀到錯(cuò)誤的臟數(shù)據(jù)。

(二)不可重復(fù)讀 unrepeatable

一個(gè)事務(wù)在讀取某些數(shù)據(jù)已經(jīng)發(fā)生了改變、或某些記錄已經(jīng)被刪除了!這種現(xiàn)象叫做“不可重復(fù)讀”。

不可重復(fù)讀產(chǎn)生的場(chǎng)景對(duì)應(yīng)的是read committed讀已提交的事務(wù)隔離級(jí)別,即事務(wù)讀取的數(shù)據(jù)都是已經(jīng)完成持久化的數(shù)據(jù)。

(三)幻讀

同一事務(wù)內(nèi),同樣的篩選條件,查詢出來的數(shù)據(jù)條數(shù)發(fā)生了變化,(另一個(gè)事務(wù)搶到CPU進(jìn)行了刪除或者插入條件),這種現(xiàn)象就稱為“幻讀” 。
幻讀產(chǎn)生的場(chǎng)景對(duì)應(yīng)的是repeatable read可重復(fù)讀的事務(wù)隔離級(jí)別,事務(wù)讀取的數(shù)據(jù)都是已經(jīng)完成持久化的數(shù)據(jù),并且為事務(wù)在修改的數(shù)據(jù)增加行鎖,但是沒有表鎖。

(四)不可重復(fù)讀和幻讀的區(qū)別

不可重復(fù)讀針對(duì)的是同一條數(shù)據(jù),讀的是別的事務(wù)修改之前的樣子,一旦事務(wù)的隔離級(jí)別使用了unrepeatable read,加上行鎖,就可以避免產(chǎn)生。
幻讀針對(duì)的是滿足篩選條件的一批數(shù)據(jù),因?yàn)樾墟i不能阻止插入和刪除數(shù)據(jù),所以會(huì)導(dǎo)致查詢到的條數(shù)是錯(cuò)誤的,使用serializable可以避免。

三、事務(wù)的隔離級(jí)別

 臟讀不可重復(fù)讀幻讀
read uncommitted
read committed 
repeatable read  
serializable   

設(shè)置表的隔離級(jí)別sql語(yǔ)言如下:

-- 查詢數(shù)據(jù)庫(kù)當(dāng)前的隔離級(jí)別
select @@transaction_isolation
-- 讀未提交
set session transaction isolation level read uncommitted;
-- 讀已提交
set session transaction isolation level read committed;
-- 不可重復(fù)讀
set session transaction isolation level repeatable read;
-- 序列化(串行執(zhí)行)
set session transaction isolation level serializable;

(一)讀未提交read uncommitted

讀緩存里面的數(shù)據(jù),風(fēng)險(xiǎn)最高但是允許的并發(fā)最多

(二)讀已提交read committed

讀持久化的數(shù)據(jù),不讀緩存的數(shù)據(jù),不加鎖

(三)不可重復(fù)讀 read repeatable

讀可持久化的數(shù)據(jù)的數(shù)據(jù),并且添加行級(jí)鎖(一個(gè)事務(wù)在修改某行數(shù)據(jù)的時(shí)候,別的事務(wù)阻塞等待提交才能讀到)

(四)序列化 serializable

最安全但是并發(fā)效率最低,讀持久化數(shù)據(jù),并且加表鎖,如果事務(wù)并發(fā)的多,需要一直阻塞,不建議使用。

事務(wù)的隔離級(jí)別從低到高依次是 read uncommitted , read committed, repeatable read , serializable 。隔離級(jí)別越低,越能支持高并發(fā)的數(shù)據(jù)操作,與此同時(shí),也會(huì)帶來越高的并發(fā)風(fēng)險(xiǎn),Mysql數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別是repeatable read 。

到此這篇關(guān)于Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀)的文章就介紹到這了,更多相關(guān)Mysql事務(wù)隔離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)

    MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn)

    本文主要介紹了MySQL每天自動(dòng)增加分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 解讀SQL中GROUP BY和HAVING子句中使用NULL條件問題

    解讀SQL中GROUP BY和HAVING子句中使用NULL條件問題

    在使用SQL進(jìn)行數(shù)據(jù)查詢時(shí),可能會(huì)遇到查詢結(jié)果為空的情況,這通常與GROUP BY和HAVING子句的使用有關(guān),尤其是在處理包含NULL值的字段時(shí),當(dāng)使用GROUP BY進(jìn)行數(shù)據(jù)分組,并在HAVING子句中直接判斷字段是否為NULL時(shí)
    2024-10-10
  • MySQL三種打開方式詳細(xì)圖文教程

    MySQL三種打開方式詳細(xì)圖文教程

    MySQL有多種打開方式,具體取決于你的操作系統(tǒng)和安裝方式,下面這篇文章主要給大家介紹了關(guān)于MySQL三種打開方式的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • MySQL中EXPLAIN的/基本使用及字段詳解

    MySQL中EXPLAIN的/基本使用及字段詳解

    EXPLAIN命令是MySQL中用于解析SQL查詢語(yǔ)句的工具,幫助開發(fā)者理解MySQL如何執(zhí)行SQL語(yǔ)句,通過EXPLAIN可以查看SQL執(zhí)行的詳細(xì)信息,如表的讀取順序、使用的索引、數(shù)據(jù)讀取操作的類型等,這篇文章主要介紹了MySQL中EXPLAIN的/基本使用及字段詳解,需要的朋友可以參考下
    2024-09-09
  • MySQL之PXC集群搭建的方法步驟

    MySQL之PXC集群搭建的方法步驟

    PXC 是一套 MySQL 高可用集群解決方案,本文主要介紹了MySQL之PXC集群搭建的方法步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • mysql日志文件之undo?log和redo?log

    mysql日志文件之undo?log和redo?log

    MySQL日志記錄了MySQL數(shù)據(jù)庫(kù)日常操作和錯(cuò)誤信息,MySQL有不同類型的日志文件,下面這篇文章主要給大家介紹了關(guān)于mysql日志文件之undo?log和redo?log的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • docker下mysql 8.0.20 安裝配置方法圖文教程

    docker下mysql 8.0.20 安裝配置方法圖文教程

    這篇文章主要介紹了docker下mysql 8.0.20 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • MySQL半同步復(fù)制原理配置與介紹詳解

    MySQL半同步復(fù)制原理配置與介紹詳解

    這篇文章主要介紹了MySQL半同步復(fù)制原理配置與介紹詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • MySQL主從復(fù)制原理詳情

    MySQL主從復(fù)制原理詳情

    這篇文章主要介紹了MySQL主從復(fù)制原理詳情,MySQL?主從復(fù)制是指數(shù)據(jù)可以從一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)器主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹。感興趣的小伙伴可以參考一下
    2022-06-06
  • MariaDB(Mysql分支)my.cnf配置文件中文注釋版

    MariaDB(Mysql分支)my.cnf配置文件中文注釋版

    這篇文章主要介紹了MariaDB my.cnf配置文件中文注釋版,MariaDB是Mysql的一個(gè)分支,完全兼容Mysql,需要的朋友可以參考下
    2014-06-06

最新評(píng)論

泰和县| 谢通门县| 杂多县| 麻江县| 肥城市| 中山市| 富阳市| 饶河县| 大冶市| 库尔勒市| 兰考县| 滨州市| 凤山县| 广州市| 清水县| 沙田区| 汉源县| 阳东县| 凌源市| 资溪县| 如皋市| 谷城县| 临颍县| 叙永县| 卫辉市| 永兴县| 涿鹿县| 祁东县| 高密市| 左云县| 三都| 噶尔县| 大庆市| 龙州县| 曲阳县| 宕昌县| 灌南县| 蓬安县| 连山| 宜良县| 房产|