IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL列的类型定义(一)整数与浮点数类型 -> 正文阅读

[大数据]MySQL列的类型定义(一)整数与浮点数类型

目录

1.整形类型

??? 整数类型的附带属性

2、浮点类型和定点类型

三种类型的区别:?


1.整形类型

????????整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表从不同整数类型的字节数、取值范围等方面进行对比。

??? 整数类型的附带属性

  1. 类型名称后面的小括号???指定显示宽度(并不是该类型占用字节数)。如果不显示指定宽度则默认为tinyint(3)、 smallint(5)、 mediumint(8)、?int(11)?和 bigint(20)。一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。

???????? 例如创建一个没有默认填充值的表

create table class(class_id int , class_name varchar(128), class_teacher varchar(64) );

????????插入一条记录

mysql> insert into class values(1,'豆豆一班','老王');

??????? 插入的记录前有一段空格?

?


????????创建一个有插入值的表

mysql> create table class(class_id int zerofill , class_name varchar(128), class_teacher varchar(64) );

?????????插入一条记录后

?????????int默认是11,插入1后,前面的空格用0填充;????????


??????? 2.UNSIGNED(无符号)??如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取 0,上限取原值的 2 倍,例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。?

??????? 例如

mysql> create table class6(id integer unsigned , name varchar(128), teacher varchar(64) );

当对id插入一条负数记录时

???????? 3.AUTO_INCREMENT ?在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT 值一般从 1 开始,每行增加 1。?一个表中最多只能有一个 AUTO_INCREMENT列?。对于任何想要使用 AUTO_INCREMENT 的列,应该定义为 NOT NULL,并定义为 PRIMARY KEY 或定义为 UNIQUE 键。?例如,可按下列任何一种方式定义?AUTO_INCREMENT?列:?

??????? 向数据库中依次插入以下记录

mysql> insert into class8 values(10,'老王','语文');
mysql> insert into class8 values(null,'老赵','英语');
mysql> insert into class8 (name,teacher) values('老李','化学');
mysql> insert into class8 values(1,'老孙','体育');
mysql> insert into class8 values(null,'老刘','数学');

??????? 当插入id有重复时

mysql> insert into class8 values(10,'老张','物理');
ERROR 1062 (23000): Duplicate entry '10' for key 'class8.PRIMARY'

??????? 便会报出“键值重复”错误

2、浮点类型和定点类型

????????数据表中用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。下面从这三种类型的字节数、取值范围等方面进行对比,如下表所示。

????????浮点数可以存储取值范围1.175494351E-38~3.402823466E+38,虽然表示范围很大,但小数点后只能精确6位(double精确到小数点后12位),当整数位过多时,小数位还会继续减少,也可以理解为整数位+小数位一共是39位。

??????? 例如下面表中分别插入如下数据

??????? 1.整数位有1位,小数位有6位;整数有1位小数位有7位;

mysql> insert into class values(1.123456),(1.1234567);

?

???????? 2.整数位39位,小数位2位;整数位38位,小数位1位;

mysql> insert into class values(211111111111111111111111111111111111111.11);
mysql> insert into class values(21111111111111111111111111111111111111.1);

???????? 3.插入的记录超过取值范围时,便会报错

??????? 这里整数位有40位;

mysql> insert into class values(2111111111111111111111111111111111111111.11);
ERROR 1264 (22003): Out of range value for column 'f1' at row 1

三种类型的区别:?

  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
  • MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。对于decimal,M是最大位数(精度),范围是1到65。可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。

??????? 当设定的float或double的标度超过原来时,因为float或double本身所占用空间有限,所以超过本能存储位数时会以随机数字填充。

mysql> insert into class values(1.1111111111111111111111111,1.11111111111111111111111);

??????? 但是对于定点数据类型是不会有影响;

mysql> create table class(d decimal(22,21));
mysql> insert into class values(1.111111111111111111111);

?

  • FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示(由实际硬件和操作系统决定),而DECIMAL在不指定精度时,默认整数为10,小数为0,即(10, 0)
  • 忠告:?当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型!!!

????????补充:上面演示的数据库版本为8.0.27

??????? 当对float或double的精度或标度做出修改时,会给出以下警告;

mysql> create table test(f1 float(22,21),d1 double(22,21));
Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                          |
+---------+------+------------------------------------------------------------------------------------------------------------------+
| Warning | 1681 | Specifying number of digits for floating point data types is deprecated and will be removed in a future release. |
| Warning | 1681 | Specifying number of digits for floating point data types is deprecated and will be removed in a future release. |
+---------+------+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

这条警告表明:对float或double的精度或标度修改功能在后续版本中会被移除;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:05:51  更:2022-01-08 14:06:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 15:17:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码