MySQL入门_实战4_数据类型

系列文章目录



前言

MySQL中的数值类型包括整数类型、浮点数类型和定点数类型。本节就对MySQL中的数值类型进行简单的介绍。


1、数值类型

1.1整数类型

MySQL中的整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT。不同的整数类型,其所需要的存储空间和数值范围不尽相同。
如下表,MySQL支持的整数类型所需的存储和范围

类型存储空间(Bytes)最小有符号最小无符号最大有符号最大无符号
TINYINT1-1280127255
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860716777215
INT4-2147483648021474836474294967295
BIGINT8-2^6302^63 -12^64-1

由上表可以看出,不同的整数类型所表示的数值范围不同。同一种整数类型,有符号与无符号所表示的数值范围也不同。其中,有符号整数的最小值是一个负数,无符号整数的最小值是0。

如果使用的数据类型超出了整数类型的范围,则MySQL会抛出相应的错误。因此在实际使用的时候,应该首先确认好数据的取值范围,然后根据确认的结果选择合适的整数类型。

mysql> CREATE TABLE t_test1(id INT);

使用SHOW CREATE TABLE语句查看t_test的创建信息。

mysql> SHOW CREATE TABLE t_test1 \G
*************************** 1. row ***************************
       Table: t_test1
Create Table: CREATE TABLE `t_test1` (
  `id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1.2 精确值类型-DECIMAL

十进制和数字类型存储精确的数字数据值。在保持精确精度很重要时使用这些类型,例如使用货币数据。在MySQL中,数字是实现为十进制的,所以下面关于十进制的注释同样适用于数字
在十进制列声明中,可以指定精度和比例(而且通常是)。例如:

CREATE TABLE t3 (d1 DECIMAL,d2 DECIMAL(5, 2));

接下来,查看t3数据表的建表信息。

mysql> SHOW CREATE TABLE t3 \G

在这里插入图片描述
在创建数据表t8时并没有为d1字段设置精度和标度,此时,MySQL会自动为d1字段设置精度为10,标度为0。
此时,MySQL并没有报错,只是会显示一个警告,接下来查看警告信息。
向t8表中插入数据。

mysql> INSERT INTO t3 (d1, d2) VALUES (3.14, 3.14);

此时,MySQL并没有报错,只是会显示一个警告,接下来通过SHOW WARNINGS;查看警告信息。
在这里插入图片描述
MySQL的警告信息中显示d1字段的值被截断了。接下来查看t3表中的数据。
在这里插入图片描述
在插入数据时,d1字段的值为3,d2字段的值为3.14,再次证明了当创建数据表时,如果不给DECIMAL类型的字段设置精度和标度,则DECIMAL默认的精度为10,标度为0。此时,向数据表中插入数据会舍弃所有小数部分。

再次向t3表中插入数据。

mysql> INSERT INTO t8 (d1, d2) VALUES (1, 3.141);

此时,向d1字段插入数值1,t2字段插入数据3.141。查看t3表中的数据。
在这里插入图片描述
d2字段中的值,由于精度和标度的限制也被截断了。也就是说,在定点数类型中,如果小数位数超出了标度的限制,则会被截断处理。

接下来再次向t3表中插入数据。

mysql> INSERT INTO t3 (d1, d2) VALUES (11111111111, 3.14);

在这里插入图片描述
此时,向t3表的d1字段中插入一个超出了精度和标度的数值,MySQL报错了。

对比浮点数类型和定点数类型,可以总结出如下不同之处:

·浮点数类型中的FLOAT类型和DOUBLE类型在不指定精度时,默认会按照计算机硬件和操作系统决定的精度进行表示;而定点数类型中的DECIMAL类型不指定精度时,默认为DECIMAL(10,0)。

当数据类型的长度一定时,浮点数能够表示的数据范围更大,但是浮点数会引起精度问题,不适合存储高精度类型的数据。

1.3 近似值浮点类型-FLOAT和DOUBLE

浮点数类型主要有两种:单精度浮点数FLOAT和双精度浮点数DOUBLE。浮点数类型所需的存储空间
FLOAT和DOUBLE类型表示近似的数字数据值。MySQL使用4个字节表示单精度值,使用8个字节表示双精度值。
在这里插入图片描述
浮点数类型中的FLOAT和DOUBLE类型在不指定数据精度时,默认会按照实际的计算机硬件和操作系统决定的数据精度进行显示。如果用户指定的精度超出了浮点数类型的数据精度,则MySQL会自动进行四舍五入操作。

创建数据表t4,t4表中包含两个字段f和d,f字段是FLOAT类型,d字段是DOUBLE类型。

mysql> CREATE TABLE t4 (f FLOAT, d DOUBLE);

接下来向数据表t4中插入数据。

mysql> INSERT INTO t4 (f, d) VALUES (3.14, 5.98);

查看t4表中的数据。
在这里插入图片描述
可以看出,能够正确地插入并显示数据。接下来再次向t4表中插入数据。

mysql> INSERT INTO t4 (f, d) VALUES (3.144444444444444, 5.98999999999999999999999);

此时,再次查看t4表中的数据。
在这里插入图片描述
可以看到,为FLOAT类型和DOUBLE类型插入超出数据类型精度的数据时,MySQL对插入的数据进行了四舍五入处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值