三:表存储引擎

Posted gyxpy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三:表存储引擎相关的知识,希望对你有一定的参考价值。

一:存储引擎

select * from user

显示的表的内容尽管是这样子,

技术图片

mysql并不是以上图形式对表进行的存储,

表有表结构,表数据,他们是分开存储的,分别以单独的文件形式存在,还有索引,索引和数据放一起是一种存储方式,还有不和数据放一起的存储方式

默认存储引擎InnoDB,在数据库文件夹可以看到表明.frm文件就是存放的表结构,表明.ibd是innodb-data的意思,innodb存储引擎的数据存放在这个文件里面

Mysql提供的存储方式很多,对于Oracle只有一种.

show engines;查看支持的所有存储引擎,InnoDB是默认的存储引擎.

mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。

不同的存储引擎对应的就是不同的存储方式.

InnoDB支持事务(一致性,原子性,隔离性,),外键,行级锁(并发访问同行数据,加了锁),将数据结构,数据分了两个文件存放

memory是内存数据库,重启消失,已被redis代替

myisam将数据结构,数据,索引分了三个文件存放

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

二:常见数据引擎详解

InnoDB

用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。

MyISAM

如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。

Memory

将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。

三:创建表的时候指定存储引擎

查看配置

show  variables like "%engine%"看存储引擎
show  variables like "%character%"看字符编码
show create table user;查看建表语句,包括存储引擎和编码比desc user看的更多

 四:Mysql工作流程

技术图片

 

MySQL架构总共四层,在上图中以虚线作为划分。 
  首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。 
  第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

  第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。

  第四层包含了文件系统,所有的表结构和数据以及用户操作的日志最终还是以文件的形式存储在硬盘上。

以上是关于三:表存储引擎的主要内容,如果未能解决你的问题,请参考以下文章

mysql三-1:存储引擎

MySQL存储引擎

MySQL存储引擎

MySQL改变表的存储引擎

mysql三:存储引擎

存储引擎