資料庫儲存引擎

2022-06-30 06:00:14 字數 2699 閱讀 2361

儲存引擎即表型別,mysql根據不同的表型別會有不同的處理機制。

首先確定一點,儲存引擎的概念是mysql裡面才有的,不是所有的關係型資料庫都有儲存引擎這個概念,  

其實mysql支援多種儲存引擎,每種引擎有著一些自己獨特的功能,使用者在使用的時候,可以根據自己的業務場景來使用不同的儲存引擎,其中mysql最常用的儲存引擎為:myisam和innodb。

在詳細介紹這些儲存引擎之前,我們先來看看mysql的整個工作流程,看一下儲存引擎在**,mysql都做了哪些事情。

先看幾條指令

show engines;#檢視mysql所有的引擎,

show variables like "storage_engine%";檢視當前正在使用的引擎

1. myisam引擎特點

myisam引擎特點:

1.不支援事務

事務是指邏輯上的一組操作,組成這組操作的各個單元,要麼全成功要麼全失敗。

2.表級鎖定

資料更新時鎖定整個表:其鎖定機制是表級鎖定,也就是對錶中的乙個資料進行操作都會將這個表鎖定,其他人不能操作這個表,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其併發效能。

3.讀寫互相阻塞

不僅會在寫入的時候阻塞讀取,myisam還會再讀取的時候阻塞寫入,但讀本身並不會阻塞另外的讀。

4.只會快取索引

myisam可以通過key_buffer_size的值來提高快取索引,以大大提高訪問效能減少磁碟io,但是這個快取區只會快取索引,而不會快取資料。

5.讀取速度較快

占用資源相對較少

6.不支援外來鍵約束,但只是全文索引

2. innodb引擎特點

innodb引擎

介紹:innodb引擎是mysql資料庫的另乙個重要的儲存引擎,正稱為目前mysql ab所發行新版的標準,被包含在所有二進位制安裝包裡。和其他的儲存引擎相比,innodb引擎的優點是支援相容acid的事務(類似於postgresql),以及引數完整性(即對外鍵的支援)。oracle公司與2023年10月收購了innobase。innobase採用雙認證授權。它使用gnu發行,也允許其他想將innodb結合到商業軟體的團體獲得授權。

innodb引擎特點:

1.支援事務:支援4個事務隔離界別,支援多版本讀。

2.行級鎖定(更新時一般是鎖定當前行):通過索引實現,全表掃瞄仍然會是表鎖,注意間隙鎖的影響。

3.讀寫阻塞與事務隔離級別相關(有多個級別,這就不介紹啦~)。

4.具體非常高效的快取特性:能快取索引,也能快取資料。

5.整個表和主鍵與cluster方式儲存,組成一顆平衡樹。(了解)

6.所有secondaryindex都會儲存主鍵資訊。(了解)

7.支援分割槽,表空間,類似oracle資料庫。

8.支援外來鍵約束,不支援全文索引(5.5之前),以後的都支援了。

9.和myisam引擎比較,innodb對硬體資源要求還是比較高的。

小結:三個重要功能:supports transactions,row-level locking,and foreign keys

3. 事務介紹

簡單地說,事務就是指邏輯上的一組sql語句操作,組成這組操作的各個sql語句,執行時要麼全成功要麼全失敗。

例如:你給我轉賬5塊錢,流程如下

a.從你銀行卡取出5塊錢,剩餘計算money-5

b.把上面5塊錢打入我的賬戶上,我收到5塊,剩餘計算money+5.

上述轉賬的過程,對應的sql語句為:

update 你_account set money=money-5 where name='你';

update 我_account set money=money+5 where name='我';

上述的兩條sql操作,在事務中的操作就是要麼都執行,要麼都不執行,不然錢就對不上了。

這就是事務的原子性(atomicity)。

事務的四大特性:

1.原子性(atomicity)

事務是乙個不可分割的單位,事務中的所有sql等操作要麼都發生,要麼都不發生。

2.一致性(consistency)

事務發生前和發生後,資料的完整性必須保持一致。

3.隔離性(isolation)

當併發訪問資料庫時,乙個正在執行的事務在執行完畢前,對於其他的會話是不可見的,多個併發事務之間的資料是相互隔離的。也就是其他人的操作在這個事務的執行過程中是看不到這個事務的執行結果的,也就是他們拿到的是這個事務執行之前的內容,等這個事務執行完才能拿到新的資料。

4.永續性(durability)

乙個事務一旦被提交,它對資料庫中的資料改變就是永久性的。如果出了錯誤,事務也不允撤銷,只能通過'補償性事務'。

建立表時指定引擎的命令

create table t1(id int)engine=innodb; #指定innodb

create table t2(id int)engine=myisam; #指定myisam

資料庫儲存引擎

mysql中提到了儲存引擎這個概念。簡而言之,儲存引擎就是表的型別。資料庫的儲存引擎決定了表在計算機中的儲存方式。show engines語句可以檢視mysql資料庫支援的儲存引擎。innodb儲存引擎給mysql的表提供了事物,回滾,崩潰修復和多版本併發控制的事物安全。innodb是mysql上第...

資料庫儲存引擎

儲存引擎 處理表的處理器 1 基本操作 1 檢視所有的儲存引擎 show engines 2 檢視已有表的儲存引擎 show create table 表名 engine innodb 3 建立表時指定儲存引擎 create table 表名 engine myisam 4 工作中常用儲存引擎 in...

資料庫儲存引擎

資料庫引擎簡單來說就是乙個 資料庫發動機 當你訪問資料庫時,不管是手工訪問,還是程式訪問,都不是直接讀寫資料庫檔案,而是通過資料庫引擎去訪問資料庫檔案。以關係型資料庫為例,你發sql語句給資料庫引擎,資料庫引擎解釋sql語句,提取出你需要的資料返回給你。因此,對訪問者來說,資料庫引擎就是sql語句的...