数据库存储引擎

一、什么是存储引擎:

存储引擎是MYSQL中特有的一个术语(部分新型国产数据库采用了MYSQL样式开发而成的,也具备该概念);其他的大部分数据库没有这个概念以及术语,Oracle中有类似的概念,不称为存储引擎。

存储引擎实际上是一个表存储、组织数据的方式,而不同的存储引擎,表存储数据的方式会有所不同,基于此,会衍生出一些表操作时的问题,所以可能需要了解一下。但是不建议深入挖掘,除非你就是这个方向的。

二、如何给表添加/指定存储引擎?

1、可以在建立表的时候指定存储引擎:

CREATA TABLE ‘t_student’(
	‘no’ int(11) NOT NULL AUTO_INCREMENT,
	‘name’ varchar(255) DEFAULT NULL,
	‘cno’ int(11) DEFAULT NULL,
	PRIMERY KEY(‘no’),
	KEY ‘cno’(‘cno’),
	CONSTRAINT ‘t_student_ibfk_1’ FOREIGN KEY (‘cno’) REFERENCES ‘t_class’ (‘classno’)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

这段是建表语句,大家看最后一行,在建表语句的右边小括号后面,通过:

ENGINE来指定存储引擎。

就类似后面可以指定默认字符编码(DEFUALT CHARSET=utf8),默认使用utf8编码一样。

Mysql默认的存储引擎是InnoDB;

Mysql默认的字符编码是utf8。

2、数据库表文件查看:

一般情况下mysql数据库所建立的库表都会在C盘这个目录下,同时大家也可以看看其他的表格式,发现基本都是ibd,这说明其实默认的存储引擎(MYSQL中)就是InnoDB。

3、如何查看MYSQL支持哪些存储引擎:

可以直接打开命令窗口登录进去,进入mysql命令行:

show ENGINES \G;

可以看到,在结果中存在9个引擎列表,这代表着MYSQL数据库支持9个引擎;有部分(support)写着的是no,不可用,这不是不支持的意思,而是与数据库的版本有关,并且可以看到一个DEFAULT 的support,代表这是默认的引擎,也就是InnoDB。

三、MySQL常用的存储引擎:

1、MyISAM存储引擎:不支持事务

它管理的表具有以下特征:

使用三个文件表示每个表:

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

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

索引文件 – 存储表上索引(mytable.MYI):索引是一本书的目录,缩小扫描范围,提高查询效率。

可以被转换为压缩、只读表来节省空间。这是这种存储引擎的优势!

提示:对于一张表来说,只要是主键,或加有unique约束的字段上都会自动创建索引。

我们新建一个MyISAM引擎的表,并且去磁盘中查找其目录文件:

CREATE TABLE t_myisam(
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> name varchar(20)
    -> )ENGINE=MyISAM DEFAULT CHARSET=gbk;

等等,我们发现,虽然确实是3个文件,但是为什么有一个后缀不一样?在课件中看到的frm文件没有,变成了.sdi?

这是因为MYSQL版本问题,在MySQL8以后,删除了旧版本的frm文件,并采用了Serialized Dictionary Information(SDI序列化字典信息),是MySQL8.0重新设计数据词典后引入的新产物,并开始已经统一使用InnoDB存储引擎来存储表的元数据信息。在InnoDB 中,SDI信息源记录保存在ibd文件中。

2、InnoDB存储引擎:支持事务

·这是MySQL默认的存储引擎,同时也是一个重量级的存储引擎。

·InnoDB支持事务,支持数据库崩溃后自动恢复机制。

·InnoDB存储引擎最主要的特点是:非常安全!

它管理的表具有下列主要特点:

- 每个InnoDB表在数据库目录中以.frm格式文件表示(在8.0后的文件格式为.sdi);

- InnoDB表空间tablespace被用于存储表的内容(表空间是一个逻辑名称。表空间存储在.ibd文件中)

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

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

- 提供全ACID兼容

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

- 多版本(MVCC)和行级锁定

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

我们简单理解总结:

InnoDB最大的特点是支持事务,事务特性能最大程度保证数据安全,但效率并不高,并且不能压缩,不能转为只读文件,即不会节省存储空间。

由于InnoDB是默认引擎,这边不做示例。

3、MEMORY存储引擎:存储于内存

·使用memory存储引擎的表,其数据存储在内存中,且行的长度固定

这2个特点使得memory存储引擎非常快!

MEMORY存储引擎管理的表具有以下特征:

  • 在数据库目录内,每个表均以.frm格式的文件表示(8.0后sdi文件形式)
  • 表数据及索引被存储在内存中!(也就是不会写入硬盘)
  • 表级锁机制
  • 不能包含TEXT或BLOB字段,即文本和文件流。

Memory存储引擎以前叫HEAP引擎(堆引擎)。

优点:显而易见的是查询效率最高!仅仅存放在内存中。

缺点:因为内存堆会随着关机断电而销毁,也就是说,数据在关机后会消失,数据不安全是最大的缺点!

内存和硬盘区别:在操作系统课程学过

内存的交互是受电流速度影响的,电流有多快它的交互就多快!

硬盘则是通过硬盘磁针一针一针交互(转),转速肯定没有电流速度快。

这里不演示,大家有兴趣可以自行建立一个表数据,然后重启查看。

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值