-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
mysql為什么默認可重復讀
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于mysql為什么默認可重復讀的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、MySQL可重復讀防止幻讀
接上篇 事務隔離級別和幻讀 ,留了個坑,沒想到竟然過了10天,時間不注意真的過的好快。順便提下,圖片鏈接是屬于網(wǎng)站的,開發(fā)自己的圖床迫在眉睫,萬一哪天遷移就要做很多額外工作,一些概念或者思路用圖片表達更直觀清楚。
回到正題,之前提到一般情況下MySQL的InnoDB引擎在可重復讀的情況下是沒法保證不出現(xiàn)幻讀的,但實際情況是MySQL可以通過加鎖來防止幻讀的出現(xiàn),這種鎖定通過Next-key機制來實現(xiàn),是屬于記錄鎖和間隙鎖(Gap鎖)的結合。
引申,行級別鎖的三種算法:
舉個存在唯一索引和輔助索引的例子做說明:
執(zhí)行 select * from test where b = 3 for update
存在兩個索引,分別加鎖,唯一主鍵列a加record lock , 輔助索引列b加next-key lock (1,3) 以及給下一個值的區(qū)間(3,6)加gap鎖;
因此在另一個事務里執(zhí)行以下語句都會阻塞,具體分析:
第一個阻塞因為加了唯一索引的record lock a = 5;
第二個主鍵插入4,符合條件,但是根據(jù)輔助索引b 的范圍, b = 2 在(1,3)中,同樣阻塞;
第三個a =6 不在主鍵a鎖定范圍,b = 5 也不在輔助索引b 的范圍(1,3)中,但在另一個gap鎖范圍(3,6)中,因此也阻塞;
這種鎖定情形下,可以執(zhí)行的包括類似語句:
insert的特殊情況
對于insert 會檢查下一條記錄是否被鎖定,如上述例子有 select * from test where b = 3 for update 插入 insert into test select 2,2 會檢測到b = 3 已經(jīng)被鎖定,而 insert into test select 2,0 可以執(zhí)行;
[1]:《MySQL技術內幕:InnoDB存儲引擎》-第六章:鎖
二、MYSQL 那點破事!索引、SQL調優(yōu)、事務、B+樹、分表 ....
大家好,我是Tom哥~
為了便于大家查找問題,了解全貌,整理個目錄,我們可以快速全局了解關于mysql數(shù)據(jù)庫,面試官一般喜歡問哪些問題
接下來,我們逐條來看看每個問題及答案
MyISAM 和 InnoDB 的區(qū)別?
答案:InnoDB 支持 事務、外鍵、聚集索引,通過MVCC來支持高并發(fā),索引和數(shù)據(jù)存儲在一起。InnoDB 不保存表的具體行數(shù),執(zhí)行 select count(*) from table 時需要全表掃描。而MyISAM 用一個變量保存了整個表的行數(shù)。
InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖,并發(fā)能力低。MySQL 將默認存儲引擎是 InnoDB
mysql 鎖有哪些類型?
答案:mysql鎖分為共享鎖( S lock ) 、排他鎖 ( X lock ),也叫做讀鎖和寫鎖。根據(jù)粒度,可以分為表鎖、頁鎖、行鎖。
什么是間隙鎖?
答案:間隙鎖是可重復讀級別下才會有的鎖,mysql會幫我們生成了若干 左開右閉 的區(qū)間,結合MVCC和間隙鎖可以解決幻讀問題。
如何避免死鎖?
答案:死鎖的四個必要條件:1、互斥 2、請求與保持 3、環(huán)路等待 4、不可剝奪。
數(shù)據(jù)庫的隔離級別?
答案:讀未提交、讀已提交、可重復讀(mysql的默認級別,每次讀取結果都一樣,但是有可能產(chǎn)生幻讀)、串行化。
Mysql有哪些類型的索引?
答案:
什么是覆蓋索引和回表?
答案:
1、覆蓋索引,指的是在一次查詢中,一個索引包含所有需要查詢的字段的值,可能是返回值或where條件
假如我們創(chuàng)建了一個(money,buyer_id)的聯(lián)合索引,索引的葉子節(jié)點包含了 buyer_id 的信息,則不會再 回表 查詢。
2、回表,指查詢時一些字段值拿不到,需要到主鍵索引B+樹再查一次。
Mysql的最左前綴原則?
答案:即最左優(yōu)先,在檢索數(shù)據(jù)時從聯(lián)合索引的最左邊開始匹配,直到遇到范圍查詢(如:> 、< 、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的順序可以任意調整。
線上SQL的調優(yōu)經(jīng)驗?
答案:
官方為什么建議采用自增id 作為主鍵?
答案:自增id是連續(xù)的,插入過程也是順序的,總是插入在最后,減少了頁分裂,有效減少數(shù)據(jù)的移動。所以盡量不要使用字符串(如:UUID)作為主鍵。
索引為什么采用B+樹,而不用B-樹,紅黑樹?
答案:提升查詢速度,首先要減少磁盤IO次數(shù),也就是要降低樹的高度。
事務的特性有哪些?
答案:ACID。
如何實現(xiàn)分布式事務?
答案:
日常工作中,MySQL 如何做優(yōu)化?
答案:
mysql 主從同步具體過程?
答案:
什么是主從延遲?
答案:指一個寫入SQL操作在主庫執(zhí)行完后,將數(shù)據(jù)完整同步到從庫會有一個時間差,稱之為主從延遲。計算公式:
注意:不同服務器要保持時鐘一致
主從延遲排查方法?
答案:通過 show slave status 命令輸出的 Seconds_Behind_Master 參數(shù)的值來判斷
主從延遲要怎么解決?
答案:
如果數(shù)據(jù)量太大怎么辦?
答案:mysql表的數(shù)據(jù)量一般控制在千萬級別,如果再大的話,就要考慮分庫分表。除了分表外,列舉了面對海量數(shù)據(jù)業(yè)務的一些常見優(yōu)化手段
分表后ID如何保證全局唯一呢?
答案:分庫分表后,多張表共用一套全局id,原來單表主鍵自增方式滿足不了要求。我們需要重新設計一套id生成器。特點:全局唯一、高性能、高可用、方便接入。
分表后可能遇到的哪些問題?
答案:分表后,與單表的最大區(qū)別是有分表鍵 sharding_key ,用來路由具體的物理表,以電商為例,有買家和賣家兩個維度,以 buyer_id 路由,無法滿足賣家的需求,反之同樣道理。如何解決?
三、h4數(shù)據(jù)庫默認事務隔離級別
你好請問是問h4數(shù)據(jù)庫默認事務隔離級別有什么嗎?h4數(shù)據(jù)庫默認事務隔離級別有四種。分別是讀未提交、讀已提交、可重復讀、序列化,不同的隔離級別下會產(chǎn)生臟讀、幻讀、不可重復讀等相關問題,因此在選擇隔離級別的時候要根據(jù)應用場景來決定,使用合適的隔離級別。在實際的工作中很少做修改,一般都是使用默認的隔離級別:mysql默認為不可重復讀,oracle為讀已提交。
四、2020-12-14:mysql中,可重復讀是怎么實現(xiàn)的?
MVCC多版本并發(fā)控制。
以上就是關于mysql為什么默認可重復讀相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
浙江廣聚匯貿易公司這么樣(浙江廣聚紙制品制造有限公司怎么樣)