MySQL数据库体系机构基本介绍!MySQL中四种主要的存储引擎( 二 )


支持
不支持
支持
不支持
支持
索引缓存
支持
支持
支持
支持
支持
数据可压缩
不支持
支持
不支持
不支持
不支持
空间使用


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
  • MyISAM存储引擎不支持事务,不支持外键 适合对事务的完整性没有要求的应用 适合以SELECT或者INSERT为主要操作的应用
  • MyISAM的优点是访问速度快
  • 不支持事务
  • 存储方式: 每个MyISAM存储引擎的表在磁盘上存储为三个文件,文件名都和表名相同,拓展名有以下三种: .frm - 创建的表的表结构 .MYD - MYDATA. 创建的表的数据 .MYI - MYIndex. 创建的表的索引
MEMORY
  • MEMORY存储引擎将表的数据存储在内存中
  • 每个MEMORY存储引擎的表对应一个 .frm文件: .frm文件中只存储创建的表的表结构 表的数据都是存储在内存中
  • MEMORY的数据都是存储在内存中,并且默认使用HASH索引
  • 优点: 数据存储在内存中,有利于数据的快速处理,提高整个表的效率 MEMORY存储引擎的表访问的速度非常快
  • 缺点: 不支持事务,不支持外键 如果服务关闭 ,MEMORY存储引擎的表的表中的数据就会丢失
MERGE
  • 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


推荐阅读