存储引擎
什么是存储引擎,有什么用?
存储引擎是mysql中特有的一个术语,其他数据库中没有(oracle中有,但是不叫这个名字)。
实际上存储引擎是一个表存储/组织数据的方式。
不同的存储引擎,表存储数据的方式不同。
怎么给表添加/指定“存储引擎”?
可以在建表的时候给表指定存储引擎。
mysql> show create table t_user;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| t_user | CREATE TABLE `t_user` (
`id` int DEFAULT NULL,
`name` varchar(255) NOT NULL,
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)
在建表的时候可以在最后小括号“)”的右边使用。
ENGINE来指定存储引擎。
CHARSET来指定这张表的字符编码方式。
结论:
mysql默认的存储引擎是:InnoDB。
mysql默认的字符编码方式是utf8。
utf8是utf8mb3的别名,即默认就是utf8mb3。今后的mysql版本中,utf8的默认值可能改为utf8mb4(utf8mb4是utf8的超集)。所以,为了避免出现问题,最好在创建数据库时直接指明是utf8mb3还是utf8mb4,不要用utf8这个可能导致歧义的名称。
建表时指定存储引擎,以及字符编码格式
create table t_user(
id int primary key,
name varchar(255)
)engine=InnoDB defaule charset=utf8;
怎么查看mysql支持哪些存储引擎?
mysql> show engines \G
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
9 rows in set (0.00 sec)
mysql支持九大存储引擎,版本不同,支持情况不同。
mysql常用存储引擎
-
MyISAM存储引擎
使用三个文件表示每个表:
格式文件–存储表结构的定义(mytable.frm)
数据文件–存储表行的内容(mytable.MYD)
索引文件–存储表上索引(mytable.MYI)
MyISAM存储引擎特点:
可被转换为压缩,只读表来节省空间。
缺点:不支持事务,安全性低。
-
InnoDB存储引擎
这是mysql默认的存储引擎
InnoDB支持事务,支持数据库崩溃后自动恢复机制。
InnoDB存储引擎最主要特点:
非常安全,支持事务(效率不高,并且不能压缩,不能转换为只读,不能很好的节省存储空间)
-
MEMORY存储引擎
使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定。
MEMORY存储引擎特点:
非常快(查询效率最高,不需要和硬盘交互)
缺点:不安全,关机之后数据消失,因为数据和索引都是在内存当中。