五、存储引擎(MySQL读书笔记)

插件式存储引擎是MySQL数据库最重要的特性之一。

-- 查看当前数据库支持的存储引擎
SHOW ENGINES \G
-- DISABLED 标记表示支持该引擎,但启动时被禁用
SHOW VARIABLES LIKE 'hava%';
-- 创建表时可以通过 ENGINE 关键字设置新建表的存储引擎
-- 修改已有表的存储引擎
ALTER TABLE tableName ENGINE = engineName

1、MyISAM

1.1、不支持事务,不支持外键;优势是访问速度快,对事务完整性没有要求或者以 SELECT INSERT 为主的引用基本上都可以使用该引擎;

1.2、每个 MyISAM 在磁盘上存储为 3 个文件,其文件名都和表名相同:

        (数据文件和索引文件可以存放在不同的目录,平均分布 IO,获得更快的速度)

        .frm - 表定义

        .MYD - MYData,存储数据

        .MYI - MYIndex,存储索引

1.3、该类型的表可能会损坏。提供修复的工具:CHECK TABLE - 检查表健康;REPAIR TABLE - 修复一个损坏的表

1.4、支持三种不同的存储格式:

  静态(固定长度)表都是定长字段;存储非常迅速,易缓存,出现故障易恢复;占用空间较大;存储时按照宽度补足空格;获取时会去掉后面的空格,保留前面的空格
           动态表包含变长字段;占用空间相对较少;频繁更新|删除记录产生碎片;需要定期执行 OPTIMIZE TABLE 或 myisamchk-r 改善性能;出现故障时不易恢复
           压缩表由 myisampack 工具创建,占用空间非常小;因为每个记录是被单独压缩的,所以只有非常小的访问开支

2、InnoDB

2.1、具有提交、回滚和崩溃恢复能力的事务安全;相比 MyISAM 写效率差一些,并且会占用更多的空间以保留数据和引擎

InnoDB 引擎不同于其他引擎的特点:

2.2、自动增长

可以通过 ALTER TABLE *** AUTO_INCREMENT = n 设置自动增长初始值(默认保存在内存中);使用 LAST_INSERT_ID() 查询当前线程最后插入记录使用的值;自动增长列必须是索引(如果是组合索引,也必须是组合索引的第一列)【MyISAM 引擎自动增长列可以是组合索引的其他列】

2.3、外键约束(仅 InnoDB 引擎支持外键)

CREATE TABLE `city` (
  `city_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) unsigned NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`city_id`),
-- 创建索引
  KEY `idx_fk_country_id` (`country_id`),
-- 可以指定在删除、更新父表时对子表进行相应的操作
  CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- RESTRICT 作用同 NO ACTION - 限制子表有关联记录时父表不能更新
-- CASCADE 父表更新或删除时,同时更新或删除子表对应记录
-- SET NULL 父表更新或删除时,子表对应字段被 SET NULL
-- NO ACTION 作用同 RESTRICT

2.4、临时关闭外键检查:SET FOREIGN_KEY_CHECKS = 0 (0 - 关闭;1 - 开启)

2.5、存储方式

2.5.1、共享表空间存储:表结构保存在 .frm 文件中,数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path 定义的表空间中,可以是多个文件

2.5.2、多表空间存储:表结构保存在 .frm 文件中,但是每个表的数据和索引单独保存在 .ibd 中(数据文件没有大小限制);如果是分区表,则每个分区对应单独的 .ibd 文件,以 “表名+分区名” 命名

2.5.3、使用多表空间特性的表,可以比较方便的进行单表备份和恢复操作。

3、MEMORY

3.1、使用存在于内存中的内容来创建表;每个 MEMORY 表只对应一个磁盘文件,格式为 .frm;访问速度非常快,默认使用 HASH 索引

3.2、主要用于内容变化不频繁的代码表 -- 数据没有写入磁盘

4、MERGE

5、TokuDB(第三方存储引擎)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值