存储引擎

# 查询支持的全部引擎
show engines;
# 查看默认存储引擎
show variables like '%engine%';

InnoDB

  InnoDB给MySql表提供事物、回滚、崩溃修复能力和多版本并发控制的事务安全,是第一个提供外键约束的表引擎.而且InnoDB对事务处理的能力也是MySql其他引擎无法比拟的.

优缺点

  支持自动增长列AUTO_INCREMENT自动增长列的值不能为空,且值必须唯一.MySql中规定自增列必须为主键.在插入时,如果自增列不输入值或者输入的0或空(NULL)则插入的值为自动增长后的值,如果插入的值在前面没有出现过,则可以自动插入.

  InnoDB存储引擎的优势在于提供了良好的事物管理,崩溃修复能力和并发控制。缺点是读写效率差,占用的数据空间相对较大.

MyISAM

  MyISAM是MySql中常见的存储引擎,曾经是MySql默认的存储引擎是基于ISAM引擎发展起来的,解决了ISAM的很多不足同时增加了很多有用的拓展.

文件类型

 表存储成3个文件.文件的名字和表名相同,拓展名包括frm(存储表的结构)、MYD(存储数据,MYData)和MYI(存储索引,MYIndex).

存储格式

  支持三种不同的存储格式,包括静态型、动态型和压缩型.

MyISAM静态

  如果所有表列的大小都是静态(即不用xBLOB、xTEXT或VARCHAR数据类型)就会自动使用静态MyISAM格式,这种类型的表性能非常高,因为在维护和访问已预定义格式存储的数据时需要很低的开支.但是,这项有点要以空间为代价,因为每列都需要分配给该列最大空间,而无论该空间是否真正的使用.

  如果该列(即时有一列)定义为动态的(即使用xBLOB、xTEXT或VARCHAR数据类型),MySQL就会自动使用动态格式,虽然MyISAM动态表占用的空间比静态格式所占用空间少,但空间的节省带来了性能的下降.如果某个字段的内容发生改变,则其位置很可能就需要移动,这会导致碎片的产生.随着数据集中的碎片增加,数据访问性能就会相应降低.这个问题有两种法定是修复:

  1. 竟可能的使用静态数据类型.
  2. 经常使用OPTIMIZE TABLE NAME语句,它会整理表的碎片,恢复由于更新和删除而导致的空间丢失.

MyISAM压缩

  有时候会创建整个应用程序生命周期中都只读的表。如果是这种情况,就可以使用myisampack工具将其转换为MyISAM压缩表来减少空间.在给定硬件配置下(如快速的处理器和低速的硬盘驱动器),性能的提升将相当显著.教程传送门如下.

优缺点

  MyISAM引擎的优势在于占用空间小,处理速度快;缺点是不支持事物的完整性和并发性.

数据类型

整数数据类型

数据类型取值范围说明单位/字节
TINYINT符号值:-127~127无符号:0~255最小的整数1
BIT符号值:-127~127无符号:0~255最小的整数1
BOOL符号值:-127~127无符号:0~255最小的整数1
SMALLINT符号值:-32 768~32767无符号:0~65535小型整数2
MEDIUMINT符号值:-8 388 608~8 388 607无符号:0~16 777 215中型整数3
INT符号值:-2 147 683 648~2 147 683 647无符号:0~4 294 967 295标准整数4
BIGINT符号值:-9 223 372 036 854 775 808~9 223 372 036 854 775 807无符号:0~18 446 744 073 709 551 615大整数8
FLOAT+(-)3.402 823 466E+38单精度浮点数8或4
DOUBLE+(-)1.797 693 134 862 315 7E+308+(-)1.797 693 134 862 315 4E-308双精度浮点数8
DECIMAL可变一般整数自定义

说明:在创建表时,使用数字类型,应遵循以下原则

  1. 选择最小的可用类型,如果值永远不超过127,则使用TINYINT比INT强.
  2. 对于完全都是数字的,可以选择整数类型.
  3. 浮点类型可用于能具有小数部分的数,如货物单价、网上购物交付金额等.

字符串

  字符串类型可以分为三类:普通的文本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM).

普通文本的字符串类型

  CHAR列的长度被固定为创建表所声明的长度,取值在1~255之间;VARCHAR列的值是变长的字符串,取值和CHAR一样.

类型取值范围/字符说明
char0~255固定长度为M的字符串,其中M的取值范围为0~255。national关键字指定了应该使用的默认字符集。binary关键字指定了数据是否区分大小写(默认区分)。ASCII关键字指定了再该列中使用latinl字符集,unicode关键字制定了使用UCS字符集
char0~255char(M)类似
varchar0~255长度可变,其他和char(M)类似

可变类型(TEXT和BLOB)

  它们的大小可以改变,TEXT类型适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,入文本,声音和图像等.

类型最大长度(字节数)说明
TINYBLOB2^8-1(255)小BLOB字段
TINYTEXT2^8-1(255)小TEXT字段
BLOB2^16-1(65 535)常规BLOB字段
TEXT2^16-1(65 535)常规TEXT字段
MEDOIMBLOB2^24-1(16 777 215)中型BLOB字段
MEDOIMTEXT2^24-1(16 777 215)中型TEXT字段
LONGBLOB2^32-1(4 294 967 295)长BLOB字段
LONGTEXT2^32-1(4 294 967 295)长TEXT字段

特殊类型(SET和ENUM)

类型最大值说明
Enum('value1','value2',...)65 535该类型的列只可以容纳所列值之一或为NULL
Set('value1','value2',...)64该类型的列只可以容纳所列一组值或为NULL

说明:创建表时,使用字符串类型时应该遵循

  1. 从速度方面考虑,要选择固定的列,可以使用CHAR类型
  2. 要节省空间,使用动态的列,可以使用VARCHAR类型
  3. 要将列中的内容限制在一种选择,可以使用ENUM类型
  4. 允许在一个列中有多于一个的条目,可以使用SET类型
  5. 如果要搜索的内容不区分大小写,可以使用TEXT类型
  6. 如果要搜索的内容区分大小写,可以使用BLOB类型

日期和时间类型

 日期和事件类型包括:DATATIME、DATE、TIMESTAMP、TIME和YEAR.赋予它一个不合法的值会被“0”代替

类型取值范围说明
DATE1000-01-01 9999-12-31日期,格式YYYY-MM-DD
TIME-838:58:59 835:58:59时间,格式HH:MM:SS
DATETIME1000-01-01 00:00:009999-12-31 23:59:59日期和时间,格式YYYY-MM-DD HH:MM:SS
TIMESTAMP1970-01-01 00:00:002037年的某个时间时间标签,在处理报告时使用显示格式取决于M的值
YEAR1901-2105年份可指定两位数字和四位数字的值
Last modification:February 18th, 2020 at 10:12 pm