第五节:MySQL的数据类型和存储引擎介绍

一. MySQL数据类型

1. 整数类型

 

注:MySQL可以为整数类型指定宽度,比如 int(3)、int(5),这个限制不是限制value的合法范围,所以对绝大数应用没有任何意义,对于存储而言,int(3) 和 int(5) 是相同的,只是对一些MySQL的交互工具显式字符的个数有用,如mysql客户端。

2. 浮点类型

 

注:float和double类型会存在不够精确的问题,高精度要求建议使用decimal类型,可能会出现下图现象:

3. 字符类型

补充:char和varchar的区别 

4. 日期类型

 

5. 二进制类型

6. 大数据类型

7. 枚举类型和集合类型

(1). 枚举

 Enum枚举类型是字符串类型,mysql在存储此类型数据时,直接转化成数字存储而不是字符串,可以节省空间,并且在表的.frm文件中存储“数字----字符串 ”之间的对应关系。

 Enum枚举类型最多可以有65535个值,当插入数字到枚举类型的字段时,数字会被当做枚举值的第n个值插入。

(2). 集合

 Set集合类型是字符串类型,可以含有0个或多个值,其中每个值都需要在创建字段的适合指定到集合中。

 补充:MySQL和C#对应关系

 

 SQLServer数据类型详见:https://www.cnblogs.com/yaopengfei/p/12597379.html

二. 存储引擎

1. 含义

  存储引擎是 MySQL 中具体与文件打交道的子系统,它是根据 MySQL AB 公司提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎,下面是一些常用的存储引擎,有远古时期的 MyISAM、支持事务的 InnoDB、内存类型的 Memory、归档类型的 Archive、列式存储的 Infobright,以及一些新兴的存储引擎,以 RocksDB 为底层基础的 MyRocks 和 RocksDB,和以分形树索引组织存储的 TokuDB。

注:MySQL 5.6 版本之前,默认的存储引擎都是 MyISAM,但 5.7 版本及以后默认的存储引擎就是 InnoDB 了。

2. MyISAM和InnoDB对比

(1). 功能对比

 InnoDB 支持 ACID 的事务 4 个特性,而 MyISAM 不支持;

 InnoDB 支持 4 种事务隔离级别,默认是可重复读 Repeatable Read 的,MyISAM 不支持;

 InnoDB 支持 crash 安全恢复,MyISAM 不支持;

 InnoDB 支持外键,MyISAM 不支持;

 InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度;

 InnoDB 支持 MVCC,MyISAM 不支持;

   InnoDB 表最大还可以支持 64TB,支持聚簇索引、支持压缩数据存储,支持数据加密,支持查询/索引/数据高速缓存,支持自适应hash索引、空间索引,支持热备份和恢复等,如下图所示。

 

(2). 性能对比

 A. 读写混合模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长。

 B. 在测试用例里,最高可达近 9000 的 TPS,但 MyISAM 因为读写不能并发,它的处理能力跟核数没关系,呈一条水平线,TPS 低于 500。

 C. 只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长,最高可达近 14000 的 TPS,但 MyISAM 的处理能力不到 3000 TPS。

 

3. InnoDB存储引擎核心点

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
原文地址:https://www.cnblogs.com/yaopengfei/p/13983306.html