在之前的文章中我們說過MySQL事務,現在大家都應該知道了MySQL事務了吧,還記得事務的ACID原則嗎?不記得的童鞋可以回顧一下《MySQL之事務初識》,其實呀,更嚴謹一點的話,應該是MySQL InnoDB存儲引擎,因為在MySQL中,只有InnoDB存儲引擎才支持事務??吹酱颂?,有些朋友可能有以下疑問:
存儲引擎是什么?
MySQL中有哪些存儲引擎?
每個存儲引擎有哪些特點以及區別?
下面,我們帶著這些疑問,依次往下看:
存儲引擎是什么?
通俗一點來說,MySQL是用來保存數據的對不對?我們可以把存儲引擎看作是一種存儲文件的方式以及該方式附屬的一整套工具,其中每個存儲文件方式的特點就是該存儲引擎的特點。
例如:Memory存儲引擎將數據保存至內存中,其優點是:讀寫快,但是數據不是持久到磁盤中的,非常容易丟失等等。
MySQL中的存儲引擎
在MySQL 5.7版本中,MySQL支持的存儲引擎有:
InnoDB
MyISAM
Memory
CSV
Archive
Blackhole
Merge:
Federated
Example
下面只介紹常用的存儲引擎,其他沒介紹的存儲引擎,有興趣的童鞋,可以自己自行搜索。
InnoDB:支持事務操作(如 begin, commit,rollback命令),支持行級鎖,行級鎖相對于表鎖,其粒度更細,允許并發量更大,這里面細節還挺多的,下次,我們單獨寫一篇)支持外鍵引用完整性約束。InnoDB存儲引擎也是MySQL 5.7版本中默認的存儲引擎。其缺點是:存儲空間會占用比較大。
MyISAM:該存儲引擎存儲占用的空間相對與InnoDB存儲引擎來說會少很多,但其支持的為表鎖,其并發性能會低很多,而且不支持事務,通常只應用于只讀模式的應用。它是MySQL最原始的存儲引擎。
Memory:該存儲引擎最大的特點是,所有數據均保存在內存中,之前還有個名字叫做 「Heap」。
應用場景: 主要存儲一些需要快速訪且非關鍵數據,為什么不是關鍵數據呢?就因為其所有數據保存在內存中,也可以理解為不安全。
CSV:首先先認識一下CSV,CSV文件其實就是用逗號分隔開的文本文件,常用于數據轉換,該類型平時用的比較少,不支持索引。
Archive:存檔文件,主要用于存儲很少用到的引用文件,
Example:該存儲引擎主要用于展示如何自行編寫一個存儲引擎,一般不會用作生產環境使用。
如何選擇存儲引擎
大家通過上面的比較應該已經看出來了,InnoDB存儲引擎是支持事務,支持外鍵并支持行級鎖的。對于需要在線事務處理的應用最合適不過了,我們在選擇存儲引擎時,如果沒有特別的理由,我的建議是選擇InnoDB作為存儲引擎。
1、我們可以在創建table時,指定存儲引擎,如果未指定,則使用默認的存儲引擎。
create table t_base_user(
oid bigint(20) not null primary key auto_increment comment "",
created_at datetime null comment ''
)engine=innodb
2、(方法一) 顯示該表的存儲引擎
mysql> show table status like "t_base_user" \G;
*************************** 1. row ***************************
Name: t_base_user
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 1
Create_time: 2017-12-17 20:10:24
Update_time: NULL
Check_time: NULL
Collation: utf8_unicode_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.01 sec)
3、(方法二) 顯示表的存儲引擎信息
mysql> show create table t_base_user\G;
*************************** 1. row ***************************
Table: t_base_user
Create Table: CREATE TABLE `t_base_user` (
`oid` bigint(20) NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
PRIMARY KEY (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.00 sec)
另外需要注意的是: 不建議修改表的存儲引擎,在創建表時,就要需要考慮好,使用什么存儲引擎。
今日命令
命令: show engines;
標準語法:show stroage engines;
其中stroage為可選項。
作用:顯示當前MySQL版本支持的存儲引擎。
例子(MySQL版本: 5.7.20):
mysql> show storage engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+---------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
使用場景:在查看當前數據庫版本支持的存儲引擎,查看默認存儲引擎時非常實用。
Engine:存儲引擎名稱。
Support: 表示MySQL當前服務器版本是否支持該存儲引擎,YES為支持 NO 為不支持。
Comment:為該存儲引擎的特性,如Innodb
支持事務,行級鎖等。
Transactions:是否支持事務,YES為支持,No為不支持。
XA和Savepoints:這兩個屬性,與事務相關,當Transactions為Yes時,這兩個屬性才有意義,否則均為NO。
您可能感興趣的文章:- 簡述MySQL InnoDB存儲引擎
- 簡單了解MySQL存儲引擎
- MySql 存儲引擎和索引相關知識總結
- MySQL MyISAM默認存儲引擎實現原理
- 淺談MySQL中四種常用存儲引擎
- MySQL存儲引擎InnoDB的配置與使用的講解
- MySQL存儲引擎MyISAM與InnoDB區別總結整理
- MySQL常用存儲引擎功能與用法詳解
- MySQL的常見存儲引擎介紹與參數設置調優
- 聊聊MySQL中的存儲引擎