1 数据存储引擎

存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表怎样存储与索引数据、是否支持事务、外键等),表在计算机中的存储方式。

1.1 MySql支持的数据存储引擎

查看引擎信息

通过命令来查看引擎信息

 show engines;

默认存储引擎为InnoDB,例如以下列出:

Engine Support Comment Transactions XA Savepoints
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MyISAM YES MyISAM storage engine NO NO NO
CSV YES CSV storage engine NO NO NO
ARCHIVE YES Archive storage engine NO NO NO
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
FEDERATED NO Federated MySQL storage engine NULL NULL NULL

Support表示是否支持该引擎,Comment表示关于该引擎的评论。Transactions比表示该引擎是否支持事务。XA表示此引擎支持的分布式是否符合XA规范,Savepoints表示此引擎是否支持事务处理中的保存点。

还能够通过show variables来查看,命令例如以下

show variables like 'have%';

显示结果例如以下:

Variable_name Value
have_compress YES
have_crypt NO
have_dynamic_loading YES
have_geometry YES
have_openssl DISABLED
have_profiling YES
have_query_cache YES
have_rtree_keys YES
have_ssl DISABLED
have_statement_timeout YES
have_symlink YES

yes表示支持,no表示不支持,DISABLED表示支持但未开启


查看默认存储引擎

show variables like '%storage_engine%';

查询结果例如以下:

Variable_name Value
default_storage_engine InnoDB
default_tmp_storage_engine InnoDB
disabled_storage_engines
internal_tmp_disk_storage_engine InnoDB

1.2 改动默认引擎

方式1: 改动my.ini配置文件

在安装文件夹下的my.ini文件里加入或改动default-storage-engine,如设置默认引擎为INNODB,在my.ini文件里加入例如以下一行内容:

default-storage-engine=INNODB

重新启动mysql服务生效。

方式2:通过命令设置

一般在创建表时我们能够设置引擎

CREATE TABLE `test` (
`db` double DEFAULT NULL,
`dm` decimal(10,0) DEFAULT NULL,
`gender` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

当创建完毕,我们希望改动表的引擎时,能够运行例如以下命令:

 alter table table_name engine= engine_name;

比方我们想设置表test的引擎为MyISAM,能够运行:

alter table test engine=MyISAM;

1.3 存储引擎的选择

选择一个合适的存储引擎,才干发挥数据库更好的功能。由于各种数据引擎有着不同的特性优势与适用场合。因此须要先了解它们的特性。才干有助于我们更好的选择合适的引擎。

以下列出了几种常见的引擎以及他们的特性:

MyISAM

此存储引擎不支持事务、外键。但訪问速度快,对事务完整性不要求,适合于对事务没有要求,并发相对较低,以訪问为主的场合。

InnoDB

支持事务,具有提交、回滚、崩溃恢复的事务安全。相对MySQL来说,写处理能力差些,且会占用较多磁盘空间以保留数据和索引。在须要进行频繁的更新删除操作。实现并发控制,须要支持事务的场合适合使用它。

MEMORY

该存储引擎使用存在于内存中的内容来创建表,每一个表实际相应一个磁盘文件,格式为.frm;这类表由于数据在内存中,且默认使用HASH索引,所以訪问速度非常快;但一旦服务关闭,表中的数据会丢失。在涉及数据量较小,须要进行高速訪问的场合适用此引擎。


2 数据类型

MySql提供了数据类型来定义我们存储的数据的类型,不同的数据类型有着不同的存储功能与占用的空间大小。

Mysql提供的数据类型有:整数类型、浮点数类型与定点数类型、位类型、字符串类型、日期与时间类型。

2.1 整数类型

类型 字节 范围(有符号) 范围(无符号)
TINYINT 1 (-128。127) (0。255)
SMALLINT 2 (-32 768。32 767) (0,65 535)
MEDIUMINT 3 (-8 388 608。8 388 607) (0,16 777 215)
INT或INTEGER 4 (-2 147 483 648,2 147 483 647) (0。4 294 967 295)
BIGINT 8 (-9 233 372 036 854 775 808。9 223 372 036 854 775 807) (0。18 446 744 073 709 551 615)

对于整数类型。我们须要依据实际存储数据的大小来决定我们选择哪种类型来存储。诸如当要存储的数据大小不超过255,我们选择TINYINT就ok。既满足要求又节约内存。

在使用的时候,当我们不清楚那个类型的范围,我们能够通过帮助命令来查看。诸如查看int类型,我们能够键入 ? int; (或 help int。)来查看int的具体信息。例如以下所看到的:

ZEROFILL(0填充)

整形设置0填充,会使类型自己主动成为unsigned,而且各个整形类型都有默认填充位。例如以下图:

2.2 浮点数类型、定点数类型、位类型

浮点数类型

类型 字节 范围(有符号) 范围(无符号) 作用
FLOAT 4 (-3.402 823 466 E+38,1.175 494 351 E-38)。0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0。(2.225 073 858 507 201 4 E-308。1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL(M,D) M+2 依赖于M和D的值 依赖于M和D的值 高精度小数值

关于DECIMAL特别指出

  • M是数字的最大数(精度)。其范围为1~65。M 的默认值是10。M的值为整数的长度加小数的长度,不包括小数点与 “-” 负号。
  • D是小数点右側数字的数目(标度)。

    其范围是0~30,但不得超过M。假设D省略不写则默觉得0。此时无小数部分。

  • 存储整数部分长度为M-D(不满足会出错)。小数长度为D(大于D的部分会被截断)

关于使用方法

对于浮点数类型与DECIMAL的选择,当我们对小数精度要求非常高时。此时推荐使用DECIMAL类型。由于DECIMAL类型存储的是字符串,而浮点数类型存储的是近似值。对于精度要求不高的情况下。视存储的数据的范围而定。

做例如以下一个測试

创建一个有float类型的f_data , double 类型的db_data, decimal 类型的 dm_data的表。并同一时候插入123.456到三个字段中。

然后我们查询123.456的f_data时发现查询为空,而查询‘123.456’ 的dm_data时查询出了结果。实验验证了上述结论,float存储的是近似值。所以查询不到。而decimal存储的是字符串,所以能够精确查询。

位类型

位类型 字节 最大值(位) 最小值(位)
BIT(M) 1~8 BIT(64) BIT(1)

位类型BTM占用的字节数是M,取值在1~8之间。BIT类型的存储大小视其精度而定。

能够使用b’value’符号写位字段值。

value是一个用0和1写成的二进制值。例如以下:

2.3 字符串

2.3.1 char系字符串类型

类型 字节 描写叙述
CHAR(M) M M为0~255之间的整数
VARCHAR(M) M M为0~65535之间的整数

在数据存储范围合适的情况下,当存储的数据常常变动时使用推荐varchar。否则使用char 。

2.3.2 BINARY系字符串

类型 字节 描写叙述
BINARY(M) M 长度0~M个字节的定长字节字符串
VARBINARY(M) M 长度0~M个字节的变长字节字符串,值的长度+1个字节

与char系相似,不同的是BINARY系存储的能够是二进制数据(如图片、视频、音乐)。而char系仅仅能存储字符数据。

2.3.3 TEXT系字符串类型

类型 字节 描写叙述
TINYTEXT 0~255字节 值的长度+2个字节
TEXT 0~65535字节 值的长度+2个字节
MEDIUMTEXT 0~167772150字节 值的长度+3个字节
LONGTEXT 0~4294967295字节 值的长度+4个字节

当需存储大量的字符数据时,能够选择TEXT系字符串,至于选择哪一个看存储字符长度。

2.3.4 BLOB系字符串

类型 字节
TINYBLOB 0~255字节。值的长度+1个字节
BLOB 0~65535字节。值的长度+2个字节
MEDIUMBLOB 0~167772150字节。值的长度+3个字节
LONGBLOB 0~4294967295字节,值的长度+4个字节

与TEXT系相似。不同的是BLOB系存储的能够是二进制数据(如图片、视频、音乐),而TEXT系存储的仅仅能是字符数据

2.3.5 枚举类型

ENUM(‘value1’,’value2’,…)

枚举类型仅仅能有一个值的字符串,从值列’value1’。’value2’,…,NULL中或特殊 ”错误值中选出。ENUM列最多能够有65,535个截然不同的值。

ENUM值在内部用整数表示,所以我们能够使用整数插入或查询来取代字符串。

例如以下我们创建一个表,包括枚举字段day,我们插入枚举值

我们还能够通过整数值插入和查询

当我们插入非设置的枚举值时会出错,例如以下错误:

mysql> insert into t_enum values('星期天');
ERROR 1265 (01000): Data truncated for column 'day' at row 1

2.3. 6 SET类型

SET(‘value1’,’value2’,…)

一个set集合。当中的字符串对象能够有零个或多个值的组合。每一个值必须来自列值’value1’,’value2’。…SET列最多能够有64个成员。SET值在内部用整数表示。

插入时的数据顺序与终于在表中的顺序无关。

使用演示样例

创建了一个t_set的表。day是一个set类型的字段,能够插入set中的随意值的组合。插入顺序不影响终于插入到表中的数据。能够通过指定字符串来查询,此字符串的顺序却对查询结果有影响,这是一个奇怪的地方

使用整数插入、查询、删除、更新

set内部使用整数来表示,value、二进制、十进制的相应关系例如以下

当我们插入数字15时,即1+2+4+8。各个set的value相应的值(星期一~星期四)

当我们插入数字8时,即相应value为8的‘星期四’,其它组合依次类推

删除指定值(更新与之相似,不列出了)


2.4 日期和时间类型

类型名 字节 格式 范围
date 3 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
datetime 8 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
year 1 YYYY 1901 ~ 2155
TIME 3 -838:59:59 ~ 838:59:59

通过命令 select curdate(); 或select now();来查看当前日期

日期与时间类型的使用

  • 假设要表示年月日,一般使用date
  • 假设要表示年月日时分秒,一般使用datetime
  • 假设要频繁更新当前时间。则能够选择使用timestamp
  • 假设要表示年,能够使用year,占用字节少
  • 假设要表示时分秒,能够使用time

使用演示样例


后记:总结了下MySql的存储引擎与数据类型。更具体的使用方法再慢慢完好吧~

MySQL存储引擎与数据类型的更多相关文章

  1. MySQL数据库(二)--库相关操作、表相关操作(1)、存储引擎、数据类型

    一.库相关操作 1.创建数据库 (1)语法 create database 数据库 charset utf8; (2)数据库命名规范 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用 ...

  2. MySQL数据库(二)——库相关操作、表相关操作(一)、存储引擎、数据类型

    库相关操作.表相关操作(一).存储引擎.数据类型 一.库相关操作 1.创建数据库 (1)语法 create database 数据库 charset utf8; (2)数据库命名规范 可以由字母.数字 ...

  3. MySQL存储引擎、基础数据类型、约束条件

    MySQL存储引擎 存储引擎 # 存储引擎可以堪称是处理数据的不同方式 # 查看存储引擎的方式 show engines; # 需要掌握的四个存储引擎 MyISAM MySQL5.5之前的默认的存储引 ...

  4. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  5. MySQL存储引擎总结

    MySQL存储引擎总结 作者:果冻想 字体:[增加 减小] 类型:转载   这篇文章主要介绍了MySQL存储引擎总结,本文讲解了什么是存储引擎.MyISAM.InnoDB.MEMORY.MERGE等内 ...

  6. 数据库 --> MySQL存储引擎介绍

    MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...

  7. MySQL存储引擎对比

    MySQL存储引擎对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的存储引擎 大家应该知道MySQL的存储引擎应该是表级别的概念,因为我们无法再创建databas ...

  8. MySQl学习-——Mysql体系结构与Mysql存储引擎

    Mysql体系结构与Mysql存储引擎 Mysql体系结构 mysql体系结构图:

  9. MYSQL存储引擎介绍--应用场景

    MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些? MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默 ...

随机推荐

  1. delphi teechrt中TChart 一些属性设置

    把图片设置成黑白 2.设置颜色

  2. lodash用法系列(6),函数种种

    Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...

  3. 初识序列化和反序列化,使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程.对象一旦被序列化,就可以把对象状态保存到硬盘的某个位置,甚至还可以通过网络发送给另外一台机器上运行的进程.本篇主要包括: ● 使用 ...

  4. 虚拟化(三):vsphere套件的安装注意及使用

     虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(五):vsphere高可用群集与容错 vsphere套件里面基本的组件有e ...

  5. SharePoint PowerShell 修改计时器任务

    前言 最近碰到需要修改计时器任务的需求,然后搜了搜,发现有powershell命令可以搞定,记录一下. $timerJob = Get-SPTimerJob -Identity "DocID ...

  6. Swift - 添加纯净的Alamofire

    Swift - 添加纯净的Alamofire 如果你有代码洁癖,不能容忍任何多余的东西,请继续往下看.  . 下载Alamofire (https://github.com/Alamofire/Ala ...

  7. 处理【Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operatio】

    错误详情]:{DAL:DAL05}{Host:192.168.100.158}Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf ...

  8. 逍遥法外第一季/全集How To Get Away With Murder迅雷下载

    英文译名 How To Get Away With Murder (第1季) (2014-09-26首播)ABC.本季看点: <逍遥法外又名:天才刑法班>由<实习医生格蕾>和& ...

  9. 用IO流向存储器或SD卡中存入/读取字符的工具类

    FileManager package com.kale.utils; import java.io.BufferedReader; import java.io.File; import java. ...

  10. Java比较两个Date日期的大小

    import java.util.*; import java.text.ParseException; import java.text.SimpleDateFormat; class Test{ ...