1、什麼是存儲引擎?
存儲引擎就是指表的類型,數據庫的存儲引擎決定了表在計算機中的存儲方式。而存儲引擎的概念是MySQL的特點,是一種插入式的存儲引擎概念。MySQL數據庫中的表可以使用不同的方式存儲。
2、如何查看MySQL 中支持的存儲引擎?
在命令行中輸入: SHOW ENGINES;
mysql>SHOW ENGINES; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MRG_MYISAM | YES | Collection of identical MyISAM tables | 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 | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)
在命令後面通過參數 ‘\G’可以調整數據的輸出格式,使得顯示更加直觀。
mysql> SHOW ENGINES \G
mysql>SHOW ENGINES \G
*************************** 1. row *************************** Engine: FEDERATED Support: NO Comment: Federated MySQL storage engine Transactions: NULL XA: NULL Savepoints: NULL *************************** 2. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 6. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO *************************** 7. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine Transactions: NO XA: NO Savepoints: NO *************************** 8. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 9. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO 9 rows in set (0.00 sec)
查詢結果參數說明:
Engine參數:表示存儲引擎的名稱
Support參數:表示是否支持該類型的存儲引擎,YES表示支持,NO表示不支持。
Comment參數:對該引擎的一些描述。
Transactions 參數:表示是否支持事務處理,YES表示支持,NO不支持。
XA參數:表示是否遵循分佈式交易處理的XA規範,YES 支持,NO不支持。
Savepoints參數:表示是否支持保存點,可以使事務回滾到保存點,yes表示支持。
其它方法查詢:
mysql> SHOW VARIABLES LIKE 'have%'
查詢結果如下:
mysql>SHOW VARIABLES LIKE 'have%'; +----------------------+----------+ | Variable_name | Value | +----------------------+----------+ | have_compress | YES | | have_crypt | NO | | have_dynamic_loading | YES | | have_geometry | YES | | have_openssl | DISABLED | | have_profiling | YES | | have_query_cache | YES | | have_rtree_keys | YES | | have_ssl | DISABLED | | have_symlink | YES | +----------------------+----------+ 10 rows in set (0.00 sec)
參數說明:Variable_name表示存儲引擎的名稱, Value表示MySQL的支持情況
YES 表示支持,NO表示不支持,DISABLED 表示支持但沒有開啓。
查看默認支持的存儲引擎:
Mysql> SHOW VARIABLE LIKE 'storage_engine';
mysql>SHOW VARIABLES LIKE 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ 1 row in set (0.00 sec)
從輸出結果中看出,本版本中用的默認存儲引擎爲InnoDB
注意:本實驗中用到的mysql版本爲5.6,在使用5.7的版本輸入該命令時,發現
不能輸出,出現警告信息,原因未知。
可以 通過修改MySQL的配置文件,來修改MySQL中默認的存儲引擎,在my.ini文件
中將"default-storage-engine=INNODB"改爲“default-storage-engine=MyISAM”,修改完成後
需要重啓一下服務,修改才能生效。
3、InnoDB存儲引擎
InnoDB 是MySQL數據庫中的默認的存儲引擎,InnoDB給MySQL表提供了事務、回滾、崩潰修
復能力 和多版本併發控制的事務安全 。
特點:
1> 支持自增長列AUTO_INCREMENT ,自增長列不能爲空,而且值必須唯一,在MySQL中規定自增長列必須爲主鍵。
2> 支持外鍵FOREIGN KEY 外鍵所在的表爲子表,外鍵所依賴的表爲父表。父表中被子表
外鍵關聯 的字段必須爲主鍵。當刪除、更新父表中的某條信息時,子表也必須有相應的改變。
3> InnoDB存儲引擎創建的表的表結構存儲在.frm文件中。數據和索引存儲在innodb_data_home_dir和innodb_data_file_path定義的表空間中。
優點:提供良好的事務管理、崩潰修復能力和併發控制。
缺點: 讀寫效率稍差,佔用的數據空間相對較大。
4、 MyISAM存儲引擎
特點:MyISAM存儲引擎的表存儲爲3個文件。文件名與表名相同。擴展名包括frm、MYD、
MYI 。frm爲擴展名的文件存儲表的結構,MYD爲擴展名的文件存儲數據,MYI爲擴展名的文件存儲索引。
優點:佔用空間小。處理速度快。
缺點:不支持事務的完整性和併發性。
5、MEMORY 存儲引擎
MEMORY存儲引擎是存儲在內存中的內容來創建表,所有的數據都是放在內存中的。每個MEMORY存儲引擎的表對應一個磁盤文件。文件名與表名相同,類型爲frm 該文件只存儲表的結構。數據文件是存儲在內存當中的,有利於數據的快速處理,提高整個表的處理效率。
6、InnoDB 、MyISAM、MEMORY三種存儲引擎的對比
表1 3種存儲引擎的對比
特性 | InnoDB | MyISAM | MEMORY |
事務安全 | 支持 | 無 | 無 |
存儲限制 | 64TB | 有 | 有 |
空間使用 | 高 | 低 | 低 |
內存使用 | 高 | 低 | 高 |
插入數據的速度 | 低 | 高 | 高 |
對外鍵的支持 | 支持 | 無 | 無 |