目录
3、MySQL的基本语法
3.1、数据类型
3.1.1、数值类型
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,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
整数类型在定义时,可用的参数有三个:
-
M : 表示显示宽度,M的取值范围是(0, 255)。该项功能需要配合“ ZEROFILL填零 ”使用,用“0”填满宽度。
-
UNSIGNED:无符号类型(非负),最小取值为0。
int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)。
-
ZEROFILL:填零,用0填充
2、位类型
BIT类型,BIT类型中存储的是二进制值,如果没有指定(M),默认是1位,只有0和1。(M)是表示二进制的位数,位数最小值为1,最大值为64。
类型 | 字节长度 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
BIT | 1 | 0或1 | 类似布尔值 |
3、小数点型
浮点数和定点数类型的特点是可以处理小数,
-
浮点型:不精准,要避免使用“=”来判断两个数是否相等。
类型 字节长度 范围(有符号) 范围(无符号) 用途 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和D的值 定点数,取值精确准,没有误差,适合于对精度要求极高的场景
3.1.2、时间类型
使用较多,在创建数据库时必要添加的字段就是主键ID、数据的创建时间和数据的修改时间,所以每条数据都需要用到时间相关的信息。
类型 | 大小 ( bytes) | 格式 | |
---|---|---|---|
DATE(年、月、日) | 3 | YYYY-MM-DD | 使用 CURRENT_DATE() 或者 NOW() 函数,会插入当前系统的日期。 |
TIME(时、分、秒) | 3 | HH:MM:SS | 使用 CURRENT_TIME() 或者 NOW() ,会插入当前系统的时间。 |
YEAR(年) | 1 | YYYY | |
DATETIME(年、月、日、时、分、秒) | 8 | YYYY-MM-DD HH:mm:ss | 使用函数 CURRENT_TIMESTAMP() 和 NOW() ,可以向DATETIME类型的字段插入系统的当前日期和时间。 |
TIMESTAMP(时间戳) 1970.1.1 到现在的毫秒数,便于计算 | 4 | YYYYMMDD HHMMSS |
3.1.3、文本类型
1、Text类型
类型 | 大小M | 用途 |
---|---|---|
CHAR | 0- M- 255,占用M和字节 | 定长字符串,需要指定长度,默认为1,如果数据小于指定长度,会用空格填充(在检索时会自动去除空格) |
VARCHAR | 0-M-65535,占用M+1个字节 | 变长字符串,须指定 长度M,VARCHAR(20),表示可以保存20个字符,比CHAR节省空间,但是效率要低于CHAR |
TINYTEXT | 0 - M -255 ,占用M+ 2 个字节 | 微型文本,可变长度 |
TEXT | 0 - M- 65535,占用M+ 2 个字节 | 文本、可变长度 |
MEDIUMTEXT | 0- M- 6 777 215,占用M+ 3 个字节 | 中等长度文本数据、可变长度 |
LONGTEXT | 0- M- 4 294 967 295,占用M+ 4个字节 | 极大文本数据、可变长度 |
JSON | 轻量级的 数据交换格式,保存JSON对象,JSON数组 | |
UUID |
2、二进制文件
二进制字符串类型主要存储一些二进制数据,比如可以存储图片、音频和视频等二进制数据.
类型 | 大小 | 用途 |
---|---|---|
BINARY | 0 -M - 255,M个字节 | 存储的是二进制字符串,和CHAR类似 |
VARBINARY | 0 -M- 65535,M+1个字节 | 存储的是二进制字符串,和VARCHAR类似 |
TINYBLOB | 0-M -255,M+1个字节 | 不超过 255 个字符的二进制字符串 |
BLOB | 0-M -65 535,M+2个字节 | 二进制形式的长文本数据,可以容纳可变数量的数据。 |
MEDIUMBLOB | 0-M -16 777 215,M+3个字节 | 二进制形式的中等长度文本数据 |
LONGBLOB | 0-M -4 294 967 295,M+4个字节 | 二进制形式的极大文本数据 |
3.1.4、其他
类型 | 长度M | 用途 |
---|---|---|
ENUM | 1 - M - 65535 ,占用1或2个字节 含1~255个成员时,需要1个字节的存储空间; 含256~65535个成员时,需要2个字节的存储空间 | 枚举类型,只允许从成员中选取单个值,不能一次选取多个值 |
SET | 1 - M - 8 1个字节 9 - M - 16 2个字节 17 - M - 24 3个字节 25 - M - 32 4个字节 33 - M - 64 8个字节 | SET类型在选取成员时,可以一次选择多个成员 |
3.1.5、阿里的规范
-
任何字段如果为非负数,必须是 UNSIGNED
-
【 强制 】小数类型为 DECIMAL,禁止使用 FLOAT 和 DOUBLE。
(在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。如果存储的数据范围超过 DECIMAL 的范围,建议将数据拆成整数和小数并分开存储。)
-
【 强制 】如果存储的字符串长度几乎相等,就使用 CHAR 定长字符串类型。
-
【 强制 】VARCHAR 是可变长字符串,不预先分配存储空间,长度不要超过 5000。如果存储长度大于此值,定义字段类型为 TEXT,独立出来一张表,用主键来对应,避免影响其它字段索引效率。