一、数据类型(DATA Type)概述
MySQL支持多种类型的SQL数据类型:数字类型,日期和时间类型,字符串(字符和字节)类型以及空间类型
数据类型描述使用以下约定:
- M表示整数类型的最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。允许的最大值M取决于数据类型
- D适用于浮点和定点类型,并指示小数点后面的位数(刻度)。最大可能值为30,但不应大于 M-2。
- 方括号([和])表示类型定义的可选部分
1.1、数字类型
M表示整数类型的最大显示宽度。最大显示宽度为255.显示宽度与类型可包含的值范围无关,对于浮点和定点类型,M是可以存储的总位数。
如果指定ZEROFILL数字列,MySQL会自动将该UNSIGNED 属性添加到列中。
允许该UNSIGNED 属性的数字数据类型也允许SIGNED。但是,默认情况下SIGNED会对这些数据类型进行签名,因此该 属性不起作用。
SERIAL是别名BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE。
SERIAL DEFAULT VALUE在整数列的定义中是别名NOT NULL AUTO_INCREMENT UNIQUE。
-
BIT[(M)]
位值类型。M表示每个值的位数,从1到64.如果M省略,则默认值为1 -
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个非常小的整数。签署的范围是 -128到127。无符号的范围是0到 255。 -
BOOLEAN
这些类型是同义词 TINYINT(1)。值为零被视为false。非零值被认为是真的:
数字类型 | 描述 |
---|---|
TINYINT | 一个非常小的整数 |
SMALLINT | 一个小整数 |
MEDIUMINT | 一个中等大小的整数 |
INT | 标准整数 |
BIGINT | 一个大整数 |
DECIMAL | 定点数 |
FLOAT | 单精度浮点数 |
DOUBLE | 双精度浮点数 |
1.2、MySQL布尔数据类型
MySQL没有内置 BOOLEAN或BOOL数据类型。为了表示布尔值,MySQL使用最小的整数类型TINYINT(1)。换句话说,是 BOOLEAN和BOOL的同义词TINYINT(1).
1.3、MySQL String数据类型
在MySQL中,字符串可以包含从纯文本到二进制数据(如图像或文件)的任何内容。通过使用LIKE运算符, 正则表达式和全文搜索,可以基于模式匹配来比较和搜索字符串
字符串类型 | 描述 |
---|---|
CHAR | 固定长度的非二进制(字符)字符串 |
VARCHAR | 可变长度的非二进制字符串 |
BINARY | 固定长度的二进制字符串 |
VARBINARY | 可变长度的二进制字符串 |
TINYBLOB | 一个非常小的BLOB(二进制大对象) |
BLOB | 一个小BLOB |
MEDIUMBLOB | 一个中等大小的BLOB |
LONGBLOB | 一个大BLOB |
TINYTEXT | 一个非常小的非二进制字符串 |
TEXT | 一个小的非二进制字符串 |
MEDIUMTEXT | 中等大小的非二进制字符串 |
LONGTEXT | 一个很大的非二进制字符串 |
ENUM | 枚举; 可以为每个列值分配一个枚举成员 |
SET | 一套; 可以为每个列值分配零个或多个SET成员 |
MySQL日期和时间数据类型
MySQL提供日期和时间类型以及日期和时间的组合。此外,MySQL支持 时间戳数据类型,用于跟踪表中一行的更改。如果您只想存储没有日期和月份的年份,则可以使用YEAR数据类型。日期和时间类型代表的时间值 DATE, TIME, DATETIME, TIMESTAMP,和 YEAR。每个时间类型都有一系列有效值,以及当您指定MySQL无法表示的无效值时可以使用的“ 零 ”值。该TIMESTAMP类型具有特殊的自动更新行为
日期和时间类型 | 描述 |
---|---|
DATE | CCYY-MM-DD格式的日期值 |
TIME | hh:mm:ss格式的时间值 |
DATETIME | CCYY-MM-DD hh:mm:ss格式的日期和时间值 |
TIMESTAMP | CCYY-MM-DD hh:mm:ss 格式化的时间戳值 |
YEAR | 年份CCYY或YY 格式 |
MySQL空间数据类型
空间数据类型 | 描述 |
---|---|
GEOMETRY | 任何类型的空间值 |
POINT | 一个点(一对XY坐标) |
LINESTRING | 曲线(一个或多个POINT 值) |
POLYGON | 一个多边形 |
GEOMETRYCOLLECTION | 一组GEOMETRY value |
MULTILINESTRING | 一组LINESTRING value |
MULTIPOINT | 一组POINT value |
MULTIPOLYGON | 一组POLYGON Value |
JSON数据类型
JSON自5.7.8版本以来,MySQL支持本机数据类型,允许您更有效地存储和管理JSON文档。本机JSON数据类型提供JSON文档和最佳存储格式的自动验证
二、MySQL备份和恢复
备份数据库非常重要,这样您就可以恢复数据,并在发生问题时重新启动并运行,例如系统崩溃,硬件故障或用户错误地删除数据。在升级MySQL安装之前,备份也是必不可少的保护措施,它们可用于将MySQL安装转移到另一个系统或设置复制从属服务器。
2.1、备份和恢复类型
- 物理与逻辑备份
物理备份由目录的原始副本和存储数据库内容的文件组成。此类备份适用于需要在出现问题时快速恢复的大型重要数据库。
逻辑备份保存表示为逻辑数据库结构(CREATE DATABASE, CREATE TABLE语句)和内容(INSERT语句或分隔文本文件)的信息。此类备份适用于较少量的数据,您可以在其中编辑数据值或表结构,或在不同的计算机体系结构上重新创建数据。 - 在线与离线备份
在MySQL服务器运行时进行联机备份,以便可以从服务器获取数据库信息。服务器停止时会发生脱机备份。这种区别也可以描述为“ 热 ”与 “ 冷 ”备份; 一个“ 温暖 ”的备份是一个在服务器保持运行,但锁定,以防止当你从外部访问数据库文件修改数据。 - 本地与远程备份
本地备份在运行MySQL服务器的同一主机上执行,而远程备份则从其他主机完成。对于某些类型的备份,即使输出是在服务器上本地写入的,也可以从远程主机启动备份。 - 快照备份
某些文件系统实现可以执行“ 快照 ” 。它们在给定时间点提供文件系统的逻辑副本,而不需要整个文件系统的物理副本。(例如,实现可能使用写时复制技术,因此只需要复制快照时间之后修改的部分文件系统。)MySQL本身不提供获取文件系统快照的功能。它可通过Veritas,LVM或ZFS等第三方解决方案获得。 - 完全与增量备份
完整备份包括MySQL服务器在给定时间点管理的所有数据。增量备份包括在给定时间跨度内(从一个时间点到另一个时间点)对数据所做的更改。MySQL有不同的方法来执行完整备份,例如本节前面所述的那些。通过启用服务器的二进制日志(服务器用于记录数据更改),可以实现增量备份 - 完全与时间点恢复
完全恢复可从完整备份中恢复所有数据。这会将服务器实例还原到备份时的状态。如果该状态不够充分,则可以在完全恢复之后恢复自完全备份以来所做的增量备份,以使服务器处于更新状态。
增量恢复是恢复在给定时间跨度内所做的更改。这也称为时间点恢复,因为它使服务器的状态达到给定时间。时间点恢复基于二进制日志,通常在备份文件完全恢复之后,将备份文件还原到备份时的状态。然后,在二进制日志文件中写入的数据更改将作为增量恢复应用于重做数据修改,并使服务器达到所需的时间点。
- 表维护
如果表损坏,数据完整性可能会受到影响。对于 InnoDB表格,这不是典型问题。MyISAM 如果程序检查表并在发现问题时进行修复 - 备份调度,压缩和加密
备份计划对于自动化备份过程很有价值。压缩备份输出可减少空间需求,输出加密可提供更好的安全性,防止未经授权访问备份数据。MySQL本身不提供这些功能。MySQL Enterprise Backup产品可以压缩InnoDB备份,并且可以使用文件系统实用程序实现备份输出的压缩或加密。
2.2、数据库备份方法
- 使用MySQL Enterprise Backup进行热备份
- 使用mysqldump或mysqlhotcopy进行备份
- 通过复制表文件进行备份
- 制作分隔文本文件备份
- 通过启用二进制日志进行增量备份
- 使用复制从站进行备份
- 恢复损坏的表
- 使用文件系统快照进行备份