day09-1存储引擎
存储引擎
1.基本介绍
- 基本介绍
-
MySQL的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM、innoDB、Memory等
-
MySQL数据表主要支持六种类型,分别是:CSV,Memory,ARCHIVE,MRG_MYISAM,MYISAM,InnoBDB。
-
这六种又分为两类,一类是”事务安全型“(transaction-safe),例如:InnoDB。
剩下的五种都是第二类,称为“非事务安全型”(non-transaction-safe)
数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
- 主要的存储引擎(表类型)特点
特点 | Myisam | Memory | InnoDB | Archive |
---|---|---|---|---|
存储限制 | 没有 | 有 | 64TB | 没有 |
事务安全 | 支持 | |||
锁机制 | 表锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | 支持 | ||
全文索引 | 支持 | |||
集群索引 | 支持 | |||
数据缓存 | 支持 | 支持 | ||
索引缓存 | 支持 | 支持 | 支持 | |
数据可压缩 | 支持 | 支持 | ||
空间使用 | 低 | N/A | 高 | 非常低 |
内存使用 | 低 | 中等 | 高 | 低 |
批量插入的速度 | 高 | 高 | 低 | 非常高 |
支持外键 | 支持 |
- 细节说明
- MyISAM不支持事务,也不支持外键,但是其访问速度快,对事务完整性没有要求
- InnoDB存储引擎提供了具有提交、回滚和崩溃能力的事务安全。但是比起MyISAM存储引擎,InnoDB写得处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引
- MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常地快,因为它的数据是存放在内存中的,并且默认使用HASH索引。但是一旦MySQL服务关闭,表中的数据就会丢失,表的结构还在。
2.使用
-
三种存储引擎表使用案例
对于前面我们提到的三种存储引擎,我们举例说明
-- 表类型和存储引擎 -- 查看所有的存储引擎 SHOW ENGINES -- InnoDB存储引擎是前面使用过的 -- 1.支持事务 2.支持外键 3.支持行级锁 -- myisam存储引擎 CREATE TABLE t28( id INT, `name` VARCHAR(32)) ENGINE MYISAM -- 1.添加速度快 2.不支持外键和事务 3.支持表级锁 START TRANSACTION; SAVEPOINT a; INSERT INTO t28 VALUES(1,'jack'); SELECT * FROM t28; ROLLBACK TO a; -- 失败,myisam不支持事务 -- memory存储引擎 -- 1.数据存储在内存中[关闭了mysql服务表数据就会丢失,但是表结构还在] -- 2.执行速度佷快(没有IO读写) 3.默认支持索引(hash表) CREATE TABLE t29( id INT, `name` VARCHAR(32)) ENGINE MEMORY INSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp'); SELECT * FROM t29; -- 重启mysql服务之后 DESC t29; -- 表结构还在 SELECT * FROM t29;-- 表数据丢失了
- 如何选择表的存储引擎
-
如果你的应用不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择,速度快
-
如果需要支持事务,选择InnoDB
-
Memory存储引擎就是将数据存储在内存中,由于没有磁盘IO的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。(经典用法:用户的在线状态)
- 指令修改存储引擎
alter table table_name engine = 存储引擎名;
例子
-- 表类型和存储引擎 -- 查看所有的存储引擎 SHOW ENGINES -- InnoDB存储引擎是前面使用过的 -- 1.支持事务 2.支持外键 3.支持行级锁 -- myisam存储引擎 CREATE TABLE t28( id INT, `name` VARCHAR(32)) ENGINE MYISAM -- 1.添加速度快 2.不支持外键和事务 3.支持表级锁 START TRANSACTION; SAVEPOINT a; INSERT INTO t28 VALUES(1,'jack'); SELECT * FROM t28; ROLLBACK TO a; -- 失败,myisam不支持事务 -- memory存储引擎 -- 1.数据存储在内存中[关闭了mysql服务表数据就会丢失,但是表结构还在] -- 2.执行速度佷快(没有IO读写) 3.默认支持索引(hash表) CREATE TABLE t29( id INT, `name` VARCHAR(32)) ENGINE MEMORY INSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp'); SELECT * FROM t29; -- 重启mysql服务之后 DESC t29; -- 表结构还在 SELECT * FROM t29;-- 表数据丢失了 -- 修改存储引擎名 ALTER TABLE t29 ENGINE = INNODB;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!