您好,登錄后才能下訂單哦!
MySQL中的數據用各種不同的技術存儲在文件(或內存)中。每一種技術都使用不同的存儲機構,索引技巧,鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,能夠獲得額外的速度或者功能,從而改善應用的整體功能。這些不同的技術以及配套的相關功能在MySQL中被稱為存儲引擎。
下面就為大家介紹兩種MySQL中比較常見的兩種存儲引擎:MyISAM和InnoDB
MyISAM存儲引擎是MySQL關系數據庫系統5.5版本之前默認的存儲引擎,它的前身是ISAM,ISAM執行讀取操作的速度很快,而且不占用大量的內存和存儲資源。但是也有他的不足之處:①、不支持事務處理;②、不能容錯,即如果硬盤崩潰了,那么數據文件就無法修復了,除非經常備份所有的實時數據,通過其復制特性,MySQL能夠支持這樣的備份應用程序了。
.frm 文件存儲表定義
.MYD(MYData) 數據文件
.MYI(MYIndex) 索引文件
基于MyISAM這樣的特性,所以MyISAM主要適用于:一些非高并發的讀寫不需要同時進行的場所;如:電子商城。。。
InnoDB是為了處理巨大數據量時的最大性能而設計的。它的CPU效率可能是任何其他基于磁盤的關系數據庫引擎所不能匹敵的。
基于InnoDB的特性,所以InnoDB主要適用于:論壇、微博、銀行等高并發的場所
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讀寫分離
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。