關(guān)于MySQL的體系結(jié)構(gòu)及存儲引擎圖解
一、MySQL的體系結(jié)構(gòu)
① 結(jié)構(gòu)圖
② 各結(jié)構(gòu)的功能
連接層:最上層是一些客戶端和鏈接服務(wù),主要完成一些類似于連接處理、授權(quán)認(rèn)證、及相關(guān)的安全方 案。服務(wù)器也會為安全接入的每個(gè)客戶端驗(yàn)證它所具有的操作權(quán)限。
服務(wù)層:第二層架構(gòu)主要完成大多數(shù)的核心服務(wù)功能,如SQL接口,并完成緩存的查詢,SQL的分析 和優(yōu)化,部分內(nèi)置函數(shù)的執(zhí)行。所有跨存儲引擎的功能也在這一層實(shí)現(xiàn),如過程、函數(shù)等。
引擎層:存儲引擎真正的負(fù)責(zé)了MySQL中數(shù)據(jù)的存儲和提取,服務(wù)器通過API和存儲引擎進(jìn)行通信。 不同的存儲引擎具有不同的功能,這樣我們可以根據(jù)自己的需要,來選取合適的存儲引擎。
存儲層:主要是將數(shù)據(jù)存儲在文件系統(tǒng)之上,并完成與存儲引擎的交互。
二、存儲引擎
① 簡介及支持
② 建表時(shí),指定引擎
CREATE TABLE表名( 字段1字段1類型[COMMENT字段1注釋], ... 字段n字段n類型[COMMENT字段n注釋] )ENGINE = INNODB [COMMENT表注釋];
查看當(dāng)前數(shù)據(jù)庫支持的引擎
SHOW ENGINES;
三、各存儲引擎的特點(diǎn)
InnoDB
介紹:
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL 5.5之后,InnoDB是默認(rèn)的MySQL存儲引擎。
特點(diǎn):
DML操作遵循ACID模型,支持事務(wù)﹔
行級鎖,提高并發(fā)訪問性能;
支持外鍵FOREIGN KEY約束,保證數(shù)據(jù)的完整性和正確性;
文件:
xxx.ibd: xxx代表的是表名,innoDB引擎的每張表都會對應(yīng)這樣一個(gè)表空間文件,存儲該表的表結(jié)構(gòu)(frm、sdi)、數(shù)據(jù)和索引。
參數(shù): innodb_file_per_table
MyISAM
介紹:
MylSAM是MySQL早期的默認(rèn)存儲引擎。
特點(diǎn):
不支持事務(wù),不支持外鍵;
支持表鎖,不支持行鎖訪問速度快
文件:
xxx.sdi:存儲表結(jié)構(gòu)信息
xxx.MYD:存儲數(shù)據(jù)
xxx.MYI:存儲索引
Memory
介紹:
Memory引擎的表數(shù)據(jù)時(shí)存儲在內(nèi)存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為臨時(shí)表或緩存使用。
特點(diǎn):
內(nèi)存存放
hash索引(默認(rèn))
文件:
Xxx.sdi:存儲表結(jié)構(gòu)信息
對以上三種總結(jié):
四、存儲引擎的選擇
在選擇存儲引擎時(shí),應(yīng)該根據(jù)應(yīng)用系統(tǒng)的特點(diǎn)選擇合適的存儲引擎。對于復(fù)雜的應(yīng)用系統(tǒng),還可以根據(jù)實(shí)際情況選擇多種存儲引擎進(jìn)行組合。
- InnoDB:是Mysql的默認(rèn)存儲引擎,支持事務(wù)、外鍵。如果應(yīng)用對事務(wù)的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢之外,還包含很多的更新、刪除操作,那么InnoDB存儲引擎是比較合適的選擇。
- MyISAM:如果應(yīng)用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務(wù)的完整性、并發(fā)性要求不是很高,那么選擇這個(gè)存儲引擎是非常合適的。
- MEMORY:將所有數(shù)據(jù)保存在內(nèi)存中,訪問速度快,通常用于臨時(shí)表及緩存。MEMORY的缺陷就是對表的大小有限制,太大的表無法緩存在內(nèi)存中,而且無法保障數(shù)據(jù)的安全性。
注意:
- DDL:數(shù)據(jù)定義語言:這些語句定義不同的數(shù)據(jù)段、數(shù)據(jù)庫、表、列、索引等數(shù)據(jù)庫對象。常用語句關(guān)鍵字主要包括create,drop,alter,truncate等
- DML:數(shù)據(jù)操作語句:用于添加、刪除、更新和查詢數(shù)據(jù)庫記錄,并檢查數(shù)據(jù)完整性。常用語句關(guān)鍵字主要包括 insert,delete,update。
- DCL數(shù)據(jù)控制語句(Data Control Language):用來授權(quán)或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時(shí)間及效果,能夠?qū)?shù)據(jù)庫進(jìn)行監(jiān)視。比如常見的授權(quán)、取消授權(quán)、回滾、提交等等操作。
- DQL:數(shù)據(jù)查詢語言全稱是Data Query Language,是用來進(jìn)行數(shù)據(jù)庫中數(shù)據(jù)的查詢的,即最常用的select語句
ACID
原子性:是指事務(wù)是一個(gè)不可再分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。
一致性:是指在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性約束沒有被破壞。這是說數(shù)據(jù)庫事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。
隔離性:多個(gè)事務(wù)并發(fā)訪問時(shí),事務(wù)之間是隔離的,一個(gè)事務(wù)不應(yīng)該影響其它事務(wù)運(yùn)行效果。
持久性:意味著在事務(wù)完成以后,該事務(wù)所對數(shù)據(jù)庫所作的更改便持久的保存在數(shù)據(jù)庫之中,并不會被回滾。
到此這篇關(guān)于關(guān)于MySQL的體系結(jié)構(gòu)及存儲引擎圖解的文章就介紹到這了,更多相關(guān)MySQL體系結(jié)構(gòu)及存儲引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫遷移到Oracle數(shù)據(jù)庫的完整步驟記錄
在研發(fā)過程中可能會用到將表數(shù)據(jù)庫中的表結(jié)構(gòu)及數(shù)據(jù)遷移到另外一種數(shù)據(jù)庫中,比如說從mysql中遷移到oracle中,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫遷移到Oracle數(shù)據(jù)庫的完整步驟,需要的朋友可以參考下2024-06-06MySQL的存儲函數(shù)與存儲過程相關(guān)概念與具體實(shí)例詳解
MySQL存儲函數(shù)(自定義函數(shù)),函數(shù)一般用于計(jì)算和返回一個(gè)值,可以將經(jīng)常需要使用的計(jì)算或功能寫成一個(gè)函數(shù),存儲函數(shù)和存儲過程一樣,都是在數(shù)據(jù)庫中定義一些SQL語句的集合2023-03-03MySQL導(dǎo)入導(dǎo)出助手類庫MysqlHelper安裝使用
這篇文章主要為大家介紹了MySQL導(dǎo)入導(dǎo)出助手類庫MysqlHelper安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09PHP mysqli擴(kuò)展庫 預(yù)處理技術(shù)的使用分析
本篇文章,介紹了PHP mysqli擴(kuò)展庫 預(yù)處理技術(shù)的使用分析。需要的朋友參考下2013-05-05Mysql 5.7 忘記root密碼或重置密碼的詳細(xì)方法
在Centos中安裝完MySQL數(shù)據(jù)庫以后,不知道密碼,這可怎么辦,下面給大家說一下怎么重置密碼2016-12-12windows下MySQL5.6版本安裝及配置過程附有截圖和詳細(xì)說明
這篇文章主要介紹了windows下MySQL5.6版本安裝及配置過程附有截圖和詳細(xì)說明,需要的朋友可以參考下2013-06-06MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹
MySQL的配置文件my.cnf中默認(rèn)存在一行skip-external-locking的參數(shù),即跳過外部鎖定。根據(jù)MySQL開發(fā)網(wǎng)站的官方解釋,External-locking用于多進(jìn)程條件下為MyISAM數(shù)據(jù)表進(jìn)行鎖定2016-05-05MySQL刪除數(shù)據(jù)后自增主鍵ID不連貫問題及解決
這篇文章主要介紹了MySQL刪除數(shù)據(jù)后自增主鍵ID不連貫問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09