MySQL基礎入門學習【14】存儲引擎
查看數據表的創建命令:
【存儲引擎】: MySQL可以將數據以不同的奇數存儲在文件(內存)中,這種技術就成為存儲引擎
每一種存儲引擎都使用了不同的存儲機制、索引技巧、鎖定水平,最終提供廣泛且不同的功能
在關系型數據庫當中,數據的存儲是以表的形式來實現的。所以存儲引擎也可以稱為表類型
【MySQL支持的存儲引擎】:
MyISAM,
InnoDB,
Memory,
CSV,
Archive
【並發處理】:
並發控制: 當多個連接對記錄進行操作時保證數據的一致性和完整性的技術。
例如兩個用戶同時登陸,其中一個要對某一行記錄刪除,而另一個用戶恰好要讀取這一行記錄,
結果可能是正在讀取信息的用戶報錯而退出,也可能得到一條與實際記錄不符的信息。
解決這類經典問題的方法就是使用並發控制: 在處理並發讀或並發寫時,系統會使用一套鎖系統來解決這個問題。
這個鎖系統由兩類【鎖】來組成:
【共享鎖(讀鎖)】: 在同一時間段內,多個用戶可以讀取同一個資源,讀取過程中數據不會發生任何變化(相互不做幹擾);
【排他鎖(寫鎖)】: 在任何時候只能有一個用戶寫入資源,當進行寫鎖時會阻塞其他的讀鎖或者寫鎖操作(出於安全策略的考慮)。
【鎖的顆粒】: 鎖定時的單位。我們其實只需要對修改的數據精確加鎖即可,而無需對所有資源均加鎖。加鎖只加最對的,而不是加最大的。
加鎖會增加系統的開銷: 我們通過鎖策略在鎖開銷與數據安全之間尋求一種平衡
【表鎖】:是一種開銷最小的鎖策略。 當用戶針對某數據表進行操作時,用戶即獲得了對該表的寫鎖權限,寫鎖會禁止其他用戶的讀、寫操作。這張表只能有一個鎖。
【行鎖】:是一種開銷最大的鎖策略,是支持最大並發操作處理的情況。這張表中有多少條記錄就可能對每一個記錄都有一個鎖
【事務處理】:【事務】是數據庫區別於文件系統的重要特征之一, 用於保證數據庫的完整性。
例如,某個用戶要通過網銀給別人轉200元,則操作如下:
1. 從當前賬戶減掉200元(賬戶余額大於等於200元);
2. 在對方賬戶增加200元。
兩個過程應該作為一個整體出現,無論哪個過程出現了問題,都應該恢復到數據的原始狀態。
【事務的特性——ACID】:
1. 原子性(Atomicity)
2. 一致性(Consistency)
3. 隔離性(Isolation)
4. 持久性 (Durability)
【外鍵和索引】: 【外鍵】是保證數據一致性的策略 (see http://www.cnblogs.com/jade-91/p/8672669.html)
【索引】是對數據表中一列或多列的值進行排序的一種結構,使用索引可以快速地訪問數據表當中的特定信息,是進行記錄快速定位的一種方法(類比書的目錄)。
可分為普通索引、唯一索引、全文索引、btree索引、hash索引......
【各個存儲引擎特點】
特點 | MyISAM | InnoDB | Memory | Archive |
存儲限制 | 256TB | 64TB | 有 (由內存大小決定) | 無 |
事務安全 | - | 支持 | - | - |
支持索引 | 支持 | 支持 | 支持 | |
鎖顆粒 | 表鎖 | 行鎖 | 表鎖 | 行鎖 |
數據壓縮 | 支持 | - | - | 支持 |
支持外鍵 | - | 支持 | - | - |
此外, CSV是由逗號分隔的存儲引擎,會在數據庫的子目錄中為每一表創建一個.csv文件(一種普通的文本文件),每一個數據行占用一個文本行,不支持索引
BlackHole: 黑洞引擎,寫入的數據都會消失,一般用於做數據復制的中繼。
一般最常用的存儲引擎是MyISAM 和 InnoDB這兩種存儲引擎。
其中,MyISAM適用於事務的處理不多的情況;
InnoDB適用於事務處理比較多,需要有外鍵支持的情況。
大牛們也可以對數據引擎進行擴展。
【設置存儲引擎】
【修改存儲引擎的方法】:
方法一:通過修改MySQL配置文件實現: default-storage-engine = engine_name
方法二:通過創建數據表命令實現:
CREATE TABLE table_name (
...
...
) ENGINE = engine_name;
方法三:通過修改數據表命令實現
ALTER TABLE table_name ENGINE [=] engine_name;
MySQL基礎入門學習【14】存儲引擎