史上最简单的 MySQL 教程(九)「列类型 之 数值型」

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 史上最简单的 MySQL 教程(九)「列类型 之 数值型」

史上最简单的 MySQL 教程(九)「列类型 之 数值型」

列类型(数据类型)

所谓的列类型,其实就是指数据类型,即对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间。


在 SQL 中,将数据类型分成了三大类,分别为:数值型、字符串型和日期时间型。


634d97a077e28848f560c652404f2c3e.png


对于数值型数据,可以进一步将其划分为整数型和小数型。


整数型


在 SQL 中,由于要考虑节省磁盘空间的问题,因此系统又将整型细分成五类,分别为:


tinyint:迷你整型,使用 1 个字节存储数据(常用);

smallint:小整型,使用 2 个字节存储数据;

mediumint:中整型,使用 3 个字节存储数据;

int:标准整型,使用 4 个字节存储数据(常用);

bigint:大整型,使用 8 个字节存储数据。

接下来,输入如下 SQL 语句进行测试:


-- 创建整型表
create table my_int(
  int_1 tinyint,
  int_2 smallint,
  int_3 int,
  int_4 bigint
)charset utf8;

07a2c02973ce552b59767cc59197c05f.png

如上图所示,咱们已经成功创建my_int表,再插入数据:

-- 插入数据
insert into my_int values (1,2,3,4);
insert into my_int values ('a','b','c','d');
insert into my_int values (255,2,3,4);

d14693298878e3eb0381e57572f6837a.png

如上图所示,通过列类型,咱们可以限定插入数据的类型以及长度范围。


至于为什么在对int_1赋值时,报出超出范围的错误,则是因为在 SQL 中数值类型默认是有符号位的,即分正负。如果需要使用无符号的数据,这就需要咱们自己对数据类型进行声明啦,即在声明数据类型时,追加unsigned关键字。例如:

-- 在 my_int 表中,添加 int_5 字段,设置其数据类型为 tinyint unsigned
alter table my_int add int_5 tinyint unsigned;

00ba3e661d338000f94a546fabbcdd77.png

如上图所示,添加int_5字段成功,继续插入数据:

-- 插入数据
insert into my_int values (1,2,3,4,255);

8e2e35ec14c5827b3792c1fe5fe43a0b.png

如上图所示,当咱们将tinyint限定为unsigned之后,已经可以插入0~255之间的任何整数啦!但是,回过头来,让咱们仔细看看下面这张图:


db6e6400d8b5ced3ce5635141b76b214.png

通过观察上面这张图,咱们会发现:**每个字段的数据类型后面都会跟着一对括号,并且里面含有数字。**这些数字啊,其实并没有什么特别的含义,只是表示数据的显示宽度。实际上,咱们可以修改显示的宽度,但是这种修改并不会改变数据本身的大小。


显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度,通常需要搭配一个前导0来增加宽度,其不改变数据值的大小,即用zerofill进行零填充,并且零填充会导致数值自动变成无符号。


下面,执行如下 SQL 语句:


-- 在 my_int 表中,添加 int_6 字段,设置其数据类型为 tinyint zerofill
alter table my_int add int_6(3) tinyint zerofill;

628e7f9590db2b28aafa53d8f1f44be8.png

再插入数据,进行测试:

-- 插入数据
insert into my_int values (1,2,3,4,5,6);

436732ccda39e29cfd52999a252b082e.png

如上图所示,零填充的意义:在于保证数据的格式。

小数型

小数型,即带有小数点或者范围超出整型的数值类型

在 SQL 中,将小数型细分为浮点型和定点型两种,其中:


浮点型:小数点浮动,精度有限,容易丢失精度;

定点型:小数点固定,精度固定,不会丢失精度。

第 1 种:浮点型


浮点型数据是一种精度型数据,因为超出指定范围之后,其会丢失精度,自动进行四舍五入操作。理论上,浮点型分为两种精度:


float:单精度,占用 4 个字节存储数据,精度范围大概为 7 位左右;

double:双精度,占用 8 个字节存储数据,精度范围大概为 15 位左右。

浮点型的使用方式:如果直接用float,则表示没有小数部分;如果用float(M,D),其中M代表总长度,D代表小数部分长度,M-D则为整数部分长度。


执行如下 SQL 语句创建浮点数表,进行测试:

-- 创建浮点数表
create table my_float(
  f1 float,
  f2 float(10,2),
  f3 float(6,2)
)charset utf8;

在咱们向浮点数表my_float插入数据的时候,可以直接插入小数,也可以插入用科学计数法表示的数据。此外,插入浮点型数据时,整数部分是不能超出长度范围的,但是小数部分是可以超出长度范围的,系统会自动进行四舍五入的操作。特别是,如果浮点数是因为系统进位(四舍五入)导致整数部分超出指定的长度,那么系统是允许成立的。

-- 插入测试数据
insert into my_float values (2.15e4,20.15,9999.99);
insert into my_float values (20151120,123456789.99,9999.99);
insert into my_float values (5211314,123456.99,99.99999);

94b05057c41f49dd785f47417b052077.png

如上图所示,咱们的结论得到了验证。

第 2 种:定点型

定点型数据,绝对的保证整数部分不会被四舍五入,也就是说不会丢失精度,但小数部分有可能丢失精度,虽然理论上小数部分也不会丢失精度。

执行如下 SQL 语句创建定点数表,以浮点数做对比,进行测试:

-- 创建定点数表
create table my_decimal(
  f1 float(10,2),
  d1 decimal(10,2)
)charset utf8;

当咱们插入数据的时候,定点数的整数部分一定不能超出长度范围(进位也不可以),小数部分的长度则可以随意超出,没有限制,系统会自动进行四舍五入的操作:

-- 插入测试数据
insert into my_decimal values (99999999.99,99999999.99);
insert into my_decimal values (123456789.99,2015.1314);
insert into my_decimal values (123456.99,2015.1314);

3e9b7af860d114d70b2f69963683fe22.png

如上图所示,咱们的结论同样得到了验证。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
15天前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
226 16
|
5月前
|
存储 关系型数据库 MySQL
【免费动手教程上线】阿里云RDS MySQL推出大容量高性能存储:高性能本地盘(最高16TB存储空间)、高性能云盘(最高64TB存储空间)
阿里云RDS MySQL提供高性能本地盘与高性能云盘等存储方案,满足用户大容量、低延迟需求。高性能本地盘单盘最大16TB,IO延时微秒级;高性能云盘兼容ESSD特性,支持IO性能突发、BPE及16K原子写等能力。此外,阿里云还提供免费动手体验教程,帮助用户直观感受云数据库 RDS 存储性能表现。
|
7月前
|
存储 SQL 关系型数据库
【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
**简介**:在MySQL迁移到崖山环境时,若字段类型为char(2),而应用存储的数据仅为'0'或'1',查询时崖山会自动补空格。原因是mysql的sql_mode可能启用了PAD_CHAR_TO_FULL_LENGTH模式,导致保留CHAR类型尾随空格。解决方法是与应用确认数据需求,可将崖山环境中的char类型改为varchar类型以规避补空格问题,适用于所有版本。
|
7月前
|
关系型数据库 MySQL Java
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
|
7月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。
|
9月前
|
机器学习/深度学习 关系型数据库 MySQL
mysql bit对gorm使用何种类型?
在GORM中使用MySQL的BIT类型时,通常使用 `bool`类型来处理BIT(1),使用 `[]byte`类型来处理BIT(N)(N > 1)。通过正确的类型映射和位操作,可以高效地处理位字段数据。确保在定义结构体字段时,明确指定字段类型,以便GORM能够正确地处理数据库交互。
179 18
|
8月前
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
10月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
611 26
|
11月前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
230 20

推荐镜像

更多