MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或內(nèi)存)中。每一種技術(shù)都使用不同的存儲(chǔ)機(jī)構(gòu),索引技巧,鎖定水平并且最終提供廣泛的不同的功能和能力。通過(guò)選擇不同的技術(shù),能夠獲得額外的速度或者功能,從而改善應(yīng)用的整體功能。這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱為存儲(chǔ)引擎。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括禮縣網(wǎng)站建設(shè)、禮縣網(wǎng)站制作、禮縣網(wǎng)頁(yè)制作以及禮縣網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,禮縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到禮縣省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
下面就為大家介紹兩種MySQL中比較常見(jiàn)的兩種存儲(chǔ)引擎:MyISAM和InnoDB
MyISAM存儲(chǔ)引擎是MySQL關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)5.5版本之前默認(rèn)的存儲(chǔ)引擎,它的前身是ISAM,ISAM執(zhí)行讀取操作的速度很快,而且不占用大量的內(nèi)存和存儲(chǔ)資源。但是也有他的不足之處:①、不支持事務(wù)處理;②、不能容錯(cuò),即如果硬盤崩潰了,那么數(shù)據(jù)文件就無(wú)法修復(fù)了,除非經(jīng)常備份所有的實(shí)時(shí)數(shù)據(jù),通過(guò)其復(fù)制特性,MySQL能夠支持這樣的備份應(yīng)用程序了。
.frm 文件存儲(chǔ)表定義
.MYD(MYData) 數(shù)據(jù)文件
.MYI(MYIndex) 索引文件
基于MyISAM這樣的特性,所以MyISAM主要適用于:一些非高并發(fā)的讀寫(xiě)不需要同時(shí)進(jìn)行的場(chǎng)所;如:電子商城。。。
InnoDB是為了處理巨大數(shù)據(jù)量時(shí)的最大性能而設(shè)計(jì)的。它的CPU效率可能是任何其他基于磁盤的關(guān)系數(shù)據(jù)庫(kù)引擎所不能匹敵的。
基于InnoDB的特性,所以InnoDB主要適用于:論壇、微博、銀行等高并發(fā)的場(chǎng)所
1. 查看數(shù)據(jù)庫(kù)目前使用的存儲(chǔ)引擎
mysql> use school; //進(jìn)入school數(shù)據(jù)庫(kù)
Database changed
mysql> show engines; //查看school默認(rèn)使用的存儲(chǔ)引擎,這里因?yàn)槲沂褂玫氖荕ySQL5.7版本的,所以默認(rèn)是InnoDB
引擎類型 是否能使用 是否支持事務(wù) 表示為當(dāng)前默認(rèn)的引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| 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. 查看表正在使用的存儲(chǔ)引擎
①、直接使用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)
//省略部分內(nèi)容
這里可以看到info使用的存儲(chǔ)引擎是InnoDB
②、進(jìn)入表所在的數(shù)據(jù)庫(kù),然后使用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表的存儲(chǔ)引擎是InnoDB;
這里也有四種方法進(jìn)行修改
①、使用alter table命令修改,(這里只針對(duì)現(xiàn)有的表或者數(shù)據(jù)庫(kù))圖示如下
mysql> use school; //進(jìn)入school數(shù)據(jù)庫(kù)
Database changed
mysql> show create table info; //查看當(dāng)前使用的存儲(chǔ)引擎
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| info | CREATE TABLE "info" (
"name" char(10) DEFAULT NULL,
"score" decimal(5,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | //這里可以看到默認(rèn)使用的InnoDB類型的
+-------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter table info engine=MyISAM; //使用alter table 命令進(jìn)行修改
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table info; //再次查看info表使用的存儲(chǔ)引擎類型
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------+
| info | CREATE TABLE "info" (
"name" char(10) DEFAULT NULL,
"score" decimal(5,2) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | //這里可以看到存儲(chǔ)引擎就被修改為MyISAM類型了
+-------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
②、修改MySQL的配置文件/etc/my.cnf,指定default-storage-engine選項(xiàng)設(shè)置默認(rèn)的存儲(chǔ)引擎 (這里針對(duì)的是后續(xù)新創(chuàng)建的表)
[root@localhost ~]# vim /etc/my.cnf
...省略
[mysqld]
...省略
pid-file = /usr/local/mysql/mysqld.pid
default-storage-engine=MyISAM //添加指定默認(rèn)存儲(chǔ)引擎類型MyISAM
socket = /usr/local/mysql/mysql.sock
...省略
修改了配置文件后需要重啟MySQL服務(wù)
> [root@localhost ~]# systemctl restart mysqld.service
重新啟動(dòng)MySQL服務(wù)后,我們?cè)俅芜M(jìn)入數(shù)據(jù)庫(kù),然后創(chuàng)建一個(gè)新的表,在查看存儲(chǔ)引擎
mysql> create database test; //創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)test
Query OK, 1 row affected (0.01 sec)
mysql> use test; //進(jìn)入test數(shù)據(jù)庫(kù)
Database changed
mysql> create table test (id int); //創(chuàng)建一個(gè)test表
Query OK, 0 rows affected (0.01 sec)
mysql> show create table test; //查看test表的存儲(chǔ)引擎
+-------+----------------------------+
| Table | Create Table |
+-------+----------------------------+
| test | CREATE TABLE "test" (
"id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | //這里可以看到存儲(chǔ)引擎就是MyISAM
+-------+----------------------------+
1 row in set (0.03 sec)
③、使用create table 創(chuàng)建表時(shí)用engine指定默認(rèn)的存儲(chǔ)引擎 (創(chuàng)建新表時(shí)自己指定)
mysql> use school;
Database changed
mysql> create table zyc (id int) engine=InnoDB; //創(chuàng)建一個(gè)新表zyc并且指定存儲(chǔ)引擎為InnoDB
Query OK, 0 rows affected (0.02 sec)
mysql> show create table zyc; //查看zyc的存儲(chǔ)引擎
+-------+------------------------------+
| Table | Create Table |
+-------+------------------------------+
| zyc | CREATE TABLE "zyc" (
"id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | //這里可以看到存儲(chǔ)引擎為InnoDB
+-------+------------------------------+
1 row in set (0.00 sec)
④、使用mysql_convert_table_format命令批量轉(zhuǎn)換存儲(chǔ)引擎,命令格式如下:
mysql_convert_table_format --user=root --password=密碼 --socket=/temp/mysql.sock --engine=引擎 庫(kù)名 表名
由于博主使用的是MySQL5.7版本,而這條命令只有MySQL5.5才有,所以這里就不詳細(xì)介紹了,如果有看官感興趣,可以自己安裝一個(gè)MySQL5.5嘗試下。
MySQL的存儲(chǔ)引擎到這里就介紹完了,后續(xù)請(qǐng)期待:MySQL增量備份、MySQL主從同步、MySQL讀寫(xiě)分離