第九章 MySQL存儲引擎

課程回顧

1.存儲過程:是SQL語句和控制語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。
2.參數(shù):輸入類型、輸出類型、輸入&&輸出類型
3.創(chuàng)建:CREATE...PROCEDURE...
4.注意事項:

  • 創(chuàng)建存儲過程或者自定義函數(shù)時需要通過delimiter語句修改定界符
  • 如果函數(shù)體或過程體有多個語句,需要包含在BEGIN...END語句塊中
  • 存儲過程通過call調(diào)用

存儲引擎簡介

查看數(shù)據(jù)表的創(chuàng)建命令:SHOW CREATE table tbl_name
使用SHOW CREATE TABLE t;命令查看創(chuàng)建表t的命令,可以看到ENGINE=InnoDB這就是存儲引擎

存儲引擎:MySQL可以將數(shù)據(jù)以不同的技術(shù)存儲在文件(內(nèi)存)中,這種技術(shù)就稱為存儲引擎。

每一種存儲引擎使用不同的存儲機制、索引技巧、鎖定水平,最終提供廣泛且不同的功能。

MySQL支持的存儲引擎:
存儲引擎:

  • MyISAM
  • InnoDB
  • Memory
  • CSV
  • Archive

相關(guān)知識點之并發(fā)處理

并發(fā)控制:當(dāng)多個連接對記錄進行修改時保證數(shù)據(jù)的一致性和完整性。

例如兩個客戶端同時進行讀取和刪除操作,就會產(chǎn)生并發(fā)問題

在解決并發(fā)問題時,系統(tǒng)會使用一套鎖系統(tǒng)

鎖:

  • 共享鎖(讀鎖):在同一時間段內(nèi),多個用戶可以讀取同一個資源,讀取過程中數(shù)據(jù)不會發(fā)生任何變化。
  • 排它鎖(寫鎖):在任何時候只能有一個用戶寫入資源,當(dāng)進行寫鎖時會阻塞其他的讀鎖或者寫鎖操作。

鎖的粒度(顆粒):鎖定的單位,只需要對修改的數(shù)據(jù)加鎖,無需對所有資源加鎖

加鎖會增加MySQL系統(tǒng)的開銷,所以可以通過鎖策略在鎖開銷和數(shù)據(jù)安全之間尋求一種平衡

鎖顆粒:

  • 表鎖,是一種開銷最小的策略鎖。當(dāng)用戶對數(shù)據(jù)表操作時,就可以獲得寫權(quán)限,寫鎖會禁止其他用戶進行讀寫操作。如果對數(shù)據(jù)表加上表所,其他所有用戶都將無法操作,也就是這張表只能有一個鎖
  • 行鎖,是一種開銷最大的策略鎖。也是支持最大并發(fā)操作處理的情況。行鎖可能對于數(shù)據(jù)表中的每一條記錄都加鎖,所以是一種開銷最大的鎖策略。

相關(guān)知識點之事務(wù)處理

事務(wù)是數(shù)據(jù)庫區(qū)別于文件系統(tǒng)的重要特征之一
事務(wù)用于保證數(shù)據(jù)庫的完整性

Paste_Image.png

實現(xiàn)步驟:
1.從當(dāng)前賬戶減掉200元(賬戶余額大于等于200元)
2.在對方賬戶增加200元

這兩個過程應(yīng)該作為一個整體看待,這兩個過程無論哪一個出現(xiàn)問題,都應(yīng)該將數(shù)據(jù)恢復(fù)為原始狀態(tài)

事務(wù)的特性

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔離性(Isolation)
  • 持久性(Durability)

相關(guān)知識點之外鍵和索引

外鍵:保證數(shù)據(jù)一致性的策略
索引:對數(shù)據(jù)表中一列或多列的值進行排序的一種結(jié)構(gòu)
使用索引可以快速的訪問數(shù)據(jù)庫中的一些信息,是進行快速記錄的一種方法,類似于書的目錄
索引分類:普通索引、唯一索引、全文索引、btree索引、hash索引等

各個存儲引擎的特點

各個存儲引擎的特點就是根據(jù)以上這些特性劃分的


Paste_Image.png

通常用的多的是MyISAM和InooDB存儲引擎
MyISAM:適用于事務(wù)的處理不多的情況
InooDB:適用于事務(wù)處理較多,需要有外鍵支持的情況

其他存儲引擎:用的不多

  • CSV:是由','分割的存儲引擎,他會在數(shù)據(jù)庫子目錄中為每一個表創(chuàng)建一個.csv的文件,.csv文件是一種普通文本文件,每一個數(shù)據(jù)行占用一個文本行,csv存儲引擎不支持索引
  • BlackHole:黑洞引擎,寫入的數(shù)據(jù)都會消失,一般用于數(shù)據(jù)復(fù)制的中繼

設(shè)置存儲引擎

方法一:修改配置文件
通過修改MySQL配置文件實現(xiàn):
default-storage-engine = engine

在MySQL5.5版本中默認(rèn)使用的是InooDB

方法二:創(chuàng)建數(shù)據(jù)表命令實現(xiàn)
通過創(chuàng)建數(shù)據(jù)表命令實現(xiàn)
CREATE TABLE table_name(
...
...
) ENGINE = engine;

示例演示:創(chuàng)建一張表并把存儲引擎設(shè)置為MyISAM

CREATE TABLE tp1(
s1 VARCHAR(10)
) ENGINE = MyISAM;

使用SHOW CREATE TABLE tp1;查看創(chuàng)建數(shù)據(jù)表的命令可以看到存儲引擎已經(jīng)被修改成了 MyISAM

通過修改數(shù)據(jù)表的命令實現(xiàn):
ALTER TABLE table_name ENGINE [=] engine_name;

ALTER TABLE tp1 ENGINE = InnoDB;#修改tp1表的存儲引擎為InooDB
使用SHOW CREATE TABLE tp1;查看創(chuàng)建數(shù)據(jù)表的命令可以看到存儲引擎已經(jīng)被修改成了 InnoDB

總結(jié):
主要的存儲引擎:
MyISAM:存儲限制可達(dá)256TB,支持索引、表級鎖定、數(shù)據(jù)壓縮。
InnoDB:存儲限制為64TB,支持事務(wù)和索引,鎖顆粒為行鎖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容