目录
Mysql表类型和存储引擎
基本介绍
1. MySQL的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等。
2. MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG MYISAM、MYISAM、InnoBDB.
3. 这六种又分为两类,一类是”事务安全型”(transaction-safe),比如:InnoDB:其余都属于第二类,称为”非事务安全型”(non-transaction-safe)[mysiam和memory].
查看存储引擎
主要的存储引擎/表特点
特点 | Myisam | InnoDB | Memory | Archive |
批量插入的难度 | 高 | 低 | 高 | 非常高 |
事务安全 | 支持 | |||
全文索引 | 支持 | |||
锁机制 | 表锁 | 行锁 | 表锁 | 行锁 |
储存限制 | 没有 | 64TB | 有 | 没有 |
树索引 | 支持 | 支持 | 支持 | 没有 |
哈希案引 | 支持 | 支持 | ||
集群索引 | 支持 | |||
数据缓存 | 支持 | 支持 | ||
索引缓存 | 支持 | 支持 | 支持 | |
数据可压缩 | 支持 | 支持 | ||
空间使用 | 低 | 高 | N/A | 非常低 |
内存使用 | 低 | 高 | 中等 | 低 |
支持外键 | 支持 |
细节说明
1.MyISAM不支持事务、也不支持外键,但其访问速度快,对事务整性没有要求
2InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
3.MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉,表的结构还在。
实例1:
创建储存引擎为Myisam的表
create table t28(
id int,
`name` varchar(32)
)engine myisam
开启事务并插入数据
start transaction
insert into t28
values(1,'jack')
查询表
SELECT * FROM t28
现在进行回滚
此时可以看见,系统报错,原因使用myisqm储存引擎创建的表不支持事务安全
实例2:
创建储存引擎为memory的表
CREATE TABLE t29(
id INT,
`name` VARCHAR(32)
)ENGINE Memory
插入数据
INSERT INTO t29
VALUES(1,'jack')
此时关闭mysql服务并再次开启
再次查询数据和表结构
此时可以发现插入的数据没了,但创建的表及其表结构都还在
如何选择表的存储引擎
1. 如果你的应用不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择,速度快
2. 如果需要支持事务,选择InnoDB.
3. Memory 存储引擎就是将数据存储在内存中,由于没有磁盘I/O的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。(经典用法 用户的在线状态().)
修改存储引擎
语法
ALTER TABLE '表名' ENGINE = 储存引擎;