溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL基礎(chǔ)知識點整理

發(fā)布時間:2021-09-13 14:22:54 來源:億速云 閱讀:103 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“MySQL基礎(chǔ)知識點整理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL基礎(chǔ)知識點整理”吧!


MySQL相關(guān)的名詞概念還是挺多的,但是常用的也不多,因此將常用的統(tǒng)計整理下,便于回顧:

?DQL:data query language,指SELECT查詢語句;?DML:data manipulation language,指SELECT、UPDATE、INSERT、DELETE這4種對數(shù)據(jù)操控語句;?DDL:data definition language,數(shù)據(jù)定義語句,創(chuàng)建/修改/刪除表結(jié)構(gòu),主要有CREATE、ALTER、DROP等;?MDL鎖:Metadata Locking,這里的metalock指的是數(shù)據(jù)庫及表的結(jié)構(gòu)信息。MySQL中,DDL不屬于事務(wù)范疇,如果事務(wù)和DDL并行執(zhí)行,操作相關(guān)聯(lián)的表的話,會出現(xiàn)各種意想不到問題,導(dǎo)致事務(wù)特性被破壞或者binlog順序錯亂[1]等,為解決這些問題而引入MDL鎖機制。

三大范式

?第一范式:每個字段都是原子的,也就說不可再分解;?第二范式:有主鍵,非主鍵字段依賴主鍵字段;?第三范式:非主鍵之間不能相互依賴。

注意,三大范式是數(shù)據(jù)表的建議設(shè)計原則,并不是非得完全按照這個來設(shè)計,具體設(shè)計還要根據(jù)實際場景來分析。任何給定的數(shù)據(jù)通常有多種表示方法,完全的范式話和反范式化,以及二者的折中。在范式化數(shù)據(jù)庫中,任何數(shù)據(jù)都會出現(xiàn)且只出現(xiàn)一次,相反在反范式化中,數(shù)據(jù)是冗余的。

ACID

ACID是事務(wù)的4個特性,分別是原子性、一致性、隔離性和持久性。

?A:atomicity,原子性,一個事務(wù)必須被視為一個不可分割的最小工作單元,整個事務(wù)中的所有操作要么全部提交成功,要么全部失敗回滾;?C:consistency,一致性,數(shù)據(jù)庫總是從一個一致性的狀態(tài)轉(zhuǎn)換到另一個一致性的狀態(tài);?I:isolation,隔離性,通常來說,一個事務(wù)所做的修改在最終提交以前,對其他事務(wù)是不可見的(隔離級別在非提交讀時不滿足);?D:一旦事務(wù)提交,則其所做的修改就會永久保存到數(shù)據(jù)庫中。

隔離級別

數(shù)據(jù)庫事務(wù)的4種隔離級別:

?未提交讀:一個事務(wù)可以讀到另外一個事務(wù)未提交的數(shù)據(jù)。?提交度:一個事務(wù)更新數(shù)據(jù)過程中,如果事務(wù)還未提交,其他事務(wù)讀不到該數(shù)據(jù)。?可重復(fù)讀:該級別保證了在同一個事務(wù)中,多次讀取同樣記錄的結(jié)果是一樣的,解決了“提交讀”中不可重復(fù)讀的問題。但是理論上還是無法解決幻讀問題(通過間隙鎖可解決幻讀問題)。?串行化:將所有事務(wù)都進行串行化處理,等級最高的隔離級別。

幻讀問題

幻讀就是當事務(wù)在讀取某個范圍數(shù)據(jù)時,另一個事務(wù)又在該范圍插入了新的數(shù)據(jù),當之前的事務(wù)再次讀取該范圍數(shù)據(jù)時,就會產(chǎn)生幻行。產(chǎn)生幻讀的原因是之前的事務(wù)在讀取數(shù)據(jù)的范圍沒有增加范圍鎖(range-locks),也就是讀取時只是鎖定的行級共享鎖,沒有鎖定整個查詢區(qū)間或者表。

常見索引結(jié)構(gòu)

?B+樹索引:B+ 樹是關(guān)系型數(shù)據(jù)庫中常見的索引類型。注意:B+樹所以并不能找到一個給定鍵值的具體行,只能找到被查找數(shù)據(jù)行所在的頁,然后數(shù)據(jù)庫將頁讀入內(nèi)存,在內(nèi)存中進行查找,最后得到要查找的數(shù)據(jù);?哈希索引:InnoDB支持的哈希索引是自適應(yīng)的,不能人為干預(yù)在一張表中生成哈希索引,innodb會根據(jù)表的使用情況自動生成哈希索引;?全文索引:InnoDB支持全文索引,但是每張表只能有一個全文檢索的索引,一般都是使用倒排索引技術(shù)來實現(xiàn)。

聚集索引和非聚集索引

聚集索引就是主鍵索引,其葉子節(jié)點就是記錄的數(shù)據(jù)(頁)。非聚集索引也叫做輔助索引,其葉子結(jié)點記錄的是主鍵值。以表t為例說明如下:

create table T (ID int primary key,k int NOT NULL DEFAULT 0,s varchar(16) NOT NULL DEFAULT '',index k(k)) engine=InnoDB;
insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff');

表T對應(yīng)的主鍵索引和輔助索引如下:

MySQL基礎(chǔ)知識點整理

幾個日志

?redo log:記錄的是頁的物理操作,InnoDB通過將事務(wù)操作先寫redo log,而不是將數(shù)據(jù)頁的更新寫磁盤,相當于將磁盤隨機寫(data文件)變成了順序?qū)?redo log),后續(xù)在MySQL"空閑"時再慢慢寫磁盤,提高服務(wù)器性能;?undo log:undo log保存了事務(wù)發(fā)生之前的數(shù)據(jù)的版本,可用于回滾,同時可提供多版本并發(fā)控制讀(MVCC),也就是非鎖定讀。undo log是邏輯日志,在執(zhí)行undo時,僅僅是將數(shù)據(jù)邏輯上恢復(fù)至事務(wù)之前的狀態(tài),而不是從物理頁上操作的,這一條不同于redo log。事務(wù)開始時將當前版本生成undo log,undo也會產(chǎn)生redo來保證undo log可靠性;?binlog:binlog是mysql層面的歸檔日志,可用于主從復(fù)制和數(shù)據(jù)庫基于時間點的還原。binlog記錄的是邏輯日志,記錄的是DDL和DML操作日志,可以簡單認為是執(zhí)行過的事務(wù)中的更新sql語句。?慢查詢、錯誤日志等。

幾個文件

?.ibd文件和.ibdata文件:.ibd文件和ibdata文件都是存放innodb數(shù)據(jù)的文件,之所有有2個,因為innodb支持配置來決定是使用共享表空間還是獨享表空間。獨享表空間使用".ibd"文件存儲數(shù)據(jù),并且每個表有一個.ibd文件;如果使用共享表空間,則會使用ibdata文件,所有表公用一個(或者配置多個)ibdata文件。?.ifm文件:存放表相關(guān)的元數(shù)據(jù)信息。

感謝各位的閱讀,以上就是“MySQL基礎(chǔ)知識點整理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL基礎(chǔ)知識點整理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI