MySQL数据类型和存储引擎

MySQL 数据类型

MySQL 的数据类型有大概可以分为 5 种,分别是整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等。

注意:整数类型和浮点数类型可以统称为数值数据类型。

1) 数值类型

整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL。

2) 日期/时间类型

包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。

3) 字符串类型

包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等。

4) 二进制类型

包括 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

MySQL存储引擎

MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。

可以使用SHOW ENGINES;语句查看系统所支持的引擎类型:

SHOW ENGINES;

MEMORY	YES	Hash based, stored in memory, useful for temporary tables	NO	NO	NO
MRG_MYISAM	YES	Collection of identical MyISAM tables	NO	NO	NO
CSV	YES	CSV storage engine	NO	NO	NO
FEDERATED	NO	Federated MySQL storage engine			
PERFORMANCE_SCHEMA	YES	Performance Schema	NO	NO	NO
MyISAM	YES	MyISAM storage engine	NO	NO	NO
InnoDB	DEFAULT	Supports transactions, row-level locking, and foreign keys	YES	YES	YES
ndbinfo	NO	MySQL Cluster system information storage engine			
BLACKHOLE	YES	/dev/null storage engine (anything you write to it disappears)	NO	NO	NO
ARCHIVE	YES	Archive storage engine	NO	NO	NO
ndbcluster	NO	Clustered, fault-tolerant tables

Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。

如何选择MySQL存储引擎

MySQL存储引擎特性汇总和对比 :

特性	    MyISAM	InnoDB	MEMORY
存储限制	    有	    支持	有
事务安全	    不支持	支持	不支持
锁机制	    表锁	行锁	表锁
B树索引	    支持	支持	支持
哈希索引	    不支持	不支持	支持
全文索引	    支持	不支持	不支持
集群索引	    不支持	支持	不支持
数据缓存     支持	支持
索引缓存	    支持	支持	支持
数据可压缩	支持	不支持	不支持
空间使用	    低	    高	    N/A
内存使用	    低	    高	    中等
批量插入速度	高	    低	    高
支持外键	    不支持	支持	不支持

我们主要进行 MyISAM、InnoDB 和 MEMORY 这三种存储引擎特性的对比,下面详细介绍这 3 种存储引擎的应用场景 :

1. MyISAM

在 MySQL 5.1 版本及之前的版本,MyISAM 是默认的存储引擎。

MyISAM 存储引擎不支持事务和外键,所以访问速度比较快。

如果应用主要以读取和写入为主,只有少量的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择 MyISAM 存储引擎是非常适合的。

MyISAM 是在 Web 数据仓储和其他应用环境下最常使用的存储引擎之一。


2. InnoDB

MySQL 5.5 版本之后默认的事务型引擎修改为 InnoDB。

InnoDB 存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比 MyISAM 存储引擎占用更多的磁盘空间。

如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么 InnoDB 存储引擎是比较合适的选择。

InnoDB 存储引擎除了可以有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚(Rollback),对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB 都是合适的选择。


3. MEMORY

MEMORY 存储引擎将所有数据保存在 RAM 中,所以该存储引擎的数据访问速度快,但是安全上没有保障。

MEMORY 对表的大小有限制,太大的表无法缓存在内存中。由于使用 MEMORY 存储引擎没有安全保障,所以要确保数据库异常终止后表中的数据可以恢复。

如果应用中涉及数据比较少,且需要进行快速访问,则适合使用 MEMORY 存储引擎。


MySQL查看和修改默认存储引擎

# 查看
SHOW VARIABLES LIKE 'default_storage_engine%';

# 修改
SET default_storage_engine=< 存储引擎名 >;