成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysql怎么理解 MySQL什么意思

正確理解MYSQL的幻讀

一、定義

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)大足免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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ù)中,同樣的查詢語句執(zhí)行多次,得到了不同的行結(jié)果集。

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

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

從官方的定義來看,幻讀的定義側(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 ](非鎖定)語句,則這些 [ SELECT ]語句的結(jié)果也是一致的。

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

[ SELECT ]語句中使用 FOR UPDATE 或 FOR SHARE

3、行鎖

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

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

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

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

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

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

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

6、注意

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

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

四、樂觀鎖與悲觀鎖

1、樂觀鎖

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

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

2、悲觀鎖

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

3、無論是樂觀鎖還是悲觀鎖,使用的思想都是一致的,那就是當(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í)別下,可以通過提交當(dāng)前事務(wù)并在此之后發(fā)出新查詢來為查詢獲取更新的快照。

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

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

mysql是怎樣運(yùn)行的從根兒上理解mysql電子書

《MySQL是怎樣運(yùn)行的:從根兒上理解 MySQL》采用詼諧幽默的表達(dá)方式,對(duì)MySQL的底層運(yùn)行原理進(jìn)行了介紹,內(nèi)容涵蓋了使用MySQL的同學(xué)在求職面試和工作中常見的一些核心概念??傆?jì)22 章,劃分為4個(gè)部分。第1部分介紹了MySQL入門的一些知識(shí),比如MySQL的服務(wù)器程序和客戶端程序有哪些、MySQL的啟動(dòng)選項(xiàng)和系統(tǒng)變量,以及使用的字符集等。第2部分是本書后續(xù)章節(jié)的基礎(chǔ),介紹了MySQL的一些基礎(chǔ)知識(shí),比如記錄、頁面、索引、表空間的結(jié)構(gòu)和用法等。第3部分則與大家在工作中經(jīng)常遇到的查詢優(yōu)化問題緊密相關(guān),介紹了單表查詢、連接查詢的執(zhí)行原理,MySQL基于成本和規(guī)則的優(yōu)化具體指什么,并詳細(xì)分析了Explain語句的執(zhí)行結(jié)果。第4部分則是與MySQL中的事務(wù)和鎖相關(guān),介紹了事務(wù)概念的來源,MySQL是如何實(shí)現(xiàn)事務(wù)的,包括redo日志、undo日志、MVCC、各種鎖的細(xì)節(jié)等。

盡管《MySQL是怎樣運(yùn)行的:從根兒上理解 MySQL》在寫作時(shí)參考的MySQL源代碼版本是5.7.22,但是大部分內(nèi)容與具體的版本號(hào)并沒有多大關(guān)系。無論是很早之前就已身居MySQL專家的人員,還是希望進(jìn)一步提升技能的DBA,甚至是三五年后才會(huì)入行的“萌新”,本書都是他們徹底了解MySQL運(yùn)行原理的優(yōu)秀書

如何理解并正確使用MySql索引

MySQL索引類型包括:

(1)普通索引

這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:

◆創(chuàng)建索引

CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小于字段實(shí)際長(zhǎng)度;如果是BLOB和TEXT類型,必須指定 length,下同。

◆修改表結(jié)構(gòu)

ALTER mytable ADD INDEX [indexName] ON (username(length))

◆創(chuàng)建表的時(shí)候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 刪除索引的語法:

DROP INDEX [indexName] ON mytable;

(2)唯一索引

與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:

◆創(chuàng)建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

◆修改表結(jié)構(gòu)

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

mysql是怎樣運(yùn)行的 從根兒上理解mysql

MySQL架構(gòu)如下:

我們寫的sql語句通過client對(duì)接MYSQL的連接層,然后有查詢緩存,語法解析器,優(yōu)化器,生成最終執(zhí)行計(jì)劃,然后去查詢插件式存儲(chǔ)引擎,如InnoDB等。我們的數(shù)據(jù)是通過存儲(chǔ)引擎來和物理設(shè)備交互的。

怎樣深入學(xué)習(xí)理解mysql

要做DBA只學(xué)習(xí)MySQL肯定是不行的。因?yàn)閿?shù)據(jù)庫只是用來存儲(chǔ)數(shù)據(jù)的,而數(shù)據(jù)是提供給程序使用的。當(dāng)MySQL的數(shù)據(jù)量達(dá)到千萬級(jí)別甚至億級(jí),那樣性能會(huì)急劇下降,再通過數(shù)據(jù)庫本身進(jìn)行優(yōu)化,收效甚微。這時(shí)需要考慮很多方面,數(shù)據(jù)庫擴(kuò)展,集群,拆分(包括拆表,拆庫。拆表又可以水平拆分,垂直拆分)。但是這些對(duì)性能的提升都是百分之幾十或者幾倍。如果你懂程序,那么從業(yè)務(wù)層面優(yōu)化,那樣對(duì)性能的提升可以是數(shù)量級(jí)的提升。

另外DBA不止精通MySQL。還有Oracle,DB2等比較重量級(jí)的數(shù)據(jù)庫也要深入了解。

網(wǎng)頁名稱:mysql怎么理解 MySQL什么意思
文章URL:http://jinyejixie.com/article10/hpdggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、Google、虛擬主機(jī)、電子商務(wù)、網(wǎng)站維護(hù)標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
沙河市| 奉新县| 裕民县| 浑源县| 黎城县| 泰安市| 哈密市| 韩城市| 平南县| 兴化市| 白朗县| 金乡县| 涿鹿县| 枝江市| 内乡县| 南投市| 韶山市| 富宁县| 靖安县| 景德镇市| 泗阳县| 子洲县| 濉溪县| 水富县| 白山市| 来安县| 鹰潭市| 永福县| 炉霍县| 巴南区| 攀枝花市| 红河县| 大埔县| 荣昌县| 淮南市| 运城市| 马关县| 东明县| 濮阳市| 黄骅市| 渝中区|