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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
11天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
21天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2天前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
1天前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
2天前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
7 0
|
9天前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
35 0
|
1月前
|
Java 数据库连接 数据库
数据库以及其他项目配置
该项目配置了数据库连接和MyBatis设置,并解决了配置文件加载问题。启动类使用 `@SpringBootApplication` 注解,可通过 `@ComponentScan` 指定扫描包。Lombok 自动生成 getter/setter 等方法,简化代码。Result 实体类用于统一返回格式。用户模块包括注册与登录功能,使用 MD5 加密密码、Spring Validation 参数校验及 JWT 认证。JWT 工具类处理令牌生成与解析,并通过拦截器验证。Redis 优化登录功能,利用 ThreadLocal 存储用户信息。此外,还包括文章模块的相关功能,如文章分类管理、
38 2
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js技术栈的高校选课管理系统的设计与实现。该系统采用前后端分离架构,旨在提高选课效率、优化资源分配及提升用户体验。技术栈包括:后端Spring Boot 2.0、前端Vue 2.0、数据库MySQL 8.0、开发环境JDK 1.8和Maven 3.6等。系统功能覆盖登录、学生信息管理、选课管理、成绩查询等多个方面,并针对学生、教师和管理员提供了不同的操作界面。系统采用了响应式设计,支持多设备访问,并通过Element UI增强了界面的友好性和交互性。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)
在数字化时代背景下,本文详细介绍了如何使用Spring Boot框架结合Vue.js技术栈,实现一个前后端分离的考试管理系统。该系统旨在提升考试管理效率,优化用户体验,确保数据安全及可维护性。技术选型包括:Spring Boot 2.0、Vue.js 2.0、Node.js 12.14.0、MySQL 8.0、Element-UI等。系统功能涵盖登录注册、学员考试(包括查看试卷、答题、成绩查询等)、管理员功能(题库管理、试题管理、试卷管理、系统设置等)。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的考试管理系统(含教程&源码&数据库数据)

热门文章

最新文章

下一篇
无影云桌面