MySQL的一个关键特性叫做插件式存储引擎。意思是数据的"底层机制"不是和SQL解析层绑定死的,而是可以插拔、替换的。
存储引擎是MySQL中负责实际数据存储和读取的核心组件。他决定了数据是如何组织、如何索引、是否支持事务等底层行为
**SQL层:**是仓库的前台接待,负责接收命令(SELECT、INSERT等)
**存储引擎:**是仓库里的货架系统,负责真正把货物(数据)放到哪里、怎么取出来
类似于:不同类型的文件柜
假设需要存储公司的大量文件(这就是"数据")。MySQL提供的是统一的SQL查询接口(怎么取文件,用select....where...),但是实际怎么存,怎么找这个文件,由你选的引擎(文件库)决定
**传统文件柜(MyISAM引擎):**结构简单,放文件快,取文件快。但是如果有人正在修改一份文件,另一个人也想改同一份,可能出问题。柜子坏了文件难恢复。
**特点:**速度快,但是不安全,不能同时写
**高级保险柜(InnoDB引擎):**结构精密。支持事务(比如修改10份文件,要么全成功,要么全不变),支持行级锁(你改A文件,不影响别人改B文件),柜子坏了有恢复机制。
**特点:**功能全,安全,并发好,是现在默认的选择
**内存暂存架(Memory引擎):**数据放在RAM内存里,一断电就全没了,但是读写速度极快。
特点:超级快,但是数据不持久。适合临时数据,比如用户在线会话。
MySQL设计者面临一个难题:没有一个引擎能在所有场景下都在做到完美。
1.有的场景需要绝对安全,牺牲一点速度(银行转账)
必须用InnoDB,因为它支持事务和行锁。
2.有的场景只读历史数据,追求极致速度(10年前的日志报表)
可以用MyISAM,它简单、快。
3.有的场景数据不重要,但要极快的读写(临时在线人数统计)
可以用Memory引擎。