目录

前言:

数据类型:

整数型:

浮点数与定点数:

浮点数:

定点数:

日期与时间:

DATATIME:

 DATE:

TIMESTAMP:

编辑 YEAR: 

TIME:

字符串类型之文本字符串:

CHAR(M):

VARCHAR(M):

TEXT:

ENUM:

SET:


前言:

前面的几篇写了如何创建数据库、创建数据表、如何更改表中的字段、如何进行主键约束、唯一约束、外键约束等等。本篇就要说一下数据表里面的”数据“。

首先说说数据类型。

数据类型:

无非是四大类:整数型、浮点数、日期时间字符串

在前面的博文中,出现了INT(11) 和 FLOAT 两种数据类型。看到这里,有个问题想问很久了:括号里面的11,指的是什么?

该数字指的是数值的数字个数。如 123,个数是3.

那我们先来看整数型。

整数型:

首先,回答问题: tiny,small 谁最小?

tiny

因此 TINYINT 也是最小的,其次是 SMALLINT  <  MEDIUMINT  <  INT <  BIGINT。

整数类型

储存字节

无符号取值范围

有符号取值范围

TINYINT

1

0~255

-128 ~ 127

SMALLINT

2

0~65535

-32768 ~ 32767

MEDIUMINT

3

0~16777215

-8388608 ~ 8388607

INT

4

0~4294967295

-2147483648 ~ 2147483647

BIGINT

8

超大

超大too

# 注意,括号内是数据长度,数据长度和取值范围没有关系,并不相互限制!

尝试创建一个数据表,对比一下子这五款数据类型:

MySQL 整数 Like mysql中整数类型_mysql

# 表的字段不能用 in,会报错。

浮点数与定点数:

浮点数:

浮点数分为单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),如果不太清楚这个概念的话请点击下方大佬链接进行查看:

(这些数据的取值范围太大了,痛苦的闭上了眼睛,就不一一往里敲了,允许我懒惰一下。)

# 如果用户指定的精度超过了精度范围,就会四舍五入处理。

# 插一句:其实在python中使用浮点数的时候,敲进去倒是无所谓,一旦进行运算,就会发现精度问题很大,这里也是一样的,所以要尽量避免用浮点数进行运算。

定点数:

DECIMAL (M,D)

定点数以字符串的形式储存,这样的话其精度就相对较高。

其实说到这里还是晕乎乎的,那么我们直接上例子:

首先选择一个数据库,创建一个名为 flot 的数据表,提示语句如下:

CREATE TABLE flot

(f FLOAT(5,2), d DOUBLE(6,2), dc DECIMAL(5,2));

MySQL 整数 Like mysql中整数类型_字符串_02

括号内的数字分别表示(总共数字数,小数点后数字数) 

成功后查看一下数据表:

MySQL 整数 Like mysql中整数类型_sql_03

好的,这个数据表已经创建完成了,那么我们往里添加数据。

INSERT INTO <表名> VALUES(数据);

MySQL 整数 Like mysql中整数类型_sql_04

 如果想要查看表中的数据,就不能使用 DESC 语句了,应该改为 SELECT * FROM <表名>;

MySQL 整数 Like mysql中整数类型_mysql_05

可以看到,我们输入的浮点数原封不动的保留了下来,即保留了两位小数。

那么再来尝试一下输入带有三位小数的数字。

MySQL 整数 Like mysql中整数类型_数据库_06

结果如下:

MySQL 整数 Like mysql中整数类型_mysql_07

对比前后两个,我们可以发现,浮点数和定点数都进行了四舍五入的操作。后面只保留两位小数,也就是说,我们在建表的时候,字段 FLOAT 后面的【字段属性】 (f FLOAT(5,2), d DOUBLE(6,2), dc DECIMAL(5,2));,第二个数字“2”,表示的是“保留几位小数”。 

这里有一个warning,我们使用: SHOW WARNINGS; 进行查看

MySQL 整数 Like mysql中整数类型_mysql_08

 就是告诉你:输入的浮点数,如果小数点后面的数字数超过了规定数量,会自动四舍五入;定点数也会自动四舍五入,但是他会返回一个WARNING 告诉你。

接下来验证【字段属性】中第一个数字是干嘛用的:

(f FLOAT(5,2), d DOUBLE(6,2), dc DECIMAL(5,2));

随意插入几个比较大的浮点数:

MySQL 整数 Like mysql中整数类型_字符串_09

(这里建议各位可以自己操作下,比干看我的错误强) 

经过一堆错误之后,发现最后一个对了,那么我们查看下表内数据:

MySQL 整数 Like mysql中整数类型_数据库_10

我们可以发现:

1. 规定小数后有2位,如果不满2位,用0补齐,超过两位,四舍五入。

2. 建立数据表字段属性的时候,括号内第一个(就是前面标红的数字) 指的是数据中包含的数字个数。

日期与时间:

DATETIME:YYYY-MM-DD HH:MM:SS 

DATE:  YYYY-MM-DD

TIMESTAMP:  YYYY-MM-DD HH:MM:SS

YEAR:  YYYY

TIME:  HH:MM:SS

为了方便操作,我建立了一个数据表:

MySQL 整数 Like mysql中整数类型_mysql_11

DATATIME:

该类型包括 “年 月 日 时 分 秒”,以字符串形式输入,需要8个字节储存。

如:生成 2012-5-6 06: 30: 10  这一个时间,

可以输入:“2012-5-6 06: 30: 10” 或 “20120506063010”.

#  注意取值范围不要太过,年最小为1000,最大为 9999。

创建语句如下,创建后进行检查:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_12

 

MySQL 整数 Like mysql中整数类型_数据库_13

也可以输入:“12-5-6 06: 30: 10”或 “120506063010”.

# 这里我只输入了年份的后半部分,不过这里需要注意取值范围:“00~69” --> “2000~2069”;“70~99” --> “1970~1999”

MySQL 整数 Like mysql中整数类型_mysql_14

尝试输入“981203193010”:

MySQL 整数 Like mysql中整数类型_数据库_15

使用 NOW() 插入当前日期和时间。

 

MySQL 整数 Like mysql中整数类型_mysql_16

 如果使用 CURRENT_DATE()  则会只显示“年月日”,不显示时间。

 DATE:

YYYY-MM-DD: 需要3个字节进行储存。

这一部分的格式可以参考 DATETIME 的“年月日”部分,完全相同。(这一部分不再进行实践)

使用 CURRENT_DATE() 或 NOW() 插入当前日期。

依然利用上面创建的数据表,添加字段 d ,数据类型为 DATE:

MySQL 整数 Like mysql中整数类型_mysql_17

查看后,确定添加完成。

向表内插入数据,如果不想插入“DATETIME”类型数据,可以用 NULL 来占位。

MySQL 整数 Like mysql中整数类型_字符串_18

 尝试插入当前时间:

MySQL 整数 Like mysql中整数类型_字符串_19

 

MySQL 整数 Like mysql中整数类型_mysql_20

TIMESTAMP:

TIMESTAMP 的显示格式和 DATETIME 相同,储存需要4字节,但DATESTAMP 的范围明显小于 DATETIME。其范围为:'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC

# UTC = Coordinated Universal Time 标准时区

和DATETIME不同的是,TIMESTAMP 是先将输入的时间转化为标准时区的时间,并以标准时区格式进行保存,查询时再进行转换。

MySQL 整数 Like mysql中整数类型_mysql_21

这个语句可以修改时区:

set time_zone='+<小时数>';

MySQL 整数 Like mysql中整数类型_mysql_22

YEAR: 

范围: 1901~2155

在添加“年”的时候,可以使用字符串,也可以使用数字。字符串和前面的内容一样,数字则需要注意“0”和“00”。

添加字段:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_23

先添加 数字00 试试看。

MySQL 整数 Like mysql中整数类型_字符串_24

 添加数字 0 试试:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_25

添加字符串 “00”:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_26

这回就变成了 2000,再试试单个字符“0”:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_27

依然是可行的。

再试试其他数字,如 1978;

MySQL 整数 Like mysql中整数类型_mysql_28

 是可以的。

TIME:

取值范围:-838:59:59 ~ 838:59:59

TIME 类型不但可以表示一天的时间,还可表示过去的时间,和时间段。

插入时间的时候也有不同类型:

1122:指的是 00:11:22

前面的数据太多,清空一下:

MySQL 整数 Like mysql中整数类型_mysql_29

好的,我们来重复前面的步骤,添加字段,插入数据:

MySQL 整数 Like mysql中整数类型_sql_30

11: 22: 00

MySQL 整数 Like mysql中整数类型_mysql_31

 差别显而易见。

如何表示“一段时间”呢?

D HH 格式:

比如我想输出:2天零3个小时

’2 03‘

MySQL 整数 Like mysql中整数类型_mysql_32

 2天3小时27分51秒:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_33

# 时间部分也可以什么符号都不带,直接敲一串数字:031729——3小时17分钟29秒,但要注意,分钟部分不能够超过60,否则就会报错。

# 如果想要输出当前的时间,NOW() 最方便,还可以尝试 CURRENT_TIME()

MySQL 整数 Like mysql中整数类型_mysql_34

MySQL 整数 Like mysql中整数类型_数据库_35

注意:

MySQL允许不规则语法出现,可以用各种符号代替 “-” 和 “:”,不建议这么干,太乱。

字符串类型之文本字符串:

MySQL支持两类字符串:文本字符串和二进制字符串,这里先说文本字符串。

CHAR,   VARCHAR,   TINYTEXT,   TEXT,   MEDIUMTEXT,   LONGTEXT,   ENUM,   SET

CHAR(M):

固定长度为M,1<= M <= 255

固定长度的意思为:如果输入的是空,则用空格进行占位。

首先创建一个名为 str 的数据表,并加上字段:c CHAR(4)。

MySQL 整数 Like mysql中整数类型_字符串_36

(以往我们在数据表中输入数据,如果数据为空,直接输入 NULL 进行占位,如果不输入,则会报错。如果字段的数据类型是 CHAR, 则可以输入 NULL ,输出结果为“NULL”,但如果只输入一个空字符串,也不会报错,查看的时候会返回一个空的字符串。)

测试如下:

MySQL 整数 Like mysql中整数类型_mysql_37

 # 上面的 vc 是我在数据表中插入的另一个字段 vc VARCHAR(4)

MySQL 整数 Like mysql中整数类型_字符串_38

VARCHAR(M):

这个数据类型很常见了。 

非固定长度L=M+1,L <= M,  1 <= M <= 255;

其实上面也已经给出了其相关用法,我们插入一个空字符串:

MySQL 整数 Like mysql中整数类型_mysql_39

 # 这里就不对该类型做过多解释了,如果输入的字符串长度超过了字段属性中的限制数量,那么就会“自行截断”。

TEXT:

 主要用来保存文章内容啦,评论啦等等,而他旗下的小弟们,如:TINYTEXT,   TEXT,   MEDIUMTEXT,   LONGTEXT,最大的区别就是储存长度和储存空间不同。

ENUM:

其实就是enumerate 的意思。

我将其理解为 “盖章”。举个例子,每个分数都有其对应的评级:优,良,中,差;类似于标签。

# ENUM和“自动增加约束”不一样,ENUM 需要手动添加。

# 应该可以实现自动添加,就是我还没有弄清楚。

# ENUM 内部值可以用其名称(但要保持字符串结构),也可以用内部值的‘索引’(从1开始)

重新建立一个名为 str 的数据表:

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_40

# 从 EXCELLENT 到 BAD 的‘索引’ 为:1, 2, 3,4

# 注意每个字段都应该有字段名,不要忘记

插入数据:

MySQL 整数 Like mysql中整数类型_字符串_41

 

不难发现,前三个数据 和 后三个数据是一样的。

查看结果:

MySQL 整数 Like mysql中整数类型_字符串_42

 

SET:

 SET 是字符串对象,里面最多可以放64个成员,使用逗号间隔,为创立数据表规定的值。

# 自动删除尾部空格

# 自动剔除重复值

# 自动按顺序排列

尝试插入SET:(该数据表依然是重新创立的)

MySQL 整数 Like mysql中整数类型_mysql_43

 会发现报错了,为什么?

没添加值呀!

# 注意,SET 内部添加的是字符串,整数INT放进去也要加‘’

# SET 中放入的是单个字符,插入的值也应该是单个字符

MySQL 整数 Like mysql中整数类型_sql_44

 # 自动排序

MySQL 整数 Like mysql中整数类型_MySQL 整数 Like_45

 # 删除重复内容

关于二进制字符串类型,最近会添加在本文中。