国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySql】MySql事務(wù)隔離級別與一致性

這篇具有很好參考價(jià)值的文章主要介紹了【MySql】MySql事務(wù)隔離級別與一致性。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

理解隔離性

MySQL服務(wù)可能會同時(shí)被多個客戶端進(jìn)程(線程)訪問,訪問的方式以事務(wù)方式進(jìn)行

一個事務(wù)可能由多條SQL構(gòu)成,也就意味著,任何一個事務(wù),都有執(zhí)行前,執(zhí)行中,執(zhí)行后的階段。而所謂的原子性,其實(shí)就是讓用戶層,要么看到執(zhí)行前,要么看到執(zhí)行后。執(zhí)行中出現(xiàn)問題,可以隨時(shí)回滾。所以單個事務(wù),對用戶表現(xiàn)出來的特性,就是原子性

所有的事務(wù)都有執(zhí)行過程,那么在多個事務(wù)各自執(zhí)行多個SQL的時(shí)候,就還是有可能會出現(xiàn)互相影響的情況。比如:多個事務(wù)同時(shí)訪問同一張表,甚至同一行數(shù)據(jù)。 舉個例子,如你媽媽給你說:要么別學(xué),要學(xué)就學(xué)到最好。至于你怎么學(xué),中間有什么困難,你媽媽不關(guān)心。那么你的學(xué)習(xí),對你媽媽來講,就是原子的。那么你學(xué)習(xí)過程中,很容易受別人干擾,此時(shí),就需要將你的學(xué)習(xí)隔離開,保證你的學(xué)習(xí)環(huán)境是健康的。

數(shù)據(jù)庫中,為了保證事務(wù)執(zhí)行過程中盡量不受干擾,就有了一個重要特征:隔離性 ;允許事務(wù)受不同程度的干擾,就有了一種重要特征:隔離級別

在事務(wù)場景中,隔離是必要的。是運(yùn)行中的事務(wù)進(jìn)行互相隔離。在事務(wù)運(yùn)行中,“不會”出現(xiàn)互相干擾,這就是隔離性;根據(jù)影響程度的不同,隔離級別。

隔離級別

讀未提交Read Uncommitted在該隔離級別,所有的事務(wù)都可以看到其他事務(wù)沒有提交的執(zhí)行結(jié)果。(實(shí)際中不可能使用這種隔離級別),但是相當(dāng)于沒有任何隔離性,也會有很多并發(fā)問題,如臟讀,幻讀,不可重復(fù)度等,我們前面一開始所用的就是這個隔離性,方便演示。

讀提交Read Committed:該隔離級別是大多數(shù)數(shù)據(jù)庫的默認(rèn)的隔離級別(不是MySQL默認(rèn)的)。它滿足了隔離的簡單定義:一個事務(wù)只能看到其他的已經(jīng)提交的事務(wù)所做的改變。這種隔離級別會引起不可重復(fù)讀,即一個事務(wù)執(zhí)行時(shí),如果多次select,可能得到不同的結(jié)果

可重復(fù)度Repeatable Read:這是MySQL默認(rèn)的隔離級別,它確保同一個事務(wù),在執(zhí)行中,多次讀取操作數(shù)據(jù)時(shí),會看到同樣的數(shù)據(jù)行。但是會有幻讀問題。

串行化這是事務(wù)的最高隔離級別,它通過強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決了幻讀的問題。它在每個讀的數(shù)據(jù)上面加上了共享鎖,但是可能會導(dǎo)致超時(shí)和鎖競爭(這種隔離級別太極端,實(shí)際生產(chǎn)中基本不使用)

查看與設(shè)置隔離性

  • 查看
-- 查看全局隔離級別
select @@global.tx_isolation;


-- 查看會話全局隔離級別
select @@session.tx_ioslation;

-- 默認(rèn)
select @@tx_isolation;
  • 設(shè)置

設(shè)置session級別:

-- 設(shè)置當(dāng)前會話 or 全局隔離級別語法
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

【MySql】MySql事務(wù)隔離級別與一致性

【MySql】MySql事務(wù)隔離級別與一致性

設(shè)置會話級別只會影響session以及默認(rèn)的會話級別。

設(shè)置全局級別:

【MySql】MySql事務(wù)隔離級別與一致性

如果退出重新登錄mysql,session也會改變:

【MySql】MySql事務(wù)隔離級別與一致性

隔離級別一般保持一致。

讀未提交Read Uncommitted

設(shè)置讀未提交:

set global transaction isolation level read uncommitted;

設(shè)置完畢后記得退出mysql重新登錄。才會生效

一端啟動事務(wù)同時(shí)插入和更新數(shù)據(jù)。但是沒有提交事務(wù):

【MySql】MySql事務(wù)隔離級別與一致性

但是另一端也啟動事務(wù),也能看到插入和更新后的數(shù)據(jù):讀到了沒有提交的數(shù)據(jù),這就是讀未提交:

【MySql】MySql事務(wù)隔離級別與一致性

讀未提交:一個事務(wù)正在運(yùn)行,另一個事務(wù)也啟動起來,對數(shù)據(jù)做增刪改操作,如果隔離級別是讀未提交,增刪改會被立馬看到,這就是讀未提交,沒有提交就會被看到。

所以讀未提交幾乎是沒有加鎖,雖然效率高,但是問題太多,不建議采用。

一個事務(wù)在執(zhí)行中,讀到另一個執(zhí)行中事務(wù)的更新(或其他操作)但是未commit的數(shù)據(jù),這種現(xiàn)象叫做臟讀

臟讀現(xiàn)象是一個特別不合理的現(xiàn)象,一直能查到別人沒有提交的數(shù)據(jù)。

讀提交Read Committed

設(shè)置讀提交的隔離級別

set global transaction isolation  level read committed;

一端啟動事務(wù)進(jìn)行插入和更新數(shù)據(jù):

【MySql】MySql事務(wù)隔離級別與一致性

另一端查看表的數(shù)據(jù):沒有發(fā)生變化

【MySql】MySql事務(wù)隔離級別與一致性

當(dāng)一端的事務(wù)提交之后:

【MySql】MySql事務(wù)隔離級別與一致性

另一端事務(wù)在沒有結(jié)束的情況下(commit之后也能看到),也能看到變化了:

【MySql】MySql事務(wù)隔離級別與一致性

并發(fā)執(zhí)行事務(wù),一個事務(wù)對數(shù)據(jù)做了修改,操作期間另一個看不到,而一旦提交了,就能看到了。這就是讀提交的隔離級別。

多個事務(wù)并發(fā)執(zhí)行時(shí),此時(shí)還在當(dāng)前事務(wù)中,并未commit,那么就造成了,同一個事務(wù)內(nèi),同樣的讀取,在不同的時(shí)間段(依舊還在事務(wù)操作中)讀取到了不同的值,這種現(xiàn)象叫做不可重復(fù)讀(non reapeatable read),比如我們上面的圖片就是,在一個事務(wù)運(yùn)行的內(nèi)部還未commit,但是同樣的讀取卻讀取到了不同的值。

讀提交出現(xiàn)的不可重復(fù)讀是有問題的:比如在一個事務(wù)中,按照薪資等級分成不同的等級,然后分發(fā)年終獎品,我們查找tom這個名字,此時(shí)已經(jīng)找到了,但是此時(shí)另一個事務(wù)對tom這個名字的薪資進(jìn)行了修改,而剛開始的事務(wù)還沒有提交,同一個事務(wù)中,同樣的讀取,此時(shí)tom這個人就需要分發(fā)兩個獎品,這是不合理的,一個人只能按照薪資等級分發(fā)到一個獎品。所以我們不想讓一個事務(wù)運(yùn)行中讀到另一個事務(wù)的提交。

可重復(fù)讀 Repeatable Read

解決兩個并發(fā)的事務(wù),一方提交,一方增刪改,提交也不會影響到另一方。

設(shè)置事務(wù)隔離級別:

set global transaction isolation level repeatable read;

此時(shí)的事務(wù)隔離級別是可重復(fù)度的。

現(xiàn)在其中一個事務(wù)中對數(shù)據(jù)進(jìn)行增刪改,同時(shí)提交:

【MySql】MySql事務(wù)隔離級別與一致性

另一個事務(wù)啟動后沒有提交查看表的數(shù)據(jù):

【MySql】MySql事務(wù)隔離級別與一致性

可以看到,在拎一個終端中,事務(wù)無論什么時(shí)候進(jìn)行查找,看到的結(jié)果都是一致的,這叫做可重復(fù)讀!

當(dāng)事務(wù)結(jié)束掉自然就能看到變化了:

【MySql】MySql事務(wù)隔離級別與一致性

多次查看,發(fā)現(xiàn)終端A在對應(yīng)事務(wù)中insert的數(shù)據(jù),在終端B的事務(wù)周期中,也沒有什么影響,也符合可重復(fù)的特點(diǎn)。

但是,一般的數(shù)據(jù)庫在可重復(fù)讀情況的時(shí)候,無法屏蔽其他事務(wù)insert的數(shù)據(jù) ,因?yàn)楦綦x性是對數(shù)據(jù)做加鎖完成的,而insert待插入的數(shù)據(jù)因?yàn)椴⒉淮嬖?,那么一般加鎖無法屏蔽這類問題,會造成雖然大部分內(nèi)容是可重復(fù)讀的,但是insert的數(shù)據(jù)在可重復(fù)讀情況被讀取出來,導(dǎo)致多次查找時(shí),會多查找出來新的記錄,就如同產(chǎn)生了幻覺。這種現(xiàn)象,叫做幻讀.很明顯,MySQL在RR級別的時(shí)候,是解決了幻讀問題的。

串行化serializable

對所有操作全部加鎖,事務(wù)進(jìn)行串行化,不是sql,不會有問題,但是只要串行化,效率很低,幾乎完全不會被采用

設(shè)置隔離級別串行化:

set global transaction isolation level serializable;
select * from account; -- 兩個讀取不會串行化,共享鎖

查找時(shí)沒有阻塞:

【MySql】MySql事務(wù)隔離級別與一致性

【MySql】MySql事務(wù)隔離級別與一致性

【MySql】MySql事務(wù)隔離級別與一致性

【MySql】MySql事務(wù)隔離級別與一致性

總結(jié):

其中隔離級別越嚴(yán)格,安全性越高,但數(shù)據(jù)庫的并發(fā)性能也就越低,往往需要在兩者之間找一個平衡點(diǎn)。
不可重復(fù)讀的重點(diǎn)是修改和刪除:同樣的條件, 你讀取過的數(shù)據(jù),再次讀取出來發(fā)現(xiàn)值不一樣了
幻讀的重點(diǎn)在于新增:同樣的條件, 第1次和第2次讀出來的記錄數(shù)不一樣
說明: mysql 默認(rèn)的隔離級別是可重復(fù)讀,一般情況下不要修改
上面的例子可以看出,事務(wù)也有長短事務(wù)這樣的概念。事務(wù)間互相影響,指的是事務(wù)在并行執(zhí)行的時(shí)候,即都沒有commit的時(shí)候,影響會比較大

【MySql】MySql事務(wù)隔離級別與一致性

一致性(Consistency)

事務(wù)執(zhí)行的結(jié)果,必須使數(shù)據(jù)庫從一個一致性狀態(tài),變到另一個一致性狀態(tài)。當(dāng)數(shù)據(jù)庫只包含事務(wù)成功提交的結(jié)果時(shí),數(shù)據(jù)庫處于一致性狀態(tài)。如果系統(tǒng)運(yùn)行發(fā)生中斷,某個事務(wù)尚未完成而被迫中斷,而改未完成的事務(wù)對數(shù)據(jù)庫所做的修改已被寫入數(shù)據(jù)庫,此時(shí)數(shù)據(jù)庫就處于一種不正確(不一致)的狀態(tài)。因此一致性是通過原子性來保證的。

其實(shí)一致性和用戶的業(yè)務(wù)邏輯強(qiáng)相關(guān),一般MySQL提供技術(shù)支持,但是一致性還是要用戶業(yè)務(wù)邏輯做支撐,也就是,一致性,是由用戶決定的

而技術(shù)上,通過AID保證C文章來源地址http://www.zghlxwxcb.cn/news/detail-497704.html

到了這里,關(guān)于【MySql】MySql事務(wù)隔離級別與一致性的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分布式系統(tǒng)的一致性級別劃分及Zookeeper一致性級別分析

    分布式系統(tǒng)的一致性級別劃分及Zookeeper一致性級別分析

    在談到Zookeeper的一致性是哪種級別的一致性問題,以及CAP原則中的C是哪一種一致性級別時(shí)有些疑惑。 下面是大多數(shù)文章中提到的一致性級別 一致性(Consistency)是指多副本(Replications)問題中的數(shù)據(jù)一致性??梢苑譃閺?qiáng)一致性、順序一致性與弱一致性。 1.1 強(qiáng)一致性(Stric

    2024年04月12日
    瀏覽(29)
  • 深入理解高并發(fā)下的MySQL與Redis緩存一致性問題(增刪改查數(shù)據(jù)緩存的一致性、Canal、分布式系統(tǒng)CAP定理、BASE理論、強(qiáng)、弱一致性、順序、線性、因果、最終一致性)

    一些小型項(xiàng)目,或極少有并發(fā)的項(xiàng)目,這些策略在無并發(fā)情況下,不會有什么問題。 讀數(shù)據(jù)策略:有緩存則讀緩存,然后接口返回。沒有緩存,查詢出數(shù)據(jù),載入緩存,然后接口返回。 寫數(shù)據(jù)策略:數(shù)據(jù)發(fā)生了變動,先刪除緩存,再更新數(shù)據(jù),等下次讀取的時(shí)候載入緩存,

    2024年03月20日
    瀏覽(30)
  • 一次嗶哩嗶哩面試經(jīng)歷,Zookeeper一致性級別分析

    一次嗶哩嗶哩面試經(jīng)歷,Zookeeper一致性級別分析

    首先介紹一下自己的個人基本情況,某??茖W(xué)校畢業(yè),計(jì)算機(jī)技術(shù)與應(yīng)用專業(yè),有過2年的工作經(jīng)驗(yàn),畢業(yè)以后一直想要進(jìn)入一線互聯(lián)網(wǎng)大廠工作,但無奈學(xué)歷受限,屢屢被擋在門外。后來接觸到一個朋友,了解到“霸面”,所以鼓起勇氣去嘗試了,挑戰(zhàn)了一下螞蟻金服,沒想

    2024年03月20日
    瀏覽(26)
  • 分布式數(shù)據(jù)庫-事務(wù)一致性

    分布式數(shù)據(jù)庫-事務(wù)一致性

    version: v-2023060601 author: 路__ 分布式數(shù)據(jù)庫的“強(qiáng)一致性”應(yīng)該包含兩個方面: serializability(串行) and linearizability(線性一致) ,上述圖為“Highly Available Transactions: Virtues and Limitations”論文中對于一致性模型的介紹。圖中箭頭表示一致性模型之間的關(guān)系。對于異步網(wǎng)絡(luò)上的分

    2024年02月08日
    瀏覽(28)
  • HBase的事務(wù)處理與一致性保證

    HBase是一個分布式、可擴(kuò)展、高性能的列式存儲系統(tǒng),基于Google的Bigtable設(shè)計(jì)。它是Hadoop生態(tài)系統(tǒng)的一部分,可以與HDFS、MapReduce、ZooKeeper等組件集成。HBase具有高可靠性、高性能和高可擴(kuò)展性等特點(diǎn),適用于大規(guī)模數(shù)據(jù)存儲和實(shí)時(shí)數(shù)據(jù)處理。 在現(xiàn)實(shí)應(yīng)用中,事務(wù)處理和一致性

    2024年02月20日
    瀏覽(29)
  • RocketMQ分布式事務(wù) -> 最終一致性實(shí)現(xiàn)

    RocketMQ分布式事務(wù) -> 最終一致性實(shí)現(xiàn)

    · 分布式事務(wù)的問題常在業(yè)務(wù)與面試中被提及, 近日摸魚看到這篇文章, 闡述的非常通俗易懂, 固持久化下來我博客中, 也以便于我二刷 轉(zhuǎn)載源 : 基于RocketMQ分布式事務(wù) - 完整示例 本文代碼不只是簡單的demo,考慮到一些異常情況、冪等性消費(fèi)和死信隊(duì)列等情況,盡量向可靠業(yè)務(wù)

    2024年02月15日
    瀏覽(29)
  • 如何在微服務(wù)下保證事務(wù)的一致性

    作者:京東科技 苗元 隨著業(yè)務(wù)的快速發(fā)展、業(yè)務(wù)復(fù)雜度越來越高,傳統(tǒng)單體應(yīng)用逐漸暴露出了一些問題,例如開發(fā)效率低、可維護(hù)性差、架構(gòu)擴(kuò)展性差、部署不靈活、健壯性差等等。而微服務(wù)架構(gòu)是將單個服務(wù)拆分成一系列小服務(wù),且這些小服務(wù)都擁有獨(dú)立的進(jìn)程,彼此獨(dú)

    2023年04月27日
    瀏覽(29)
  • 微服務(wù)事務(wù)處理:CAP 定理和最終一致性的關(guān)系

    CAP 定理和最終一致性 CAP 定理和最終一致性是兩個密切相關(guān)的概念,但它們在范圍和細(xì)節(jié)上有所不同。以下是比較: CAP 定理 **正式陳述:**在分布式系統(tǒng)中,最多只能同時(shí)滿足以下三個保證中的兩個:一致性、可用性和分區(qū)容錯性。 解釋: **一致性:**每個讀取都檢索到最新

    2024年02月03日
    瀏覽(26)
  • 【103期】RabbitMQ 實(shí)現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性

    【103期】RabbitMQ 實(shí)現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性

    org.springframework.boot spring-boot-starter-amqp mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-jdbc com.alibaba fastjson 1.2.17 3.2.1.2配置文件內(nèi)容: server: port:?8080 spring: datasource: driver-class-name:?com.mysql.cj.jdbc.Driver url:?jdbc:mysql://localhost:3306/test?useUnicode=tru

    2024年04月14日
    瀏覽(32)
  • 【征服redis14】認(rèn)真理解一致性Hash與Redis的三種集群

    【征服redis14】認(rèn)真理解一致性Hash與Redis的三種集群

    前面我們介紹了主從復(fù)制的方式和sentinel方式,這里我們看第三種模式-Cluster方式。 目錄 1.前兩種集群模式的特征與不足 2.Cluster模式 2.1 Cluster模式原理 ?2.2 數(shù)據(jù)分片與槽位 2.3 Cluster模式配置和實(shí)現(xiàn) 3.一致性Hash 3.1 哈希后取模 3.2 一致性Hash算法 4 Redis Cluster集群 主從復(fù)制是Red

    2024年01月22日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包