一、认识存储引擎

与其他数据库软件不同,MySQL数据库软件提供了一个名为存储引擎的概念。由于存储引擎是以插件的形式被MySQL数据库软件引入,所以可以根据实际应用、实际的领域来选择相应的存储引擎。

在MySQL数据库软件中,虽然通过存储引擎决定数据库对象表的类型,但是如果想创建表, 还需要了解数据类型,因为其决定了表中可以存储数据的类型。

存储引擎是MySQL数据库管理系统的一个重要特征,在具体开发时,为了提髙MySQL数据库管理系统的使用效率和灵活性,可以根据实际需要来选择存储引擎。因为存储引擎指定了表的类型,即如何存储和索引数据、是否支持事务等,同时存储引擎也决定了表在计算机中的存储方式。

1.1 MySQL5.6所支持的存储引擎

用户在选择存储引擎之前,首先需要确定数据库管理系统支持哪些存储引擎。查看帮助文档发现在MySQL数据库管理系统中査看支持的存储引擎通过SQL语句SHOW ENGINES来实现,其语法形式如下:

SHOW ENGINES;

在上述语句中可以实现查看当前MySQL数据库管理系统所支持的存储引擎。

执行结果显示,MySQL5.6支持9种存储引擎,分别为FEDERATED 、MRG_MYISAM、MyISAM、 BLACKHOLE、CSV、MEMORY、ARCHIVE、Inno和 PERFORMANCE_SCHEMA。

其中 Engine 参数表示存储引擎名称;Support参数表示MySQL数据库管理系统是否支持该存储引擎,其中值YES表示支持,值No表示不支持,值DEFAULT表示该存储引擎是数据库管理系统默认支持的存储引擎;Comment参数表示关于存储引擎的评论;Transactions参数表示存储引擎是否支持事务,其中值YES表示支持,而值NO表示不支持;XA参数表示存储引擎所支持的分布式是否符合XA规范,其中值YES表示支持,而值NO表示不支持;Savepoints参数表示存储引擎是否支持事物处理中的保存点,其中值YES表示支持,而值NO表示不支持。

注意:通过执行结果可以发现,MySQL5.6数据库管理系默认的存储引擎为InnoDB存储引擎.

在具体执行SQL语句中,可以用“;”、“\g”和“\G”符号表示语句结束。其中前两个符号的作用一样,而最后一个符号除了表示语句结束外,还可以使得结果显示的更加美观。执行SQL语句show engines;以“;”或者“\g”作为结束符号査看存储引擎,具体SQL语句如下:

SHOW ENGINES;

或者

SHOW ENGINES\g;

1.2 操作默认存储引擎

查看帮助文档可以发现,安装版MySQL5.6数据库管理系统的默认存储引擎为InnoDB。

1、查询默认存储引擎

如果需要操作默认存储引擎,首先需要查看默认存储引擎。那么如何查看默认存储引擎呢?可以通过执行show variables来查看馱认的存储引擎,具体SQL语句如下:

SHOW VARIABLES LIKE 'storage_engine%';

上述命令中,设置关键字like,关键字为“storage_engine %”,表示查询默认存储引擎。 执行

2、修改默认存储引擎

在MySQL数据库管理系统中,如果需要修改默认存储引擎,可以通过手动修改配置文件方式。

通过手动方式来修改馱认存储引擎时,需要修改MySQL数据库管理系统的配罝文件my.ini,具体步骤如下:

(1) 首先打my.ini配置文件,关于“[mysqld]”组的内容如下:

如果想修改默认存储引準,只需修改[mysqld]组中的default-storage-engine=INNODB参数。即如果想设置默认存储引擎为MyISAM,只需修改成“default-storage-engine= MyISAM”即可实现。

注意:如果想使修改后的参数生效,须重新启动MySQL服务.

(2) 重启MySQL服务后,这时再次执行SQL语句show variables来查看默认的存储引擎,具体SQL语句如下:

SHOW VARIABLES LIKE 'storage_engine%';

1.3 选择存储引擎

在具体使用MySQL数据库管理系统时,选择一个合适的存储引擎是一个非常复杂的问题。因为每种存储引擎都有自己的特性、优势和应用场合,所以不能随便选择存储引擎。为了能够正确地选择存储引擎,必须掌握各种存储引擎的特性。

下面重点介绍几种常用的存储引擎,它们对各种特性的支持如下表所示。

表 存储引擎特性

特性

MylSAM

lnnoDB

MEMORY

存储限制

64TB

事务安全

不支持

支持

不支持

锁机制

表锁

行锁

表锁

B树索引

支待

支持

支持

哈希索引

不支持

不支持

支持

全文索引

支持

不支持

不支持

集群索引

不支持

支持

不支持

数据缓存

支持

支持

索引缓存

支持

支持

支持

数据可压缩

支持

不支持

不支持

空间使用

N/A

内存使用

中等

批量插入的速度

支持外键

不支持

不支持

不支持

表主要介绍了 MylSAM、InnoDB和MEMORY三种存储引擎特性的对比,接下来将详细介绍这3个存储引擎的应用场合并给出相应的建议。

●MyISAM存储引擎:由于该存储引擎不支持事务、也不支持外键,所以访问速度比较快。因此对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

●InnoDB存储引擎:由于该存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比MylSAM存储引擎占用更多的磁盘空间。因此需要进行频繁的更新、删除操作,同时还对事务的完整性要求比较髙,需要实现并发控制,此时适合使用该存储引擎。

●MEMORY存储引擎:该存储引擎使用内存来存储数据,因此该存储引擎的数据访问速度快, 但是安全上没有保障。如果应用中涉及数据比较小,需要进行快速访问,则适合使用该存储引擎.

二、数据类型

在MySQL数据库管理系统中,可以通过存储引擎来决定表的类型,即其决定了表的存储方式。同时MySQL数据库管理系统也提供了数据类型决定表存储数据的类型。MySQL数据库管理系统提供了整数类型、浮点数类型、定点数类型和位类型、日期和时间类型、字符串类型。

2.1 整数类型

MySQL数据库管理系统除了支持标准SQL中的所有整数类型(smallint和int),还进行了相应扩展。扩展后增加了tinyint、mediumint和bigint这三个整数类型。

下表通过展示各种整数类型的特性,其中int与integer这两个整数类型是同名词(可以相互替换),具体内容如下。

表 整数类型

整数类型

宇节

最小值

最大值

TINYINT

1

有符号-128

无符号0

有符号127

无符号255

SMALUNT

2

有符号-32768

无符号0

有符号32767

无符号65535

MEDIUMINT

3

有符号-8388608

无符号0

有符号8388607

无符号1677215

INT 和 INTEGER

4

有符号-2147483648

无符号0

有符号 2147483647

无符号 4294967295

BIGINT

8

有符号-922337203685477580无符号0

有符号 9223372036854775807

无符号 18446744073709551615

表中内容显示,tinyint类型占用字节数最小,只需1字节,因此该类型的取值范围最小。bigint类型占用字节数最大,需要8个字节,因此该类型的取值范围最大。

注意:为什么要了解整数类型所占的字节数?因为根据数据类型所占的字节数可以算出该类型的取值范围。

在计算机中所有的内容都存储为不同组合的二进制码(0和1),整数类型数据也不例外,只不过整数是有符号数(正负数),因此其左边的第一位为符号位(0为正数,1为负数)。例如,tinyint 类型占1字节(1字节=8位),所以该类型数据的最大值二进制如下图1所示,最小值二进制如图2所示,

图1 正整数最大值二进制表示

0

1

1

1

1

1

1

1

图2 负整数最小值二进制表示

1

0

0

0

0

0

0

0

对于上图1所示的二进制数,转换成十进制数为27-1,即127。对于图2所示的二进制数,转换成十进制数为-27,即-128。

在具体使用MySQL数据库管理系统时,如果需要存储整数类型数据,则可以选择tinyint、 smallint、mediumint、int、integer和bigint类型,至于选择这些类型中的哪一个,首先霜要判断存储整数数据的取值范围,当不超过255时,那选择tinyint类型就足够了。虽然bigint类型的取值范围最大,最常用的整数类型却是int类型。

如果无法区分各个整数类型的表示范围,可以通过查看MySQL的系统帮助查看相关信息。查看系统帮助的方法如下所示。

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

MySQL数据库管理系统除了支持标准SQL中的所有浮点数类型(float和double)、定点数类型(decimal)外,还进行了相应扩展。扩展后增加了位类型(bit)。

下面通过表展示各种浮点数类型的特性,具体内容如下《

表 浮点数类型

浮点数类型

字节

最小值

m大值

FLOAT

4

± 1.7S4943S1E - 38

±3.402823466E+38

DOUBLE

8

± 2.22S073SS8S072014E - 308

± 1.797693I348623157E + 308

上表中内容显示,float类型占用字节数为4,该类型的取值范圃最小,double类型占用字节数为8,该类型的取值范围最大。

在具体使用MySQL数据库管理系统时,如果需要存储小数数据,则可以选择float和 double类型,至于选择这两个类型中的哪-个,则需要判断存储小数数据需要精确的小数位数,当需要精确到小数点后10位以上,就需要选择double类型。 下面通过表展示定点数类型的特性,具体内容如下。

表4.4定点数类型

定点数类型

字节

最小值

最大值

DEC(M,D) DECIMAL(M,D)

M+2

与double相同

与double相同

上表中内容显示,其中DEC、DECIMAL这两个定点数类型是同名词,该类型的取值范围与double类型相同,但是其有效取值范围由M和D来决定。

在具体使用MySQL数据库管理系统时,如果需要存储小数数据,除了可以选择float和double类型外,还可以选择dec和decimal类型,当要求小数数据精确度非常高时,则可以选择dec和decimal类型,它们的精确度比double类型还要高。

Float、double数据类型存储数据时存储的是近似值,而decimal存储的是字符串,因此提供了更高的精度,在需要表示金额等货币类型时优先选择decimal数据类型。下面通过表展示位类型的特性,具体内容如下。

表 位类型

位类型

字节

最小值

最大值

Bit(M)

1~8

Bit(1)

Bit(64)

表内容显示,位类型bit的字节数是M,M的取值范围为1〜8,即该类型的存储空间是根据其精度决定的。

2.3 日期和时间类型

MySQL数据库管理系统中有多种表示曰期和时间的数据类型,各种版本有微小的差异,下面通过表展示数据库管理系统所支持日期和时间类型的特性,具体内容如下。

表 日期和时间类型

日期和时间类型

字节

最小值

•大值

DATE

4

1000-01-01

9999-12-31

DATETIME

8

1000-01~0l 00:00:00

9999-12-31 23:59:59

TIMESTAMP

4

19700101080001

2038年的某个时刻

TIME

3

-835:59:59

838:59:59

YEAR

1

1901

2155

表中内容显示,每种日期和时间数据类型都有一个取值范围,如果插入的值超过了该类型的取值范围,则会插入默认值。

在具体应用中,各种日期和时间类型的应用场合如下:

•如果要表示年月日,一般会使用date类型。

•如果要表示年月日时分秒,一般会使用datetime类型。

•如果需要经常插入或者更新日期为当前系统时间,一般会使用timestamp类型

•如果要表示时分秒,一般会使用time类型。

•如果要表示年份,一般会使用year类型。因为该类型比date类型占用更少的空间。

在具体使用MySQL数据库管理系统时,要根据实际应用来选择满足需求的最小存储的日期类。例如,如果应用只需存储“年份”,则可以选择存储字节为1的year类型。如果要存储年月日时分秒,并且年份的取值可能比较久远,最好使用datetime类型,而不是timestamp类型, 因为前者比后者所表示的日期范围要长一些。如果存储的日期需要让不同时区的用户使用,则可以使用timestamp类型,因为只有该类型日期能够与实际时区相对应。

2.4 字符串类型

MySQL数据库管理系统中有多种表示字符串的数据类型,各种版本有微小的差异,下面通过表展示数据库管理系统所支持的char系列字符串类型的特性,具体内容如下。

表 char系列字符串类型

char系列字符串类型

字节

描述

CHAR(M)

M

M为0-255之间的整数

VARCHAR(M)

M

M为0-65535之间的整数

表中内容显示,字符串类型char的字节数是M,例如char(4)的数据类型为char,其最大长度为4个字节。varchar类型的长度是可变的,其长度的范围为0〜65535。

在具体使用MySQL数据库管理系统时,如果需要存储少量字符串,则可以选择char和varchar类型,至于是选择这两个类型中的哪一个,则需要判断所存储字符串长度是否经常变化,如果经常发生变化,则可以选择varchar类型,否则选择char类型。

下面通过表展示数据库管理系统所支持的TEXT系列类型字符串的特性,具体内容如下。

表  text系列字符串类型

TEXT系列字符串类型

字节

描述

TINYTEXT

0-255

值的长度为+2个宇节

TEXT

0-65535

值的长度为+2个字节

MEDIUMTEXT

0-167 772 150

值的长度为+3个字节

LONGTEXT

0~4 294 967 295

值的长度为+4个字节

表中内容显示,text系列中的各种字符串类型允许的长度和存储字节不同,其中tinytext字符串类型允许存储字符串长度最小,longtext字符串类型允许存储字符串长度最大。

表  binary系列字符串类型

binary系列字符串类型

字节

描述

Binary(M)

M

允许长度为0~M

Varbinary(M)

M

允许长度为0~M

表中的binary和varbinary两个类型,与char系列字符串中的char和varchar非常类似,不同的是,前者可以存储二进制数据(例如图片、音乐或者视频文件),而后者只能存储字符数据

在具体使用MySQL数据库管理系统时,如果需要存储大量字符串(存储文章内容的纯文本), 则可以选择binary系列字符串类型。至于是选择这些类型中的哪一个,则需要判断所存储字符串长度是否经常变化。如果经常变化选择varbinary否则选择binary类型。

下面通过表展示数据库管理系统所支持的BLOB系列字符串类型的特性,具体内容如下。

表 blob系列字符串类型

BLOB系列字符串类型

字节

TINYBLOB

0-255

BLOB

0-216

MEDIUMBLOB

0-224

LONGBLOB

0-232

表内容中的四个类型,与text系列字符串类型非常类似,不同的是,前者可以存储二进制数据(例如图片、音乐或者视频文件),而后者只能存储字符数据。

在具体使用MySQL数据库管理系统时,如果需要存储大量二进制数据(存储电影等视频文件), 则可以选择blob系列字符串类型。至于是选择这些类型中的哪一个,则需要判断所存储二进制数据长度,根据存储二进制数据的长度来决定是选择允许长度最小的tinyblob字符串类型,还是选择允许长度最大的longblob字符串类型。

MySQL数据库中存储引擎和数据类型相关推荐

  1. mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...

    概述 mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Inno ...

  2. 数据库之存储引擎,数据类型-30

    数据库之存储引擎,数据类型-30 数据存储引擎 什么是引擎 ? 一个功能的核心部分        引擎可以被分类 为什么要分类? 自然 增压的 汽油 柴油 电动 混合动力 天然气 核动力 烧水 汽油 ...

  3. MySQL数据库:存储引擎

    一.什么是存储引擎: 存储引擎是MylSQL的核心,是数据库底层软件组织,数据库使用存储引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁级别.事务等功能.存储引擎是基 ...

  4. MySQL数据库的存储引擎

    目录 1.存储引擎概念 2.常用存储引擎 2.1MyISAM 2.1.1MyISAM的特点 2.1.2MyISAM表支持3种不同的存储格式: 2.1.3MyISAM适用的生产场景举例 2.2InnoD ...

  5. Mysql数据库之存储引擎

    一.存储引擎概念 MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制.索引技巧.锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎. ...

  6. MySQL 数据库常用存储引擎的特点

    数据库的存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 获得 ...

  7. mysql 存储年月_php – 在mysql数据库中存储月份和年份

    我有以下日期: $params['ExpirationMonth']; $params['ExpirationYear']; 关于如何在mysql数据库中只保存月份和年份,我需要一些建议.经过一些研究 ...

  8. mysql数据库federated存储引擎

    1.概述 msyql数据库federated存储引擎是本场端访问.修改远端mysql数据库表数据,与oracle数据库database link类似,但也存在着如下差异: 每个federated表都有 ...

  9. MySQL数据库常见存储引擎(一)

    熟悉mysql数据库的朋友,肯定会喜欢mysql强大的插件式存储引擎,能够支持太多存储引擎,当目前的存储引擎不能满足你的需求时,你可以根据自己的需求选择合适的引擎,将相关的文件拷贝到相关路径,甚至不需 ...

  10. MySQL数据库MyISAM存储引擎转为Innodb

    之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导致了用户连接网站时超时而返回502,于是决定把存储引擎转 ...

最新文章

  1. 用filter实现web程序的统一认证
  2. mysql4.1加密_Java版Mysql4.1之前的old_password加密算法
  3. 加密与安全 - Java加密与安全
  4. spark中的广播变量broadcast
  5. 使用VS2019创建项目,添加文件和库地址
  6. Let’s to be a bug-free programmer
  7. Atitit git 使用法v2 目录 1. Git客户端工具 1 1.1. Tortoisegit git gui 图形化工具。。 1 1.2. Ide中的git插件(eclipse idea
  8. GameofMir__游戏Mod制作【1】
  9. dcdc芯片效率不高的原因_浅析影响DC-DC转换器效率的主要因素
  10. Go语言path is relative, but relative import paths are not supported in module mode
  11. Mac使用技巧:M1芯片的电脑恢复模式如何开启
  12. 计算机替换字体怎么操作,电脑替换文字怎么操作
  13. STM32实现DAC功能输出音频波形
  14. 介绍2款最流行的画PCB工具
  15. JAVA练习:利用JAVA基本语句实现打印日历
  16. Jaeger开发入门(java版)
  17. iso3651_小而强大 11款5K内笔记本真实性能比拼
  18. 2021-07-17 吾日三省吾身
  19. 2022氧化工艺特种作业证考试题库及答案
  20. 起底51信用卡:年赚21亿涉暴力催收,子公司给714高炮导流

热门文章

  1. cocos实现PC端鼠标指针更换功能
  2. 智能制造专业就业方向
  3. 网易博客日志:《数字滤波器》交流-6-LMS算法的训练及工作阶段
  4. A Surface Defect Detection Method Based on Positive Samples
  5. 【kali】34 WEB渗透——扫描工具w3af_console
  6. [论文笔记]Feature-constrained Active Visual SLAM for Mobile Robot Navigation
  7. 蓝桥杯算法竞赛系列第五章——拔高篇之深度优先搜索(DFS)
  8. 手写多图片合并成一张图片功能插件(水印合成)
  9. 校招,面试,学习路线,这个编程学习网站,我爱了
  10. ue4 中动画控制,利用conduit节点