Mysql数据库(二):详细,对新手非常友好

数据类型和运算符

Mysql数据类型介绍

Mysql支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型

  1. 数值数据类型:包括证书类型TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT,浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL.
  2. 日期/时间类型:包括YEAR、Time、DATE、DATETIME和TIMESTAMP
  3. 字符串类型:包括CHAR/VARCHAR/BINARY/VARBINARY/BLOBTEXT/ENUM和SET

整数类型

提供的整数类型有:TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。

类型名称 说明 存储需求
TINYINT 很小的整数 一个字节
SMALLINT 小的整数 2个字节
MEDIUMINT 中等大小的整数 3个字节
INT 普通大小的整数 4个字节
BIGINT 大整数 8个字节

不同整数类型的取值范围

数据类型 有符号 无符号
TINYINT -128~127 0-255
SMALLINT -32768~32768 0~65535
MEDIUMINT -8388608~8388607 0~16777215
INT -2147483648~2147483647 0~4294967295
BIGINT -92233772036854775808~9223372036854775807 0~1844674407379551615
  • 先来看一张表:
  • CREATE TABLE tb_emp1(
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT);
    在这里插入图片描述
  • id字段的数据类型为INT(11),后面的数字11,表示的是它的宽度是11位
  • 再来看一个字段:age INT(4),该声明指出在age字段中数据一般显示4位数字的宽度
  • 创建表tmp2,字段有A、B、C、D、E,数据类型依次为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

mysql> CREATE TABLE tb_emp2(
-> A TINYINT,
-> B SMALLINT,
-> C MEDIUMINT,
-> D INT,
-> E BIGINT);
在这里插入图片描述
执行成功后,使用DESC查看表的结构;
在这里插入图片描述
可以看到,系统将添加不同的默认显示宽度。

浮点数类型和定点数类型

Mysql中使用浮点数和定点数来表示小数。浮点类型有四种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE).定点类型只有一种:DECIMAL.浮点类型和定点类型都可以用(M,N)来表示,其中M为宽度,N为标度,是小数的位数。

类型名称 说明 存储需求
FLOAT 单精度浮点数 4个字节
DOUBLE 双精度浮点数 8个字节
DECIMAL(M,D),DESC 压缩的“严格”定点数 M+2个字节

DECIMAL类型不同于FLOAT和DOUBLE,DECIMAL实际以串存放的,DECIMAL可能的最大取值范围与DOUBLE一样,但其有效的取值范围由M和D的值决定。

  • FLOAT类型的取值范围如下:
    • 有符号:-3.402823466E+38~-1.175494351E-38
    • 无符号:0和1.175494351E-38~3.402823466E+38-
  • DOUBLE类型的取值范围如下:
    • 有符号:-1.7976931348623157E+308~2.2250738585072014E-308
    • 无符号:0和2.2250738585072014E-308~1.7976931348623157E+308

1.创建一张表tb_emp3:
在这里插入图片描述
向表中添加数据:
在这里插入图片描述
在这里插入图片描述

日期与时间类型

Mysql中有多种表示日期的数据类型,主要有DATETIME、DATE、TIMESTAMP、TIME和YEAR。例如,当只记录年信息的时候,用YEAR类型,而没有必要使用DATE.每一个类型都有合法的取值范围,当指定确定不合法的值系统将“零“值插入到数据库中。

日期类型 存储空间 日期格式 日期范围
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155
  1. YEAR类型

MySQL以YYYY格式检索和显示YEAR值。范围是1901到2155。

可以指定各种格式的YEAR值:

四位字符串,范围为’1901’到’2155’。
四位数字,范围为1901到2155。
两位字符串,范围为’00’到’99’。'00’到’69’和’70’到’99’范围的值被转换为2000到2069和1970到1999范围的YEAR值。
两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。你必须将它指定为一个字符串’0’或’00’或它被解释为0000。
函数返回的结果,其值适合YEAR上下文,例如NOW()。
非法YEAR值被转换为0000。

  • 创建一张表,定义数据类型为YEAR的字段:
    CREATE TABLE tb_emp4(y year);
    在这里插入图片描述
    向表中插入数据:INSERT INTO tb_emp4 values (‘2020’);
    在这里插入图片描述
    2 TIME类型
    MySQL以’HH:MM:SS’格式检索和显示TIME值(或对于大的小时值采用’HHH:MM:SS’格式)。TIME值的范围可以从’-838:59:59’到’838:59:59’。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

格式说明:

'D HH:MM:SS.fraction’格式的字符串。还可以使用下面任何一种“非严格”语法:‘HH:MM:SS.fraction’、‘HH:MM:SS’、‘HH:MM’、‘D HH:MM:SS’、‘D HH:MM’、‘D HH’或’SS’。这里D表示日,可以取0到34之间的值。请注意MySQL还不保存分数。
‘HHMMSS’格式的没有间割符的字符串,假定是有意义的时间。例如,‘101112’被理解为’10:11:12’,但’109712’是不合法的(它有一个没有意义的分钟部分),将变为’00:00:00’。

HHMMSS格式的数值,假定是有意义的时间。例如,101112被理解为’10:11:12’。下面格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。请注意MySQL还不保存分数。

函数返回的结果,其值适合TIME上下文,例如CURRENT_TIME。
超出TIME范围但合法的值被裁为范围最接近的端点。例如,’-850:00:00’和’850:00:00’被转换为’-838:59:59’和’838:59:59’。

  • 创建表:CREATE TABLE tb_emp5(t TIME);

在这里插入图片描述

  • 向表中插入数据:INSERT INTO tb_emp5 values (“10:05:04”),(“10:05:03”),(“10:05:02”);

在这里插入图片描述

  • select*from tb_emp5;

在这里插入图片描述
3 DATA类型
此类型的字段,存储数据格式为:YYYY-MM-DD,它支持的范围为’1000-01-01’到’9999-12-31’。

首先创建表:CREATE tb_emp6;
在这里插入图片描述

  • 向表中添加数据:INSERT INTO tb_emp6 values (‘2020-08-29’),(‘2020-08-30’),(‘2020-08-31’);
    在这里插入图片描述
    在这里插入图片描述
    4 DATATIME类型
    日期和时间的组合,存储格式为:YYYY-MM-DD HH:MM:SS,它支持的范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’

  • 首先创建一张表:CRETAE TABLE tb_emp7(dt DATETIME);
    在这里插入图片描述
    向表中插入数据:INSERT INTO tb_emp7 values (‘2020-08-25 01:01:01’),(‘2020-08-25 02:02:02’), (‘2020-08-25 03:03:03’);
    在这里插入图片描述
    5.TIMESTAMP
    在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC,数据精确到秒级别,该取值范围包含约22亿个数值,因此在MySQL内部使用4个字节INT类型来存放时间戳数据:

  • 在存储时间戳数据时,先将本地时区时间转换为UTC时区时间,再将UTC时区时间转- - 换为INT格式的毫秒值(使用UNIX_TIMESTAMP函数),然后存放到数据库中。

  • 在读取时间戳数据时,先将INT格式的毫秒值转换为UTC时区时间(使用FROM_UNIXTIME函数),然后再转换为本地时区时间,最后返回给客户端。

  • 先来创建一张表:CREATE TABLE tb_emp8(ts TIMESTAMP);
    在这里插入图片描述

  • 向表中插入数据:INSERT INTO tb_emp8 VALUES (‘20200808080808’),(‘950505050505’),(‘20200808090909’),(now());
    在这里插入图片描述
    在这里插入图片描述
    下篇继续:

回顾上一篇,请看这里:

Mysql数据库(一):详细,对新手非常友好

猜你喜欢

转载自blog.csdn.net/qq_43078445/article/details/108292086