HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    mysql為什么默認(rèn)可重復(fù)讀

    發(fā)布時(shí)間:2023-04-08 16:40:08     稿源: 創(chuàng)意嶺    閱讀: 125        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于mysql為什么默認(rèn)可重復(fù)讀的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    mysql為什么默認(rèn)可重復(fù)讀

    一、MySQL可重復(fù)讀防止幻讀

    接上篇 事務(wù)隔離級(jí)別和幻讀 ,留了個(gè)坑,沒(méi)想到竟然過(guò)了10天,時(shí)間不注意真的過(guò)的好快。順便提下,圖片鏈接是屬于網(wǎng)站的,開(kāi)發(fā)自己的圖床迫在眉睫,萬(wàn)一哪天遷移就要做很多額外工作,一些概念或者思路用圖片表達(dá)更直觀清楚。

    回到正題,之前提到一般情況下MySQL的InnoDB引擎在可重復(fù)讀的情況下是沒(méi)法保證不出現(xiàn)幻讀的,但實(shí)際情況是MySQL可以通過(guò)加鎖來(lái)防止幻讀的出現(xiàn),這種鎖定通過(guò)Next-key機(jī)制來(lái)實(shí)現(xiàn),是屬于記錄鎖和間隙鎖(Gap鎖)的結(jié)合。

    引申,行級(jí)別鎖的三種算法:

    舉個(gè)存在唯一索引和輔助索引的例子做說(shuō)明:

    執(zhí)行 select * from test where b = 3 for update

    存在兩個(gè)索引,分別加鎖,唯一主鍵列a加record lock , 輔助索引列b加next-key lock (1,3) 以及給下一個(gè)值的區(qū)間(3,6)加gap鎖;

    因此在另一個(gè)事務(wù)里執(zhí)行以下語(yǔ)句都會(huì)阻塞,具體分析:

    第一個(gè)阻塞因?yàn)榧恿宋ㄒ凰饕膔ecord lock a = 5;

    第二個(gè)主鍵插入4,符合條件,但是根據(jù)輔助索引b 的范圍, b = 2 在(1,3)中,同樣阻塞;

    第三個(gè)a =6 不在主鍵a鎖定范圍,b = 5 也不在輔助索引b 的范圍(1,3)中,但在另一個(gè)gap鎖范圍(3,6)中,因此也阻塞;

    這種鎖定情形下,可以執(zhí)行的包括類似語(yǔ)句:

    insert的特殊情況

    對(duì)于insert 會(huì)檢查下一條記錄是否被鎖定,如上述例子有 select * from test where b = 3 for update 插入 insert into test select 2,2 會(huì)檢測(cè)到b = 3 已經(jīng)被鎖定,而 insert into test select 2,0 可以執(zhí)行;

    [1]:《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》-第六章:鎖

    二、MYSQL 那點(diǎn)破事!索引、SQL調(diào)優(yōu)、事務(wù)、B+樹(shù)、分表 ....

    大家好,我是Tom哥~

    為了便于大家查找問(wèn)題,了解全貌,整理個(gè)目錄,我們可以快速全局了解關(guān)于mysql數(shù)據(jù)庫(kù),面試官一般喜歡問(wèn)哪些問(wèn)題

    接下來(lái),我們逐條來(lái)看看每個(gè)問(wèn)題及答案

    MyISAM 和 InnoDB 的區(qū)別?

    答案:InnoDB 支持 事務(wù)、外鍵、聚集索引,通過(guò)MVCC來(lái)支持高并發(fā),索引和數(shù)據(jù)存儲(chǔ)在一起。InnoDB 不保存表的具體行數(shù),執(zhí)行 select count(*) from table 時(shí)需要全表掃描。而MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù)。

    InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖,并發(fā)能力低。MySQL 將默認(rèn)存儲(chǔ)引擎是 InnoDB

    mysql 鎖有哪些類型?

    答案:mysql鎖分為共享鎖( S lock ) 、排他鎖 ( X lock ),也叫做讀鎖和寫鎖。根據(jù)粒度,可以分為表鎖、頁(yè)鎖、行鎖。

    什么是間隙鎖?

    答案:間隙鎖是可重復(fù)讀級(jí)別下才會(huì)有的鎖,mysql會(huì)幫我們生成了若干 左開(kāi)右閉 的區(qū)間,結(jié)合MVCC和間隙鎖可以解決幻讀問(wèn)題。

    如何避免死鎖?

    答案:死鎖的四個(gè)必要條件:1、互斥 2、請(qǐng)求與保持 3、環(huán)路等待 4、不可剝奪。

    數(shù)據(jù)庫(kù)的隔離級(jí)別?

    答案:讀未提交、讀已提交、可重復(fù)讀(mysql的默認(rèn)級(jí)別,每次讀取結(jié)果都一樣,但是有可能產(chǎn)生幻讀)、串行化。

    Mysql有哪些類型的索引?

    答案:

    什么是覆蓋索引和回表?

    答案:

    1、覆蓋索引,指的是在一次查詢中,一個(gè)索引包含所有需要查詢的字段的值,可能是返回值或where條件

    假如我們創(chuàng)建了一個(gè)(money,buyer_id)的聯(lián)合索引,索引的葉子節(jié)點(diǎn)包含了 buyer_id 的信息,則不會(huì)再 回表 查詢。

    2、回表,指查詢時(shí)一些字段值拿不到,需要到主鍵索引B+樹(shù)再查一次。

    Mysql的最左前綴原則?

    答案:即最左優(yōu)先,在檢索數(shù)據(jù)時(shí)從聯(lián)合索引的最左邊開(kāi)始匹配,直到遇到范圍查詢(如:> 、< 、between、like等)

    例子:where a = 1 and b = 2 and c > 3 and d = 4 ,如果建立(a,b,c,d)組合索引,d是用不到索引的;如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調(diào)整。

    線上SQL的調(diào)優(yōu)經(jīng)驗(yàn)?

    答案:

    官方為什么建議采用自增id 作為主鍵?

    答案:自增id是連續(xù)的,插入過(guò)程也是順序的,總是插入在最后,減少了頁(yè)分裂,有效減少數(shù)據(jù)的移動(dòng)。所以盡量不要使用字符串(如:UUID)作為主鍵。

    索引為什么采用B+樹(shù),而不用B-樹(shù),紅黑樹(shù)?

    答案:提升查詢速度,首先要減少磁盤IO次數(shù),也就是要降低樹(shù)的高度。

    事務(wù)的特性有哪些?

    答案:ACID。

    如何實(shí)現(xiàn)分布式事務(wù)?

    答案:

    日常工作中,MySQL 如何做優(yōu)化?

    答案:

    mysql 主從同步具體過(guò)程?

    答案:

    什么是主從延遲?

    答案:指一個(gè)寫入SQL操作在主庫(kù)執(zhí)行完后,將數(shù)據(jù)完整同步到從庫(kù)會(huì)有一個(gè)時(shí)間差,稱之為主從延遲。計(jì)算公式:

    注意:不同服務(wù)器要保持時(shí)鐘一致

    主從延遲排查方法?

    答案:通過(guò) show slave status 命令輸出的 Seconds_Behind_Master 參數(shù)的值來(lái)判斷

    主從延遲要怎么解決?

    答案:

    如果數(shù)據(jù)量太大怎么辦?

    答案:mysql表的數(shù)據(jù)量一般控制在千萬(wàn)級(jí)別,如果再大的話,就要考慮分庫(kù)分表。除了分表外,列舉了面對(duì)海量數(shù)據(jù)業(yè)務(wù)的一些常見(jiàn)優(yōu)化手段

    分表后ID如何保證全局唯一呢?

    答案:分庫(kù)分表后,多張表共用一套全局id,原來(lái)單表主鍵自增方式滿足不了要求。我們需要重新設(shè)計(jì)一套id生成器。特點(diǎn):全局唯一、高性能、高可用、方便接入。

    分表后可能遇到的哪些問(wèn)題?

    答案:分表后,與單表的最大區(qū)別是有分表鍵 sharding_key ,用來(lái)路由具體的物理表,以電商為例,有買家和賣家兩個(gè)維度,以 buyer_id 路由,無(wú)法滿足賣家的需求,反之同樣道理。如何解決?

    三、h4數(shù)據(jù)庫(kù)默認(rèn)事務(wù)隔離級(jí)別

    你好請(qǐng)問(wèn)是問(wèn)h4數(shù)據(jù)庫(kù)默認(rèn)事務(wù)隔離級(jí)別有什么嗎?h4數(shù)據(jù)庫(kù)默認(rèn)事務(wù)隔離級(jí)別有四種。分別是讀未提交、讀已提交、可重復(fù)讀、序列化,不同的隔離級(jí)別下會(huì)產(chǎn)生臟讀、幻讀、不可重復(fù)讀等相關(guān)問(wèn)題,因此在選擇隔離級(jí)別的時(shí)候要根據(jù)應(yīng)用場(chǎng)景來(lái)決定,使用合適的隔離級(jí)別。在實(shí)際的工作中很少做修改,一般都是使用默認(rèn)的隔離級(jí)別:mysql默認(rèn)為不可重復(fù)讀,oracle為讀已提交。

    四、2020-12-14:mysql中,可重復(fù)讀是怎么實(shí)現(xiàn)的?

    MVCC多版本并發(fā)控制。

    以上就是關(guān)于mysql為什么默認(rèn)可重復(fù)讀相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    academy諧音記憶

    my花式英文字體(my花體字可復(fù)制)

    wechat翻譯中文(mywechat翻譯中文)

    浙江廣聚匯貿(mào)易公司這么樣(浙江廣聚紙制品制造有限公司怎么樣)

    杭州到廣州國(guó)道怎么走(杭州到廣州國(guó)道怎么走最方便)