【重学 MySQL】五十四、整型数据类型

【重学 MySQL】五十四、整型数据类型

  • 整型类型
    • TINYINT
    • SMALLINT
    • MEDIUMINT
    • INT(或INTEGER)
    • BIGINT
  • 可选属性
    • UNSIGNED
    • ZEROFILL
    • 显示宽度(M)
    • AUTO_INCREMENT
    • 注意事项
  • 适合场景
    • TINYINT
    • SMALLINT
    • MEDIUMINT
    • INT(或INTEGER)
    • BIGINT
    • 特殊场景下的选择
  • 注意事项
  • 如何选择
    • 建议

在这里插入图片描述
在MySQL中,整型数据类型用于存储整数值,它们的主要特点是能够存储不同范围和精度的整数,并且可以通过索引和约束来提高数据的查询性能。

整型类型

TINYINT

  • 描述:TINYINT是MySQL中最小的整数类型。
  • 存储大小:1个字节(8位)。
  • 存储范围
    • 有符号(SIGNED):-128到127。
    • 无符号(UNSIGNED):0到255。
  • 用途:通常用于存储布尔值(0或1)或者非常小的整数值。

SMALLINT

  • 描述:SMALLINT类型用于存储较小的整数值。
  • 存储大小:2个字节(16位)。
  • 存储范围
    • 有符号(SIGNED):-32768到32767。
    • 无符号(UNSIGNED):0到65535。
  • 用途:适用于存储中等偏小范围内的整数值。

MEDIUMINT

  • 描述:MEDIUMINT类型用于存储中等大小的整数值。
  • 存储大小:3个字节(24位)。
  • 存储范围
    • 有符号(SIGNED):-8388608到8388607。
    • 无符号(UNSIGNED):0到16777215。
  • 用途:适用于存储中等范围内的整数值。

INT(或INTEGER)

  • 描述:INT是MySQL中最常用的整数类型之一,也是标准SQL中的INTEGER类型的同义词。
  • 存储大小:4个字节(32位)。
  • 存储范围
    • 有符号(SIGNED):-2147483648到2147483647。
    • 无符号(UNSIGNED):0到4294967295。
  • 用途:适用于存储大多数整数值的存储和计算需求。

BIGINT

  • 描述:BIGINT类型用于存储极大的整数值。
  • 存储大小:8个字节(64位)。
  • 存储范围
    • 有符号(SIGNED):-9223372036854775808到9223372036854775807。
    • 无符号(UNSIGNED):0到18446744073709551615。
  • 用途:适用于存储需要极大数值范围的场景,如大数的运算和存储。

可选属性

在MySQL中,整型数据类型具有一些可选属性,这些属性允许用户根据具体需求对数据类型进行定制。

UNSIGNED

  • 描述:UNSIGNED属性用于指定整数类型为无符号,即不允许存储负数。使用UNSIGNED属性可以将整数的取值范围上移到从0开始的区间,从而允许存储更大的正数。
  • 适用场景:当确定某个整数列不会存储负数时,可以使用UNSIGNED属性来扩大其取值范围。

ZEROFILL

  • 描述:ZEROFILL属性用于指定当整数的显示宽度不足时,用0在左边填充至指定宽度。需要注意的是,ZEROFILL属性会自动为当前列添加UNSIGNED属性,因为负数不能用0填充。

  • 显示宽度:与显示宽度属性(M)配合使用,ZEROFILL属性可以确保整数的显示格式满足特定要求。例如,定义为INT(5) ZEROFILL的列,在存储数值42时,将显示为00042。

  • 注意事项

    1. ZEROFILL属性不会影响整数的存储大小或取值范围。
    2. 如果存储的整数超过了指定的显示宽度,将按照实际位数进行显示,不会进行截断或报错。

显示宽度(M)

  • 描述:显示宽度属性(M)用于指定MySQL在显示整数时使用的字符数。这个属性是一个可选的显示属性,它并不限制整数的取值范围或存储大小。

  • 取值范围:M的取值范围是0到255之间的整数。

  • 注意事项

    1. 对于大多数应用来说,指定显示宽度是没有实际意义的,因为它不会限制整数的合法范围或存储大小。
    2. 显示宽度属性主要用于MySQL的一些交互工具(如mysql命令行客户端)在显示数据时提供格式化效果。
    3. 从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性

AUTO_INCREMENT

  • 描述:AUTO_INCREMENT属性用于指定某个整数列为自增长列。当向表中插入新行时,该列的值将自动增加,通常用于生成唯一的主键值。
  • 适用场景:主键列通常设置为AUTO_INCREMENT属性,以确保每条记录都有一个唯一的标识符。

注意事项

  • 选择合适的数据类型:在选择整型数据类型时,应根据实际数据的范围和精度来选择最合适的类型。较小的数据类型可以减少存储空间的占用,并提高查询性能。
  • 避免过度使用可选属性:虽然整型数据类型的可选属性提供了很大的灵活性,但过度使用这些属性可能会增加数据库的复杂性和维护成本。因此,在使用这些属性时应谨慎考虑其必要性和适用性。

综上所述,MySQL整型数据类型具有UNSIGNED、ZEROFILL、显示宽度(M)和AUTO_INCREMENT等可选属性。这些属性允许用户根据具体需求对数据类型进行定制,以满足不同场景下的存储和查询需求。

适合场景

在MySQL中,不同的整型数据类型适用于不同的场景,以下是对各整型数据类型适用场景的详细归纳:

TINYINT

  • 适用场景:TINYINT类型适用于存储非常小的整数值,通常用于存储布尔值(0或1)、状态码、小范围的计数器或ID等。由于其存储空间小(仅1个字节),因此适合在需要节省存储空间且整数值范围较小的场景下使用。

SMALLINT

  • 适用场景:SMALLINT类型适用于存储较小的整数值,如年份(特别是近现代的年份,范围在1900~2155之间,如果使用UNSIGNED则范围更大)、人口数量、小型计数器等。其存储空间为2个字节,比TINYINT稍大,但能够存储的整数值范围也更广。

MEDIUMINT

  • 适用场景:MEDIUMINT类型适用于存储中等大小的整数值,如文章字数、文件大小、中等范围的计数器等。其存储空间为3个字节,能够存储的整数值范围比SMALLINT更大。

INT(或INTEGER)

  • 适用场景:INT类型是最常用的整数类型之一,适用于存储大多数整数值的存储和计算需求。它通常用于存储用户ID、订单号、产品编号等需要唯一标识的整数值。INT类型的存储空间为4个字节,能够存储的整数值范围非常广,足以满足大多数应用场景的需求。

BIGINT

  • 适用场景:BIGINT类型适用于存储极大的整数值,如大数的运算结果、唯一标识符(如UUID的整数部分)、金融数据中的大金额等。其存储空间为8个字节,能够存储的整数值范围非常大,足以满足需要存储极大数值的场景。

特殊场景下的选择

  • UNSIGNED属性:当确定某个整数列不会存储负数时,可以使用UNSIGNED属性来扩大其取值范围。例如,存储年龄、月份、星期等时,可以使用UNSIGNED TINYINT或UNSIGNED SMALLINT来节省存储空间。
  • AUTO_INCREMENT属性:当需要生成唯一的主键值时,可以使用AUTO_INCREMENT属性。这通常用于用户ID、订单号等需要唯一标识的字段。

综上所述,在选择MySQL整型数据类型时,应根据实际数据的范围和精度来选择最合适的类型。同时,还可以根据具体需求选择是否使用UNSIGNED、AUTO_INCREMENT等可选属性来进一步定制数据类型。

注意事项

  1. UNSIGNED属性:可以将整型列定义为UNSIGNED,以禁止出现负数。这会将取值范围上移到从0开始的区间。对于DECIMAL类型,定义为UNSIGNED不会扩大取值范围,而只会去掉负数部分。
  2. 显示宽度:在定义整型列时,可以为其指定一个可选的显示宽度M(1~255的整数)。这决定着MySQL将用多少个字符来显示该列里的值。但需要注意的是,这个显示宽度并不影响实际的存储大小或取值范围。
  3. 性能考虑:在选择整型数据类型时,应根据实际数据的范围和精度来选择最合适的类型。较小的数据类型可以减少存储空间的占用,并提高查询性能。

如何选择

在MySQL中,整型数据类型的选择对于数据库的性能和存储效率至关重要。

  1. 存储范围
    • TINYINT:存储范围为-128到127(有符号)或0到255(无符号),占用1个字节。适用于存储非常小的整数值,如布尔值或枚举值。
    • SMALLINT:存储范围为-32,768到32,767(有符号)或0到65,535(无符号),占用2个字节。适用于存储较小的整数值。
    • MEDIUMINT:存储范围为-8,388,608到8,388,607(有符号)或0到16,777,215(无符号),占用3个字节。适用于存储中等大小的整数值。
    • INT:存储范围为-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号),占用4个字节。这是最常用的整数类型,适用于大多数场景。
    • BIGINT:存储范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号)或0到18,446,744,073,709,551,615(无符号),占用8个字节。适用于存储极大的整数值。
  2. 存储空间
    • 较小的整数类型(如TINYINT和SMALLINT)通常占用较少的存储空间,而较大的整数类型(如BIGINT)占用较多的存储空间。如果存储空间是一个关键因素,可以选择较小的整数类型。
  3. 性能
    • 较小的整数类型通常比较大的整数类型具有更好的性能,因为它们需要处理的数据量更小。在处理大量数据时,这可能会产生显著的性能差异。
  4. 数据范围
    • 确保所选的整数类型能够容纳数据范围。如果数据可能超出了某个整数类型的范围,需要选择一个更大的整数类型来避免数据溢出。
  5. 有符号与无符号
    • 如果知道数据永远不会是负数,可以选择无符号整数类型。无符号整数类型的正数范围是有符号整数类型的两倍。

建议

  1. 根据需求选择:在选择整型数据类型时,首先要明确需要存储的数据的范围和大小。根据实际需求选择合适的整数类型,避免过大或过小的类型导致存储空间的浪费或数据溢出。
  2. 考虑性能:在处理大量数据时,较小的整数类型通常具有更好的性能。因此,在性能要求较高的场景下,可以考虑选择较小的整数类型。
  3. 无符号类型:如果确定数据不会包含负数,可以使用无符号整数类型来扩大正数的存储范围。
  4. 避免使用显示宽度:MySQL中的显示宽度并不限制数据的存储范围,只是影响查询结果的显示格式。因此,在创建表时,应避免使用整数的显示宽度(如INT(10)),直接使用整数类型(如INT)即可。

综上所述,在选择MySQL整型数据类型时,需要综合考虑存储范围、存储空间、性能、数据范围以及有符号与无符号等因素。根据实际需求选择合适的整数类型,以提高数据库的存储效率和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438660.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb() Step7 简单创建两…

ElementUI el-tree 树组件 增加辅助线

需求 项目需求给elementUI的el-tree添加辅助线&#xff0c;并且不能使用其他插件&#xff0c;没办法只能该样式了。 效果 代码 html <template><div><el-scrollbar class"long-content"><el-tree node-key"id":data"deptTre…

项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备

四&#xff0c;中间界面搭建 前言:当项目越来越复杂的时候&#xff0c;或许画草图是非常好的选择 一&#xff0c;初始化中间窗口initMidWindow void mainWidget::initMidWindow() {//使用网格布局进行管理QGridLayout* layout new QGridLayout();//距离上方 20px 的距离&…

高效录制,尽在掌握:四大录屏软件对比分析!

屏幕录制是一种重要的信息传递方式。今天&#xff0c;我们就来一起探索几款市场上备受好评的录屏工具——福昕录屏大师、转转大师录屏、爱拍录屏以及OCAM录屏&#xff0c;看看它们各自都有哪些独特之处。 福昕录屏工具 直达链接&#xff1a;www.foxitsoftware.cn/REC/ 作为一…

pyqt打包成exe相关流程

1、首先是安装pyinstaller, 在cmd中输入以下安装命令&#xff1a; pip3 install pyinstaller -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 2、安装完毕之后&#xff0c;下一步就是找到你要打包的工程&#xff0c;打包的logo放置如下位置&#xff1a; 3、将log…

[C语言]--编译和链接

文章目录 目录 文章目录 前言 一、环境介绍 二、翻译环境 1.预处理&#xff08;预编译&#xff09; 2.编译 3.汇编 4.链接 三、运行环境 前言 对编译和链接 进行简单的介绍 一、环境介绍 在ANSIC的任何⼀种实现中&#xff0c;存在两个不同的环境。 翻译环境&#xff0c;在这…

flutter_鸿蒙next(win)环境搭建

第一步 拉取鸿蒙版本flutterSDK仓库 仓库地址&#xff1a;OpenHarmony-SIG/flutter_flutter 第二步 找到拉取的仓库中的README.md 并根据说明配置环境 第三步 配置好环境变量之后 用管理员开启cmd 输入&#xff1a;flutter dcotor 并查看此时flutter所支持的系统 包括&…

《深度学习》OpenCV 图像拼接 原理、参数解析、案例实现

目录 一、图像拼接 1、直接看案例 图1与图2展示&#xff1a; 合并完结果&#xff1a; 2、什么是图像拼接 3、图像拼接步骤 1&#xff09;加载图像 2&#xff09;特征点检测与描述 3&#xff09;特征点匹配 4&#xff09;图像配准 5&#xff09;图像变换和拼接 6&am…

【若依】postman调试出现认证失败,无法访问系统资源

如果前后端都已经连接通了&#xff0c;但是调试出现错误代码&#xff0c;可能是因为没有授权的问题&#xff0c;需要获得授权。 授权内容在cookie中 把cookie中的token内容粘贴到postman里面 这个时候再在postman里测试接口&#xff0c;发现可以拿到数据了

pytorch之梯度累加

1.什么是梯度&#xff1f; 梯度可以理解为一个多变量函数的变化率&#xff0c;它告诉我们在某一点上&#xff0c;函数的输出如何随输入的变化而变化。更直观地说&#xff0c;梯度指示了最优化方向。 在机器学习中的作用&#xff1a;在训练模型时&#xff0c;我们的目标是最小…

TransFormer 视频笔记

TransFormer BasicsAttention单头注意力 single head attentionQ&#xff1a; query 查寻矩阵 128*12288K key matrix 128*12288SoftMax 归一 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/19e3cf1ea28442eca60d5fc1303921f4.png)Value matrix 12288*12288 MLP Bas…

【Linux】进程地址空间、环境变量:从理论到实践(三)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; 前言一&#xff1a;&#x1f525; 环境变量 &#x1f95d; 基本概念&#x1f95d; 常见环境变量&#x1f95d; 查看环境变量方法 二&#xff1a;&#x1f525; 测试 &…

前端算法合集-1(含面试题)

(这是我面试一家中厂公司的二面算法题) 数组去重并按出现次数排序 题目描述: 给定一个包含重复元素的数组&#xff0c;请你编写一个函数对数组进行去重&#xff0c;并按元素出现的次数从高到低排序。如果次数相同&#xff0c;则按元素值从小到大排序。 let arr [2, 11,10, 1…

GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范

简单介绍一下四者的区别。 参考链接&#xff1a;GPTQ - 2210.17323 | AWQ - 2306.00978 | GGML | GGUF - docs | What is GGUF and GGML? 文章目录 GPTQ vs AWQ vs GGUF&#xff08;GGML&#xff09; 速览GGUF 文件命名GGUF 文件结构文件名解析答案 附录GGUF 文件命名GGUF 文件…

15分钟学 Python 第35天 :Python 爬虫入门(一)

Day 35 : Python 爬虫简介 1.1 什么是爬虫&#xff1f; 网页爬虫&#xff08;Web Crawler&#xff09;是自动访问互联网并提取所需信息的程序。爬虫的主要功能是模拟用户通过浏览器访问网页的操作&#xff0c;从而实现对网页内容的批量访问与信息提取。它们广泛应用于数据收集…

JAVA并发编程系列(13)Future、FutureTask异步小王子

美团本地生活面试&#xff1a;模拟外卖订单处理&#xff0c;客户支付提交订单后&#xff0c;查询订单详情&#xff0c;后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快&#xff0c;一转眼不到一个月时间&#xff0c;已经完成分享synchronized、volatile、…

【VUE】案例:商场会员管理系统

编写vuedfr实现对会员进行基本增删改查 1. drf项目初始化 请求&#xff1a; POST http://127/0.0.0.1:8000/api/auth/ {"username":"cqn", "password":"123"}返回&#xff1a; {"username":"cqn", "token&q…

读论文、学习时 零碎知识点记录01

1.入侵检测技术 2.深度学习、机器学习相关的概念 ❶注意力机制 ❷池化 ❸全连接层 ❹Dropout层 ❺全局平均池化 3.神经网络中常见的层

.NET Core 集成 MiniProfiler性能分析工具

前言&#xff1a; 在日常开发中&#xff0c;应用程序的性能是我们需要关注的一个重点问题。当然我们有很多工具来分析程序性能&#xff1a;如&#xff1a;Zipkin等&#xff1b;但这些过于复杂&#xff0c;需要单独搭建。 MiniProfiler就是一款简单&#xff0c;但功能强大的应用…

Unraid的cache使用btrfs或zfs?

Unraid的cache使用btrfs或zfs&#xff1f; 背景&#xff1a;由于在unraid中添加了多个docker和虚拟机&#xff0c;因此会一直访问硬盘。然而&#xff0c;单个硬盘实在难以让人放心。在阵列盘中&#xff0c;可以通过添加校验盘进行数据保护&#xff0c;在cache中无法使用xfs格式…