MySQL数据库的数据类型和基于MySQL数据类型的综合实例项目(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL数据库的数据类型和基于MySQL数据类型的综合实例项目

MySQL数据库的数据类型和基于MySQL数据类型的综合实例项目


1、MySQL具有的数据类型


1.1、MySQL整数类型


数值型数据类型主要用来存储数字。MySQL的整数类型如下所示

TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、 BIGINT。



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



创建表tmp1,其中字段x、y、z、m、n数据类型依次为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,SQL语句如下:

mysql> CREATE TABLE tmp1 ( x TINYINT,  y SMALLINT,  z MEDIUMINT,  m INT,  n BIGINT );
Query OK, 0 rows affected (0.01 sec)
mysql> DESC tmp1;
+-------+-----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| x     | tinyint   | YES  |     | NULL    |       |
| y     | smallint  | YES  |     | NULL    |       |
| z     | mediumint | YES  |     | NULL    |       |
| m     | int       | YES  |     | NULL    |       |
| n     | bigint    | YES  |     | NULL    |       |
+-------+-----------+------+-----+---------+-------+
5 rows in set (0.00 sec)

1.2、MySQL浮点类型和定点数


MySQL中使用浮点数和定点数来表示小数。

浮点类型:FLOAT、DOUBLE。

定点类型:DECIMAL。


类型名称 说明 存储需求
FLOAT 单精度浮点数 4字节
DOUBLE 双精度浮点数 8字节
DECIMAL(M,D) 定点数 M+2字节


DECIMAL的存储空间不是固定的,而是由M和D决定的。

创建表tmp2,其中字段x、y、z数据类型依次为FLOAT(5,1)、DOUBLE(5,1)和DECIMAL(5,1),向表中插入数据5.12、5.15和5.123,SQL语句如下:

mysql> CREATE TABLE tmp2 ( x FLOAT(5,1),  y DOUBLE(5,1),  z DECIMAL(5,1) );
Query OK, 0 rows affected, 2 warnings (0.01 sec)


向tmp2表中插入数据:

mysql> INSERT INTO tmp2 VALUES(5.12, 5.15, 5.123);
Query OK, 1 row affected, 1 warning (0.01 sec)


查看警告信息

mysql> SHOW WARNINGS;
+-------+------+----------------------------------------+
| Level | Code | Message                                |
+-------+------+----------------------------------------+
| Note  | 1265 | Data truncated for column 'z' at row 1 |
+-------+------+----------------------------------------+
1 row in set (0.00 sec)

可以看到定点数被阶段了,发出警告

查看如下:

mysql> SELECT * FROM tmp2;
+------+------+------+
| x    | y    | z    |
+------+------+------+
|  5.1 |  5.2 |  5.1 |
+------+------+------+
1 row in set (0.00 sec)


1.3、MySQL日期与时间类型


MySQL中表示日期和时间的数据类型有


YEAR、TIME 、DATE、DATETIME和TIMESTAMP。



类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901~2155 1字节
TIME HH:MM:SS -838:59:59~838:59:59 3字节
DATE YYYY-MM-DD 1000-01-01~9999-12-3 3字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:1 UTC~2038-01-19 03:14:07 UTC 4字节


1、YEAR


存储格式:

存储方式(YEAR) 范围 注意点

4位字符串或数字 ‘1901’~’2155’ 输入‘2022’或2022,插入到数据库的值都为2022

2位字符串 ‘00’~’99’  ‘00’~‘69’对应2000~2069;‘70’~‘99’对应1970~1999;
2位数字  1~99  1~69对应2001~2069;70~99对应1970~1999;0对应0000

创建数据表tmp3,定义数据类型为YEAR的字段y,向表中插入值2010,’2010’,’2166’,SQL语句如下:

首先创建表tmp3:

mysql> CREATE TABLE tmp3(  y YEAR );
Query OK, 0 rows affected (0.01 sec)

向表中插入数据:

mysql> INSERT INTO tmp3 values(2010),('2010');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

再次向表中插入数据:

mysql> INSERT INTO tmp3 values ('2166');
ERROR 1264 (22003): Out of range value for column 'y' at row 1
mysql> SHOW WARNINGS;
+-------+------+--------------------------------------------+
| Level | Code | Message                                    |
+-------+------+--------------------------------------------+
| Error | 1264 | Out of range value for column 'y' at row 1 |
+-------+------+--------------------------------------------+
1 row in set (0.00 sec)SELECT * FROM tmp3;

2166超过了最大取值:2155,所以会有Out of range value for column ‘y’ at row 1的错误。

查看数据表tmp3中的数据表

mysql> SELECT * FROM tmp3;
+------+
| y    |
+------+
| 2010 |
| 2010 |
+------+
2 rows in set (0.00 sec)

可以看到2010和‘2010’都转换成了2010。

向tmp3表中y字段插入2位字符串表示的YEAR值,分别为’0’、’00’、’77’和’10’,SQL语句如下:

向表中插入数据:

mysql> INSERT INTO tmp3 values('0'),('00'),('77'),('10');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

查看数据表tmp3中的数据表:

mysql> SELECT * FROM tmp3;
+------+
| y    |
+------+
| 2010 |
| 2010 |
| 2000 |
| 2000 |
| 1977 |
| 2010 |
+------+
6 rows in set (0.00 sec)


可以看到‘0’,‘00’转换成了2000,‘77’转换成了1977,‘10’转换成了2010。

向tmp3表中y字段插入2位数字表示表示的YEAR值,分别为0、75和13,SQL语句如下:

向表中插入数据:


mysql> INSERT INTO tmp3 values(0),(75),(13);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0


查看数据表tmp3中的数据表:

SELECT * FROM tmp3;
mysql> SELECT * FROM tmp3;
+------+
| y    |
+------+
| 2010 |
| 2010 |
| 2000 |
| 2000 |
| 1977 |
| 2010 |
| 0000 |
| 1975 |
| 2013 |
+------+
9 rows in set (0.00 sec)


可以看到0转换成了0000,75转换成了1975,13转换成了2013。


2、TIME


存储格式:

存储方式(TIME) 范围 注意点


‘HH:MM:SS -838:59:59~838:59:59 ‘HHMMSS’类型的字符串被理解为:‘HH:MM:SS’;’D HH:MM:SS’的D为0~34之间,为小时保存—》‘D*24+H’

创建数据表tmp4,定义数据类型为TIME的字段t,向表中插入值’10:05:05’,’23:23’,’2 10:10’,’3 02’,’10’,SQL语句如下:首先创建表tmp4,

mysql> CREATE TABLE tmp4( t TIME );
Query OK, 0 rows affected (0.01 sec)


向表中插入数据:

INSERT INTO tmp4 values('10:05:05 '), ('23:23'), ('2 10:10'), ('3 02'),('10');
mysql> INSERT INTO tmp4 values('10:05:05 '), ('23:23'), ('2 10:10'), ('3 02'),('10');
Query OK, 5 rows affected, 1 warning (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 1

查看结果:

mysql> SELECT * FROM tmp4;
+----------+
| t        |
+----------+
| 10:05:05 |
| 23:23:00 |
| 58:10:00 |
| 74:00:00 |
| 00:00:10 |
+----------+
5 rows in set (0.00 sec)


向表tmp4中插入值’101112’,111213,’0’,107010,SQL语句如下:

向表中插入数据:

mysql> INSERT INTO tmp4 values('101112'),(111213),( '0');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

再向表中插入数据:


mysql> INSERT INTO tmp4 values ( 107010);
ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1
mysql> show warnings;
+-------+------+--------------------------------------------------------+
| Level | Code | Message                                                |
+-------+------+--------------------------------------------------------+
| Error | 1292 | Incorrect time value: '107010' for column 't' at row 1 |
+-------+------+--------------------------------------------------------+
1 row in set (0.00 sec)


可以看到插入的时间不对会报错。


3、DATE


DATE类型用在仅需要日期值时,没有时间部分,在存储时需要3字节。日期格式为’YYYY-MM-DD’—》YYYY表示年,MM表示月,DD表示日。在给Date类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATE的日期格式即可。

(1)、以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示的日期,取值范围为“1000-01-01’~ 9999-12-3’。例如,输入‘2022-08-01’ 或者‘20220801’,期都为2022-08-01。

(2)、以‘YY-MM-DD’ 或者’YYMMDD’’ 字符串格式表示的日期,在这里YY表示两位的年值。Mysql使用以下规则解释两位年值:‘0069’范围的年值转换为‘2000 2069’;‘70~ 99’范围的年值转换为‘1970~ 1999’。例如,输入‘22-08-01’,插入数据库的日期为2022-08-01; 输入‘991231’,插入数据的日期为1999-12-31。

(3)、以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,0069范围的年值转换为2000 2069,70~ 99范围的年值转换为1970~1999。例如,输入12-12-31 插入数据库的日期为2012-12-31;输入981231,插入数据的日期为1998-12-31。

(4)、使用CURRENT DATE或者NOW(),插入当前系统日期。


创建数据表tmp5,定义数据类型为DATE的字段d,向表中插入“YYYY-MM-DD”和“YYYYMMDD”字符串格式日期,SQL语句如下:

首先创建表tmp5:

mysql> CREATE TABLE tmp5(d DATE);
Query OK, 0 rows affected (0.01 sec)


向表中插入“YYYY-MM-DD”和“YYYYMMDD”格式日期:

mysql> INSERT INTO tmp5 values('2022-08-01'),('19990108'),('20220610');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

查看插入结果:

mysql> SELECT * FROM tmp5;
+------------+
| d          |
+------------+
| 2022-08-01 |
| 1999-01-08 |
| 2022-06-10 |
+------------+
3 rows in set (0.00 sec)

向tmp5表中插入“YY-MM-DD”和“YYMMDD”字符串格式日期,SQL语句如下:

向表中插入“YY-MM-DD”和“YYMMDD”格式日期:

mysql> INSERT INTO tmp5 values ('99-09-09'),( '990909'), ('000101') ,('111111');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

查看插入结果:

SELECT * FROM tmp5;
mysql> SELECT * FROM tmp5;
+------------+
| d          |
+------------+
| 2022-08-01 |
| 1999-01-08 |
| 2022-06-10 |
| 1999-09-09 |
| 1999-09-09 |
| 2000-01-01 |
| 2011-11-11 |
+------------+
7 rows in set (0.00 sec)

向tmp5表中插入YY-MM-DD和YYMMDD数字格式日期,SQL语句如下:

向表中插入YY-MM-DD和YYMMDD数字格式日期:

mysql> INSERT INTO tmp5 values(990909), ( 000101) ,( 111111);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

查看插入结果:

SELECT * FROM tmp5;
mysql> SELECT * FROM tmp5;
+------------+
| d          |
+------------+
| 1999-09-09 |
| 2000-01-01 |
| 2011-11-11 |
+------------+
3 rows in set (0.00 sec)

向tmp5表中插入系统当前日期,SQL语句如下:

向表中插入系统当前日期:

mysql> INSERT INTO tmp5 values( CURRENT_DATE() ),( NOW() );
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 1

查看插入结果:


SELECT * FROM tmp5;
mysql> SELECT * FROM tmp5;
+------------+
| d          |
+------------+
| 1999-09-09 |
| 2000-01-01 |
| 2011-11-11 |
| 2022-08-05 |
| 2022-08-05 |
+------------+
5 rows in set (0.00 sec)


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
16天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
4天前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
17天前
|
存储 弹性计算 关系型数据库
如何通过控制台创建RDS MySQL实例
本文介绍了通过控制台创建RDS MySQL实例的详细步骤,包括准备工作、选择计费方式、地域、实例规格、存储空间等关键配置,并指导用户完成下单与实例查看。
|
30天前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
|
25天前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
10天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
42 3
|
1月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
4天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
5天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
10天前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
147 7

推荐镜像

更多