MySQL中的數據用各類不一樣的技術存儲在文件(或內存)中。每一種技術都使用不一樣的存儲機構,索引技巧,鎖定水平而且最終提供普遍的不一樣的功能和能力。經過選擇不一樣的技術,可以得到額外的速度或者功能,從而改善應用的總體功能。這些不一樣的技術以及配套的相關功能在MySQL中被稱爲存儲引擎。mysql
下面就爲你們介紹兩種MySQL中比較常見的兩種存儲引擎:MyISAM和InnoDBsql
MyISAM存儲引擎是MySQL關係數據庫系統5.5版本以前默認的存儲引擎,它的前身是ISAM,ISAM執行讀取操做的速度很快,並且不佔用大量的內存和存儲資源。可是也有他的不足之處:①、不支持事務處理;②、不能容錯,即若是硬盤崩潰了,那麼數據文件就沒法修復了,除非常常備份全部的實時數據,經過其複製特性,MySQL可以支持這樣的備份應用程序了。數據庫
.frm 文件存儲表定義vim
.MYD(MYData) 數據文件緩存
.MYI(MYIndex) 索引文件併發
基於MyISAM這樣的特性,因此MyISAM主要適用於:一些非高併發的讀寫不須要同時進行的場所;如:電子商城。。。app
InnoDB是爲了處理巨大數據量時的最大性能而設計的。它的CPU效率多是任何其餘基於磁盤的關係數據庫引擎所不能匹敵的。socket
基於InnoDB的特性,因此InnoDB主要適用於:論壇、微博、銀行等高併發的場所ide
1. 查看數據庫目前使用的存儲引擎高併發
mysql> use school; //進入school數據庫 Database changed mysql> show engines; //查看school默認使用的存儲引擎,這裏由於我使用的是MySQL5.7版本的,因此默認是InnoDB 引擎類型 是否能使用 是否支持事務 表示爲當前默認的引擎 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | 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.01 sec)
2. 查看錶正在使用的存儲引擎
①、直接使用show table status;圖示以下
mysql> mysql> show table status from school where name='info'; +------+--------+---------+------------+------+ | Name | Engine | Version | Row_format | Rows | +------+--------+---------+------------+------+ | info | InnoDB | 10 | Dynamic | 1 | +------+--------+---------+------------+------+ 1 row in set (0.00 sec) //省略部份內容
這裏能夠看到info使用的存儲引擎是InnoDB
②、進入表所在的數據庫,而後使用show create 命令;圖示以下
mysql> use school; Database changed mysql> show create table info; +-------+--------------------------------------+ | Table | Create Table | +-------+--------------------------------------+ | info | CREATE TABLE "info" ( "name" char(10) DEFAULT NULL, "score" decimal(5,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+--------------------------------------+ 1 row in set (0.00 sec)
這裏也能夠直接看到info表的存儲引擎是InnoDB;
這裏也有四種方法進行修改
①、使用alter table命令修改,(這裏只針對現有的表或者數據庫)圖示以下
mysql> use school; //進入school數據庫 Database changed mysql> show create table info; //查看當前使用的存儲引擎 +-------+--------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------------------------+ | info | CREATE TABLE "info" ( "name" char(10) DEFAULT NULL, "score" decimal(5,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | //這裏能夠看到默認使用的InnoDB類型的 +-------+--------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> alter table info engine=MyISAM; //使用alter table 命令進行修改 Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table info; //再次查看info表使用的存儲引擎類型 +-------+--------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------------------------+ | info | CREATE TABLE "info" ( "name" char(10) DEFAULT NULL, "score" decimal(5,2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | //這裏能夠看到存儲引擎就被修改成MyISAM類型了 +-------+--------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
②、修改MySQL的配置文件/etc/my.cnf,指定default-storage-engine選項設置默認的存儲引擎 (這裏針對的是後續新建立的表)
[root@localhost ~]# vim /etc/my.cnf ...省略 [mysqld] ...省略 pid-file = /usr/local/mysql/mysqld.pid default-storage-engine=MyISAM //添加指定默認存儲引擎類型MyISAM socket = /usr/local/mysql/mysql.sock ...省略 修改了配置文件後須要重啓MySQL服務 > [root@localhost ~]# systemctl restart mysqld.service 從新啓動MySQL服務後,咱們再次進入數據庫,而後建立一個新的表,在查看存儲引擎 mysql> create database test; //建立一個新的數據庫test Query OK, 1 row affected (0.01 sec) mysql> use test; //進入test數據庫 Database changed mysql> create table test (id int); //建立一個test表 Query OK, 0 rows affected (0.01 sec) mysql> show create table test; //查看test表的存儲引擎 +-------+----------------------------+ | Table | Create Table | +-------+----------------------------+ | test | CREATE TABLE "test" ( "id" int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | //這裏能夠看到存儲引擎就是MyISAM +-------+----------------------------+ 1 row in set (0.03 sec)
③、使用create table 建立表時用engine指定默認的存儲引擎 (建立新表時本身指定)
mysql> use school; Database changed mysql> create table zyc (id int) engine=InnoDB; //建立一個新表zyc而且指定存儲引擎爲InnoDB Query OK, 0 rows affected (0.02 sec) mysql> show create table zyc; //查看zyc的存儲引擎 +-------+------------------------------+ | Table | Create Table | +-------+------------------------------+ | zyc | CREATE TABLE "zyc" ( "id" int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | //這裏能夠看到存儲引擎爲InnoDB +-------+------------------------------+ 1 row in set (0.00 sec)
④、使用mysql_convert_table_format命令批量轉換存儲引擎,命令格式以下:
mysql_convert_table_format --user=root --password=密碼 --socket=/temp/mysql.sock --engine=引擎 庫名 表名
因爲博主使用的是MySQL5.7版本,而這條命令只有MySQL5.5纔有,因此這裏就不詳細介紹了,若是有看官感興趣,能夠本身安裝一個MySQL5.5嘗試下。
MySQL的存儲引擎到這裏就介紹完了,後續請期待:MySQL增量備份、MySQL主從同步、MySQL讀寫分離