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讀(mysql讀鎖和寫鎖的區(qū)別)

    發(fā)布時(shí)間:2023-04-14 07:29:45     稿源: 創(chuàng)意嶺    閱讀: 76        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于mysql讀的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來(lá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讀(mysql讀鎖和寫鎖的區(qū)別)

    一、mysql查詢從主上讀

    MySQL查詢從主上讀是指,將數(shù)據(jù)庫(kù)的所有寫操作(如插入、修改、刪除等)都發(fā)往數(shù)據(jù)庫(kù)的主節(jié)點(diǎn),而將讀操作(如查詢數(shù)據(jù))發(fā)送到數(shù)據(jù)庫(kù)的從節(jié)點(diǎn)上。這樣的好處是可以提高數(shù)據(jù)庫(kù)的讀取效率,同時(shí)減少單一節(jié)點(diǎn)的負(fù)載壓力,提高數(shù)據(jù)庫(kù)的穩(wěn)定性。該方案需要使用MySQL集群,即將多個(gè)MySQL服務(wù)器連接在一起,構(gòu)成一個(gè)分布式的數(shù)據(jù)庫(kù)系統(tǒng),以實(shí)現(xiàn)高可用、高性能、高擴(kuò)展等特性。常用的MySQL集群方案包括主從復(fù)制、MGR、Galera Cluster等。

    二、mysql支持多用戶同時(shí)讀寫嗎

    數(shù)據(jù)庫(kù)是支持多用戶訪問的,因此需要一種機(jī)制保證多個(gè)用戶同時(shí)讀取和修改數(shù)據(jù)時(shí),數(shù)據(jù)不會(huì)被破壞或者失效。在MySQL中,使用鎖來(lái)保證并發(fā)連接情況下的數(shù)據(jù)準(zhǔn)確性。

    InnoDB中的鎖定技術(shù)往往是基于索引實(shí)現(xiàn)的,如果SQL中沒有利用到索引的話,往往會(huì)執(zhí)行全表掃描,觸發(fā)表鎖。所以從效率上來(lái)說(shuō),我們應(yīng)該建立合適的索引,減少鎖的數(shù)據(jù)行提高并發(fā)。

    從鎖的粒度上來(lái)說(shuō),可以將鎖分為表鎖和行鎖;我們主要討論行鎖的應(yīng)用。

    從行鎖的角度上來(lái)說(shuō),InnoDB存儲(chǔ)引擎實(shí)現(xiàn)了兩種標(biāo)準(zhǔn)的行級(jí)鎖,共享鎖(讀鎖)和排他鎖(寫鎖)。

    共享鎖:當(dāng)一個(gè)事務(wù)獲取了某行數(shù)據(jù)的共享鎖后,其他事務(wù)依然可以對(duì)這行數(shù)據(jù)加共享鎖,但是不能加排他鎖。

    排他鎖:當(dāng)一個(gè)事務(wù)獲取了某行數(shù)據(jù)的排他鎖后,其他事務(wù)不可以對(duì)這行數(shù)據(jù)加任何鎖。

    從鎖的范圍來(lái)說(shuō),行鎖還可以分成record lock、gap lock、next-key lock。

    record lock:索引的記錄鎖,是建立在索引記錄上的,如果沒有索引的情況,往往會(huì)觸發(fā)表鎖。

    gap lock:加在索引記錄間隙上的鎖。

    next-key lock:record lock+gap lock的組合,用來(lái)在RR級(jí)別解決幻讀的問題;所以通常在insert時(shí),會(huì)鎖定相鄰的鍵。

    回答于 2 小時(shí)前

    三、正確理解MYSQL的幻讀

    一、定義

    1、幻讀MYSQL官方叫法是Phantom Rows,意為鬼影行或者幻影行,請(qǐng)看官方定義:

    The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a [ SELECT ] is executed twice, but returns a row the second time that was not returned the first time, the row is a “phantom” row.

    翻譯一下:

    所謂的幻影行問題是指,在同一個(gè)事務(wù)中,同樣的查詢語(yǔ)句執(zhí)行多次,得到了不同的行結(jié)果集。

    例如,如果同一個(gè)SELECT語(yǔ)句執(zhí)行了兩次,第二次執(zhí)行的時(shí)候比第一次執(zhí)行時(shí)多出一行,則該行就是所謂的幻影行。

    2、幻讀與不可重復(fù)讀的區(qū)別

    從官方的定義來(lái)看,幻讀的定義側(cè)重于多條記錄,就是記錄條數(shù)的變化,而不可重復(fù)讀側(cè)重于單條記錄數(shù)據(jù)的變化,這樣區(qū)分原因在于解決幻讀需要范圍鎖,解決不可重復(fù)讀只需要單條記錄加鎖

    二、InnoDB的REPEATABLE READ級(jí)別

    InnoDB支持由SQL1992標(biāo)準(zhǔn)描述的所有四個(gè)事務(wù)隔離級(jí)別,默認(rèn)隔離級(jí)別是 REPEATABLE READ。

    1、快照讀:

    在RR模式下,第一次讀取會(huì)建立快照,后續(xù)查詢會(huì)讀取快照。

    這意味著,如果在同一事務(wù)中發(fā)出多個(gè)普通[ SELECT ](非鎖定)語(yǔ)句,則這些 [ SELECT ]語(yǔ)句的結(jié)果也是一致的。

    2、[locking reads](鎖定讀取,又叫當(dāng)前讀)

    [ SELECT ]語(yǔ)句中使用 FOR UPDATE 或 FOR SHARE

    3、行鎖

    在RR模式下,使用當(dāng)前讀以及 [ UPDATE ]和 [ DELETE ]語(yǔ)句會(huì)對(duì)數(shù)據(jù)記錄加行鎖,鎖定范圍取決于該語(yǔ)句使用的是具有唯一搜索條件的唯一索引還是范圍類型搜索條件。

    三、InnoDB的READ COMMITTED級(jí)別

    1、在RC模式下,每次讀取都會(huì)刷新快照,因此不能保證可重復(fù)讀

    2、在RC模式下,使用當(dāng)前讀以及 [ UPDATE ]和 [ DELETE ]語(yǔ)句會(huì)對(duì)數(shù)據(jù)記錄加行鎖,但是不會(huì)加范圍鎖,間隙鎖定僅用于外鍵約束檢查和重復(fù)鍵檢查。

    3、由于禁用了間隙鎖定,因此可能會(huì)產(chǎn)生幻影行問題,因?yàn)槠渌麜?huì)話可以在間隙中插入新行。

    4、 對(duì)于[ UPDATE ]或 [ DELETE ]語(yǔ)句, InnoDB 僅對(duì)其更新或刪除的行持有鎖。MySQL評(píng)估 WHERE 條件后,將釋放不匹配行的記錄鎖 。這大大降低了死鎖的可能性,但是仍然可以發(fā)生。

    5、對(duì)于[ UPDATE ]語(yǔ)句,如果某行已被鎖定,則 InnoDB 執(zhí)行“半一致”讀取,將最新提交版本的數(shù)據(jù)返回給MySQL,以便MySQL可以確定該行是否符合 WHERE 條件。如果該行匹配(必須更新),則MySQL會(huì)再次讀取該行,這一次 InnoDB 會(huì)將其鎖定或等待獲取鎖。

    6、注意

    從MySQL 8.0.22開始,DML操作(增刪改,通過(guò)聯(lián)接列表或子查詢)從MySQL授權(quán)表中讀取數(shù)據(jù),但不對(duì)其進(jìn)行修改,無(wú)論隔離級(jí)別如何,都不會(huì)在MySQL授權(quán)表上獲得讀取鎖。

    有關(guān)更多信息,請(qǐng)參見 Grant Table Concurrency 。

    四、樂觀鎖與悲觀鎖

    1、樂觀鎖

    在UPDATE的WHERE子句中加入版本信息來(lái)確定修改是否生效

    使用樂觀鎖時(shí)仍然需要非常謹(jǐn)慎,因?yàn)镽R是可重復(fù)讀的,在UPDATE之前讀取版本號(hào),應(yīng)該使用[當(dāng)前讀],不能使用[快照讀]

    2、悲觀鎖

    在UPDATE執(zhí)行前,SELECT后面加上FOR UPDATE來(lái)給記錄加鎖,保證記錄在UPDATE前不被修改。SELECT ... FOR UPDATE是加上了X鎖,也可以通過(guò)SELECT ... LOCK IN SHARE MODE加上S鎖,來(lái)防止其他事務(wù)對(duì)該行的修改。

    3、無(wú)論是樂觀鎖還是悲觀鎖,使用的思想都是一致的,那就是當(dāng)前讀。樂觀鎖利用當(dāng)前讀判斷是否是最新版本,悲觀鎖利用當(dāng)前讀鎖定行。

    五、總結(jié)

    1、RC級(jí)別沒有范圍鎖一定會(huì)導(dǎo)致不可重復(fù)讀和幻影行

    2、RR級(jí)別安全性更高,實(shí)現(xiàn)可重復(fù)讀的方式為快照,如果需要最新數(shù)據(jù)可以選擇[當(dāng)前讀],因此RR級(jí)別是首選

    3、不論RR還是RC級(jí)別,增、刪、改的操作都會(huì)進(jìn)行一次[當(dāng)前讀]操作,以此獲取最新版本的數(shù)據(jù),并檢測(cè)是否有重復(fù)的索引。

    4、RR級(jí)別下,當(dāng)前事務(wù)如果未發(fā)生更新操作(增刪改),快照版本會(huì)保持不變,多次查詢讀取的快照是同一個(gè)

    5、RR級(jí)別下,當(dāng)前事務(wù)如果發(fā)生更新(增刪改),會(huì)刷新快照,會(huì)導(dǎo)致不可重復(fù)讀和幻影行

    6、RR級(jí)別下,使用當(dāng)前讀,會(huì)刷新快照,會(huì)導(dǎo)致不可重復(fù)讀和幻影行

    7、RR級(jí)別下,可以通過(guò)提交當(dāng)前事務(wù)并在此之后發(fā)出新查詢來(lái)為查詢獲取更新的快照。

    8、RR級(jí)別可以部分解決不可重復(fù)讀和幻讀問題

    9、其實(shí)問題的關(guān)鍵是你的業(yè)務(wù)邏輯需要可重復(fù)讀還是最新數(shù)據(jù)

    四、易語(yǔ)言mysql數(shù)據(jù)讀取

    “account_id='” + id + “'” '好象這多了2個(gè)引號(hào),數(shù)字是不用加引號(hào)的

    .如果 (account_id = 角色id)

    超級(jí)列表框1.全部刪除 ()

    讀取人物寶寶 (“player_id='” + 角色id + “'”)

    輸出信息 (“讀取完畢!”)

    .否則

    信息框 (“查詢失敗,沒有賬號(hào)的角色數(shù)據(jù)!”, 該48, “提示”)

    上面這段應(yīng)該是這樣才對(duì)吧,查詢到ID就查詢另一個(gè)信息,你是查詢到了就刪除了,還查什么?

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


    推薦閱讀:

    girl排行榜(ohmygirl排名)

    my25777最新域名查詢www

    cmyk正紅色值是多少(正紅色的cmyk值是多少)

    包材倉(cāng)庫(kù)如何管理(包材倉(cāng)庫(kù)如何管理員工)

    手機(jī)無(wú)人直播軟件(手機(jī)無(wú)人直播下載哪四個(gè)軟件)