支持
不支持
支持
不支持
支持
索引缓存
支持
支持
支持
支持
支持
数据可压缩
不支持
支持
不支持
不支持
不支持
空间使用
高
低
N/A
低
低
内存使用
高
低
中等
低
高
批量插入速度
低
高
高
高
高
InnoDB
- InnoDB存储引擎是MySQL数据库服务器的默认存储引擎
- InnoDB存储引擎提供具有提交,回滚,崩溃恢复的事务安全机制
- InnoDB存储引擎和MyISAM存储引擎相比较存在的缺点: 处理效率比较低 为了保存数据和索引会占用更多的磁盘空间
- 事务安全:
-- 开启事务 : 开启事务后,可以进行数据库的相关操作start transaction;-- 提交事务 : 进行数据库的相关操作后,可以提交事务commit;- 外键约束: MySQL数据库服务器中只有InnoDB存储引擎支持外键 创建外键时,要求外键表对应的外键字段必须要有索引 使用外键的表在创建外键时,会自动创建对应的索引 示例: -- 外键表 CREATE TABLE country( id int NOT NULL AUTO_INCREMENT, country_name varchar(100) NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 使用外键的表 CREATE TABLE city( id int NOT NULL AUTO_INCREMENT, city_name varchar(50) NOT NULL, country_id int NOT NULL, PRIMARY KEY(id), KEY idx_fk_country_id(country_id), CONSTRAINT 'fk_city_country' FOREIGN KEY(country_id) REFERENCES country(id) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 复制代码 更新外键表信息时,使用外键的表的外键相关信息也会自动更新
- 存储方式: InnoDB存储表和索引有两种方式: 共享表空间存储: 创建的表的表结构存储在 .frm文件中 数据存储在innodb_data_home_dir定义的表空间中,可以是多个文件 索引存储在innodb_data_file_path定义的表空间中,可以是多个文件 多表空间存储: 创建的表的表结构存储在 .frm文件中 每个表的数据单独存储在 .ibd文件中 每个表的索引单独存储在 .ibd文件中
- MyISAM存储引擎不支持事务,不支持外键 适合对事务的完整性没有要求的应用 适合以SELECT或者INSERT为主要操作的应用
- MyISAM的优点是访问速度快
- 不支持事务
- 存储方式: 每个MyISAM存储引擎的表在磁盘上存储为三个文件,文件名都和表名相同,拓展名有以下三种: .frm - 创建的表的表结构 .MYD - MYDATA. 创建的表的数据 .MYI - MYIndex. 创建的表的索引
- MEMORY存储引擎将表的数据存储在内存中
- 每个MEMORY存储引擎的表对应一个 .frm文件: .frm文件中只存储创建的表的表结构 表的数据都是存储在内存中
- MEMORY的数据都是存储在内存中,并且默认使用HASH索引
- 优点: 数据存储在内存中,有利于数据的快速处理,提高整个表的效率 MEMORY存储引擎的表访问的速度非常快
- 缺点: 不支持事务,不支持外键 如果服务关闭 ,MEMORY存储引擎的表的表中的数据就会丢失
- MERGE存储引擎的表是一组MyISAM存储引擎的表的组合 MyISAM存储引擎的表的结构必须完全相同 MERGE存储引擎的表不存储数据 MERGE存储引擎的表的查询,更新和删除操作都是对内部的MyISAM存储引擎的表的操作
- MERGE存储引擎的表的插入操作: 通过INSERT_METHOD子句定义插入的表,可以有3个不同的值 FIRST: 插入操作作用在第一个MyISAM存储引擎的表上 LAST: 插入操作作用在最后一个MyISAM存储引擎的表上 NO: 不定义子句或者将子句定义为NO, 表明不能对MEGER存储引擎的表的内部的MyISAM存储引擎的表进行插入操作
- DROP: 对MERGE存储引擎的表执行DROP操作,只是删除MERGE存储引擎的表的定义,对MERGE存储引擎的表的内部的MyISAM存储引擎的表没有任何影响
- 示例:
-- MyISAM存储引擎的表CREATE TABLE orderA( id int AUTO_INCREMENT, order_money double(10,2), order_address vachar(64), PRIMARY KEY(id))ENGINE=myisam DEFAULT CHARSET=utf8;-- MyISAM存储引擎的表CREATE TABLE orderB( id int AUTO_INCREMENT, order_money double(10,2), order_address varchar(64), PRIMARY KEY(id))ENGINE=myisam DEFAULT CHARSET=utf8;-- MERGE存储引擎的表CREATE TABLE order_all( id int AUTO_INCREMENT, order_money double(10,2), order_address varchar(64), PRIMARY KEY(id))ENGINE=merge UNION=(orderA,orderB)INSERT_METHOD=LAST DEFAULT CHARSET=utf8
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Mysql insert on duplicate key 死锁问题定位与解决
- 一文带你了解 「图数据库」Nebula 的存储设计和思考
- 去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来
- 谭松韵|加码研发布局!OPPO对外招聘2000+科研人才,三位一体体系亮了
- 为什么不建议给MySQL设置Null值?
- sqlx操作MySQL实战及其原理
- PostgreSQL数据库体系架构
- docker MySQL数据库的备份与还原,以及每天定时自动备份
- Yandex 在 GitHub 开源 YDB 数据库
- MySQL 8.0.27 zip 版本安装
