存储引擎

存储引擎是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 image-70ba9bf4

因为不知道有哪些存储引擎 所以只修改了一下字符集

那么怎么知道有哪些存储引擎呢

show engines;

image-17ebbfd8

展示出了当前版本mysql支持的存储引擎(版本不同支持情况不同)

也证实了InnoDB是默认的

那么再试验一下

image-3947f4e8

有什么用呢 有什么区别呢 怎么工作呢

MyISAM存储引擎

特征

使用三个文件表示每个表

    格式文件——存储表结构的定义(mytable.frm)

    数据文件——存储表行的内容(mytable.MYD)

    索引文件——存储表上索引(mytable.MYI)

(索引就相当于一本书的目录 缩小扫描范围 提高查询效率

对于一张表来说 只要是主键或者加有unique约束的字段上会自动创建索引)

优点:由于数据和索引都是文件 所以可被转换为压缩、只读表来节省空间

mysql数据库就有使用这种方式存储

image-8fc0cc2e

InnoDB存储引擎

mysql默认的存储引擎 一个重量级的存储引擎

特点:支持事务 保证安全

每个InnoDB表在数据库目录中以.frm格式文件表示

表空间tablespace被用于存储表的内容

提供一组用来记录事务性活动的日志文件

用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理

提供全ACID兼容

在mysql服务器崩溃后提供自动恢复

多版本(MVCC)和行级锁定

支持外键及引用的完整性 包括级联删除和更新

数据和索引都放在表空间(tablespace)中 而不是在文件里

表的格式还是在.frm文件里

效率不是很高 不能压缩 不能转换为只读 不能很好的节省空间

MySQL把它作为默认 可见对安全的重视度高

MEMORY存储引擎

曾称HEAP引擎

使用memory存储引擎的表 其数据和索引都存储在内存中(断电就没) 且行的长度固定

这两个特点就使得它非常快

特点

在数据库目录内 每个表以.frm格式的文件表示

表数据及索引被存储在内存中

表级锁机制

不能包含TEXT或者BLOB字段(图片不能存)

查询效率最高

但也最不安全 断电数据就消失


⬅️ 22-用户管理(DBA命令) 🏠 00-数据库 ➡️ SQLite