乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MySQL事務(wù)和鎖——《MySQL DBA工作筆記》

       小仙女本仙人 2022-05-02 發(fā)布于北京

      MySQL事務(wù)

      事務(wù)存在的原因

      事務(wù)存在的目的:保證用戶對數(shù)據(jù)操作對數(shù)據(jù)是安全的。(比如說銀行卡余額)

      事務(wù)的特性——ACID

      原子性:一個事務(wù)要么全部執(zhí)行,要么不執(zhí)行

      一致性:事務(wù)開始和結(jié)束時,數(shù)據(jù)保持一致

      隔離性:事務(wù)之間互不影響

      持久性:事務(wù)操作的結(jié)果具有持久性

      關(guān)于臟讀,不可重復(fù)讀,幻讀

      • 臟讀

        事務(wù)A讀取了事務(wù)B中尚未提交的數(shù)據(jù)。如果事務(wù)B回滾,則A讀取使用了錯誤的數(shù)據(jù)。

        【一個事物在讀的時候,禁止讀取未提交的事務(wù)】

      • 不可重復(fù)讀

        不可重復(fù)讀是指在一個事務(wù)范圍內(nèi)多次查詢卻返回了不同的數(shù)據(jù)值,這是由于存在查詢間隔,被另一個事務(wù)修改并提交了。

        【一個事物在讀的時候,禁止任何事務(wù)寫】

      • 幻讀

        在事務(wù)A多次讀取過程中,事務(wù)B對數(shù)據(jù)進(jìn)行了新增操作,導(dǎo)致事務(wù)A多次讀取的數(shù)據(jù)不一致。

        【一個事物加上表級鎖,禁止任何操作的并發(fā)】

      小結(jié):

      臟讀是讀取了尚未提交的數(shù)據(jù),不可重復(fù)讀是讀取了不停更新的數(shù)據(jù)(修改),幻讀是指讀取了不停更新的數(shù)據(jù)(新增)。

      關(guān)于事務(wù)隔離級別

      目的:避免臟讀,不可重復(fù)讀,幻讀

      讀未提交:一個事務(wù)可以讀到另一個事務(wù)尚未提交的數(shù)據(jù)。也就是臟讀,避免臟讀的方式:

      讀提交:一個事務(wù)要等另一個事務(wù)提交后才能讀取數(shù)據(jù)。但會導(dǎo)致一個事務(wù)中相同查詢出現(xiàn)不同的結(jié)果。也就是不可重復(fù)讀。避免不可重復(fù)讀的方式:

      重復(fù)讀(RR,MySQL默認(rèn)級別):就是在開始讀取數(shù)據(jù)時,不允許修改操作。但會導(dǎo)致由于允許insert操作導(dǎo)致的事務(wù)結(jié)果出現(xiàn)不同。也就是幻讀,避免幻讀的方式::

      序列化:序列化使事務(wù)串行順序執(zhí)行,但會大大降低并發(fā)性能。

      MySQL鎖機(jī)制

      Innodb實(shí)現(xiàn)了兩種類型的行鎖:共享鎖,排他鎖。

      共享鎖和排他鎖

      共享鎖:允許一個事務(wù)讀一行,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排他鎖,多個共享鎖是可以并行的。

      排他鎖:獲取排他鎖的事務(wù)允許更新數(shù)據(jù),阻止其他事務(wù)獲取相同數(shù)據(jù)集的共享鎖和排他鎖。

      【復(fù)述一下】

      假設(shè)事務(wù)A獲取了表中的行666,就相當(dāng)于獲得了共享鎖,此時A可以讀取數(shù)據(jù),其他事務(wù)也可以獲得行666的共享鎖,所以多個共享鎖是可以并行指的是多個事務(wù)可以讀取相同的行,但是一旦某行被獲取了共享鎖,就無法被其他事務(wù)獲取排他鎖,也就是說,行只能讀,不能寫。

      然后A讀完了,事務(wù)B要對行666進(jìn)行更新操作,就需要先獲得排他鎖,獲得排他鎖之后,其他事務(wù)就無法獲取行666的排他鎖和共享鎖,也就是說,在事務(wù)B更新數(shù)據(jù)的時候不允許其他事務(wù)讀或者更新。

      所以排他鎖就是指只允許一個事務(wù)進(jìn)行寫操作,在這個過程中,不允許其他事務(wù)讀,也不允許其他事務(wù)寫。

      也就是說,排他鎖是串行的,不能被多個事務(wù)同時持有,但共享鎖可以。

      【如何使用行鎖】

      InnoDB行鎖是通過索引上的索引項(xiàng)來實(shí)現(xiàn)的,InnoDB這種行鎖實(shí)現(xiàn)特點(diǎn)意味者:只有通過索引條件檢索數(shù)據(jù),InnoDB才會使用行級鎖,否則,InnoDB將使用表鎖?。ㄟ@也是為什么需要進(jìn)行索引優(yōu)化的原因)

      【行鎖定的范圍問題】

      行鎖:對索引項(xiàng)加鎖,鎖定一條記錄

      間隙鎖:

      編程的思想源于生活,生活中的例子能幫助我們更好的理解一些編程中的思想。
      生活中排隊(duì)的場景,小明,小紅,小花三個人依次站成一排,此時,如何讓新來的小剛不能站在小紅旁邊,這時候只要將小紅和她前面的小明之間的空隙封鎖,將小紅和她后面的小花之間的空隙封鎖,那么小剛就不能站到小紅的旁邊。
      這里的小紅,小明,小花,小剛就是數(shù)據(jù)庫的一條條記錄。
      他們之間的空隙也就是間隙,而封鎖他們之間距離的鎖,叫做間隙鎖。

      間隙鎖的目的是為了防止幻讀

      innodb自動使用間隙鎖的條件:

      • 必須在RR級別下
      • 檢索條件必須有索引(沒有索引的話,mysql會全表掃描,那樣會鎖定整張表所有的記錄,包括不存在的記錄,此時其他事務(wù)不能修改不能刪除不能添加)

      Next-key Lock:等于行鎖加間隙鎖。掃描索引記錄后,先對索引記錄加上行鎖,再對索引兩邊的間隙加上間隙鎖。

      意向共享鎖和意向排他鎖

      Innodb雖然使用行鎖,但并沒有廢棄表鎖。

      行鎖和表鎖】

      MyISAM存儲引擎使用的是表鎖,而Innodb增加了行鎖。并不意味著Innodb徹底拋棄了表鎖。

      關(guān)于行鎖,較小的粒度導(dǎo)致其高并發(fā),但也因較小的粒度導(dǎo)致加鎖慢,開銷大,會出現(xiàn)死鎖情況。

      關(guān)于表鎖,較大的粒度在高并發(fā)上的表現(xiàn)很弱,但同時粒度較大,加鎖塊,開銷小,不會出現(xiàn)死鎖情況。

      沒有完美的技術(shù),只有合適的解決方案。在高并發(fā)場景下使用行鎖而忍受一些問題本質(zhì)上是一種權(quán)衡。

      意向鎖的背景沖突】

      意向鎖的出現(xiàn)本質(zhì)上是解決行鎖和表鎖矛盾的問題。

      事務(wù)A獲得了表中某一行的共享鎖,事務(wù)B申請了表的寫權(quán)限,這時候就會產(chǎn)生矛盾。

      關(guān)于意向鎖】

      首先,意向鎖是一種表鎖。

      意向共享鎖:事務(wù)獲得表中的某一行的共享鎖前,需要先獲得整張表的意向共享鎖。

      意向排他鎖:事務(wù)獲得表中的某一行的排他鎖前,需要先獲得整張表的意向排他鎖。

      意向鎖的加鎖過程是自動完成的。

      【意向鎖的共享問題】

      意向鎖是表鎖,它的互斥性是針對表級別的事務(wù),比如一個事務(wù)要獲取一張表的寫權(quán)限。所以意向鎖對于表級別的事務(wù)是互斥的。但是對于行級別的事務(wù)是共享的,也就是說,一個意向鎖可以被多個行級別的事務(wù)所持有。

      死鎖

      關(guān)于死鎖抖音上有一個非常好玩的小視頻:

      面試官問:解釋一下死鎖,解釋明白了就發(fā)offer

      應(yīng)聘者答:先發(fā)offer,發(fā)了offer再解釋

      死鎖本質(zhì)上就是持有鎖和釋放鎖的問題,就像這個視頻里描述的,面試官在聽到死鎖的解釋后,才會釋放offer這個鎖,而應(yīng)聘者是得到offer后才會釋放死鎖解釋這個鎖。offer和對死鎖的解釋就可以類比兩個鎖。

      死鎖的狀態(tài)就是互相等待。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多