--- title: "23-存储引擎" created: 2025-11-25 tags: - 项目筑基 --- # 存储引擎 存储引擎是mysql中特有的一个术语 是一个表存储/组织数据的方式 不同的存储引擎 表存储数据的方式不同 可以使用show create table 表名查看表创建时的存储方式 ``` show create table table_1; ``` ``` table_1,"CREATE TABLE `table_1` ( `name` char(10) DEFAULT NULL, `id` char(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci" ``` 分为三部分 第一部分是我们的创表语句 第二部分ENGINE表示的就是存储引擎 第三部分DEFAULT CHARSET=UTF8 就是存储时使用的字符集 创表时并没有对这些进行设置 也就是说 在mysql中 默认存储引擎为InnoDB 默认字符编码方式是UTF8 那么怎么自己给表添加指定存储引擎? 有样学样 跟它一样在表后面加两句话(DEFAULT可以缺省) ![[image-ca26ee49.png]] ![[image-70ba9bf4.png]] 因为不知道有哪些存储引擎 所以只修改了一下字符集 那么怎么知道有哪些存储引擎呢 `show engines;` ![[image-17ebbfd8.png]] 展示出了当前版本mysql支持的存储引擎(版本不同支持情况不同) 也证实了InnoDB是默认的 那么再试验一下 ![[image-3947f4e8.png]] 有什么用呢 有什么区别呢 怎么工作呢 ## MyISAM存储引擎 特征 使用三个文件表示每个表 格式文件——存储表结构的定义(mytable.frm) 数据文件——存储表行的内容(mytable.MYD) 索引文件——存储表上索引(mytable.MYI) (索引就相当于一本书的目录 缩小扫描范围 提高查询效率 对于一张表来说 只要是主键或者加有unique约束的字段上会自动创建索引) 优点:由于数据和索引都是文件 所以可被转换为压缩、只读表来节省空间 mysql数据库就有使用这种方式存储 ![[image-8fc0cc2e.png]] ## InnoDB存储引擎 mysql默认的存储引擎 一个重量级的存储引擎 特点:支持事务 保证安全 每个InnoDB表在数据库目录中以.frm格式文件表示 表空间tablespace被用于存储表的内容 提供一组用来记录事务性活动的日志文件 用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理 提供全ACID兼容 在mysql服务器崩溃后提供自动恢复 多版本(MVCC)和行级锁定 支持外键及引用的完整性 包括级联删除和更新 数据和索引都放在表空间(tablespace)中 而不是在文件里 表的格式还是在.frm文件里 效率不是很高 不能压缩 不能转换为只读 不能很好的节省空间 MySQL把它作为默认 可见对安全的重视度高 ## MEMORY存储引擎 曾称HEAP引擎 使用memory存储引擎的表 其数据和索引都存储在内存中(断电就没) 且行的长度固定 这两个特点就使得它非常快 特点 在数据库目录内 每个表以.frm格式的文件表示 表数据及索引被存储在内存中 表级锁机制 不能包含TEXT或者BLOB字段(图片不能存) 查询效率最高 但也最不安全 断电数据就消失 --- ⬅️ [[22-用户管理(DBA命令)|22-用户管理(DBA命令)]] 🏠 [[00-数据库|00-数据库]] ➡️ [[SQLite|SQLite]]