目錄
?前言:
?MySQL體系結(jié)構(gòu)圖:
存儲(chǔ)引擎簡(jiǎn)介:
1. InnoDB存儲(chǔ)引擎:
2. MyISAM存儲(chǔ)引擎:
3. MEMORY存儲(chǔ)引擎:
4. NDB Cluster存儲(chǔ)引擎:
5. ARCHIVE存儲(chǔ)引擎:
存儲(chǔ)引擎語(yǔ)法:
ACID與行級(jí)鎖:
?總結(jié):
?前言:
經(jīng)過(guò)前面15篇的學(xué)習(xí),我們已經(jīng)學(xué)完了SQL的基本語(yǔ)法內(nèi)容,大致掌握了數(shù)據(jù)庫(kù)的操作,而接下來(lái)我們將進(jìn)行SQL的進(jìn)階學(xué)習(xí),今天我們要學(xué)習(xí)的內(nèi)容為:MySQL的存儲(chǔ)引擎。
?MySQL體系結(jié)構(gòu)圖:
MySQL的結(jié)構(gòu)體系主要包含以下幾個(gè)方面的內(nèi)容:
1. 服務(wù)器層(Server Layer):提供了MySQL的核心服務(wù),包括連接管理、查詢(xún)解析、優(yōu)化等功能。
2. 存儲(chǔ)引擎(Storage Engine):提供了數(shù)據(jù)的存儲(chǔ)和訪問(wèn)服務(wù)。MySQL自身支持多種存儲(chǔ)引擎,如InnoDB、MyISAM等,每種存儲(chǔ)引擎都有自己特有的特點(diǎn)和功能。
3. 網(wǎng)絡(luò)層(Connection Layer):提供了MySQL與客戶(hù)端之間的通訊服務(wù),支持多種協(xié)議,如TCP/IP、HTTP等。
4. 應(yīng)用編程接口(Application Programming Interfaces,APIs):提供了多種編程接口,包括C、C++、Python等接口,以方便應(yīng)用程序與MySQL進(jìn)行交互操作。
MySQL的整個(gè)體系結(jié)構(gòu)主要是由這幾個(gè)部分組成的,其中服務(wù)器層和存儲(chǔ)引擎層是MySQL核心的組成部分,分別負(fù)責(zé)提供核心服務(wù)和數(shù)據(jù)的存儲(chǔ)和訪問(wèn)服務(wù)。網(wǎng)絡(luò)層和應(yīng)用編程接口層則提供了與客戶(hù)端和應(yīng)用程序之間交互操作的相關(guān)服務(wù)。這些組成部分配合使用,構(gòu)成了MySQL強(qiáng)大、靈活的系統(tǒng)結(jié)構(gòu)。
InnoDB是MySQL5.5版本后的默認(rèn)使用存儲(chǔ)引擎。
存儲(chǔ)引擎簡(jiǎn)介:
存儲(chǔ)引擎就是存儲(chǔ)數(shù)據(jù),建立索引,更新/查詢(xún)數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方式。存儲(chǔ)引擎是基于表的,而不是基于庫(kù)的,所以存儲(chǔ)引擎也被稱(chēng)為是表結(jié)構(gòu)。
MySQL中的存儲(chǔ)引擎是處理數(shù)據(jù)存儲(chǔ)和檢索方面的核心組件。MySQL支持多種不同的存儲(chǔ)引擎,這些存儲(chǔ)引擎在某些方面有著自己的獨(dú)特優(yōu)勢(shì)。
常見(jiàn)的MySQL存儲(chǔ)引擎包括以下幾種:
1. InnoDB存儲(chǔ)引擎:
InnoDB存儲(chǔ)引擎是MySQL中最常用的一個(gè)存儲(chǔ)引擎,也是默認(rèn)的存儲(chǔ)引擎。它支持ACID事務(wù),具有行級(jí)鎖定和外鍵約束等特性,適合于應(yīng)用于事務(wù)性和高并發(fā)的應(yīng)用程序。InnoDB支持?jǐn)?shù)據(jù)的熱備份和恢復(fù),并提供了高效的緩存機(jī)制。
2. MyISAM存儲(chǔ)引擎:
MyISAM不支持事務(wù),并且對(duì)于更新操作會(huì)鎖定整個(gè)表,但是在插入和查詢(xún)方面性能非常好。對(duì)于只讀應(yīng)用、或者單線程的應(yīng)用,使用MyISAM可以獲得更好的性能。MyISAM表的特點(diǎn)是表鎖定,速度快,但是不支持事務(wù),也不支持外鍵等約束。
3. MEMORY存儲(chǔ)引擎:
MEMORY存儲(chǔ)引擎是將表數(shù)據(jù)存儲(chǔ)在內(nèi)存中,適用于一些處理銷(xiāo)售、環(huán)境監(jiān)測(cè)等數(shù)據(jù)的場(chǎng)景。MEMORY是一個(gè)非常快速的存儲(chǔ)引擎,但是它的缺點(diǎn)是,當(dāng)服務(wù)器關(guān)閉進(jìn)程或者崩潰時(shí),表數(shù)據(jù)就被清空了。MEMORY還支持Hash索引,這極大的提高了查詢(xún)效率。
4. NDB Cluster存儲(chǔ)引擎:
NDB Cluster可以將一個(gè)數(shù)據(jù)庫(kù)拆分成多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都維護(hù)一個(gè)數(shù)據(jù)子集,并協(xié)同工作以支持完整的數(shù)據(jù)庫(kù)操作。這種存儲(chǔ)引擎用于大規(guī)模、高可用性的數(shù)據(jù)中心。
5. ARCHIVE存儲(chǔ)引擎:
ARCHIVE存儲(chǔ)引擎是一種僅用于存檔目的的存儲(chǔ)引擎,適用于一些數(shù)據(jù)日志、快照備份等場(chǎng)景。它旨在提供一個(gè)非常低的磁盤(pán)空間消耗和一個(gè)高性能的壓縮和解壓縮能力,不支持索引、更新和刪除操作,常用于寫(xiě)入數(shù)據(jù)后壓縮存檔。?
不同的存儲(chǔ)引擎在性能、特性、使用場(chǎng)景等方面各不相同,開(kāi)發(fā)者在使用MySQL時(shí)需要根據(jù)需求選擇合適的存儲(chǔ)引擎。
存儲(chǔ)引擎語(yǔ)法:
1.查詢(xún)當(dāng)前表的引擎:
show create table 表名;
運(yùn)行結(jié)果:
?2.在創(chuàng)建表的時(shí)候指定存儲(chǔ)引擎:
create table name(
字段1 字段類(lèi)型
....
字段2 字段類(lèi)型
) ENGINE = 引擎類(lèi)型;
?實(shí)例:
create table try(
id int
) engine = MyISAM;
運(yùn)行結(jié)果:
3.查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)支持的引擎類(lèi)型:
show engines ;
運(yùn)行結(jié)果:
ACID與行級(jí)鎖:
ACID
? ? ?是一個(gè)表示事務(wù)處理基本原則的縮寫(xiě),包括以下四個(gè)方面:
原子性(Atomicity):一個(gè)事務(wù)被視為一個(gè)原子操作,它將所有的任務(wù)都視為一個(gè)整體(如果其中有一部分操作失敗,整個(gè)事務(wù)就會(huì)被回滾),要么全部完成,要么全部不完成。
一致性(Consistency):在事務(wù)開(kāi)始之前和事務(wù)結(jié)束之后,數(shù)據(jù)庫(kù)的狀態(tài)必須保持一致,這意味著事務(wù)執(zhí)行中間不能破壞數(shù)據(jù)庫(kù)的完整性約束。
隔離性(Isolation):隔離性指在數(shù)據(jù)庫(kù)執(zhí)行多個(gè)事務(wù)時(shí),每個(gè)事務(wù)都應(yīng)該是完全獨(dú)立的,執(zhí)行它們的順序不應(yīng)該影響結(jié)果。
持久性(Durability):持久性是指在事務(wù)完成之后,其產(chǎn)生的結(jié)果必須永久保存在數(shù)據(jù)庫(kù)中,即使出現(xiàn)了硬件故障或其他系統(tǒng)故障,也不能影響已提交的事務(wù)結(jié)果。
行級(jí)鎖:??
? ? ? 行級(jí)鎖(Row-Level Lock)是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中的一種鎖機(jī)制,在處理并發(fā)讀寫(xiě)時(shí),對(duì)每一行數(shù)據(jù)進(jìn)行鎖定,以保證同時(shí)讀寫(xiě)的數(shù)據(jù)不會(huì)沖突。與傳統(tǒng)的表級(jí)鎖(Table-Level Lock)不同,行級(jí)鎖可以在只對(duì)某一行進(jìn)行加鎖的情況下,并發(fā)地處理多個(gè)事務(wù),從而提高數(shù)據(jù)處理的效率。
? ? ? ?行級(jí)鎖的工作原理是:在對(duì)一行數(shù)據(jù)進(jìn)行修改/刪除操作之前,向該行添加一個(gè)鎖定標(biāo)記,直到事務(wù)完成或在commit/rollback之后才釋放這行鎖定標(biāo)記。
? ? ? ?行級(jí)鎖的主要優(yōu)點(diǎn)包括:
? ? ? 1. 提高了并發(fā)性:行級(jí)鎖可以鎖定單獨(dú)的行而不是整個(gè)表,這意味著在并發(fā)訪問(wèn)時(shí)可以更加高效的實(shí)現(xiàn)讀和寫(xiě)的操作。
? ? ? 2. 減少了鎖定沖突:使用行級(jí)鎖可以減少鎖定并發(fā)訪問(wèn)帶來(lái)的沖突,避免了串行化操作,從而提高了執(zhí)行效率。
? ? ?3. 支持更高的事務(wù)處理能力:通過(guò)優(yōu)化鎖機(jī)制,行級(jí)鎖降低了鎖等待時(shí)間和鎖競(jìng)爭(zhēng)的頻率,從而支持更高的事務(wù)處理能力。
? ? ?需要注意的是,行級(jí)鎖在使用時(shí)需要控制兩個(gè)方面的問(wèn)題:鎖定粒度和鎖定時(shí)間。鎖的粒度太細(xì),可能會(huì)導(dǎo)致鎖定的數(shù)據(jù)量過(guò)大,導(dǎo)致鎖競(jìng)爭(zhēng)的開(kāi)銷(xiāo)過(guò)大;鎖的時(shí)間過(guò)長(zhǎng),又可能會(huì)影響并發(fā)讀寫(xiě)性能。因此在使用行級(jí)鎖時(shí),需要權(quán)衡粒度和時(shí)間兩個(gè)方面的因素,并根據(jù)實(shí)際應(yīng)用需求進(jìn)行適當(dāng)調(diào)整。
?總結(jié):
? ? ? ? 存儲(chǔ)引擎就是存儲(chǔ)數(shù)據(jù),建立索引,更新/查詢(xún)數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方式。?我們根據(jù)不同的需求來(lái)選擇不同的引擎來(lái)處理表數(shù)據(jù),可以使得效率大大提高。
今天的內(nèi)容到這里就結(jié)束了,感謝大家的閱讀。
如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-480803.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-480803.html
到了這里,關(guān)于【MySQL數(shù)據(jù)庫(kù) | 第十六篇】存儲(chǔ)引擎的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!