MySQL 整型數據類型:選對數字類型,讓存儲效率翻倍

MySQL 整型數據類型:選對數字類型,讓存儲效率翻倍

在 MySQL 中,整型(整數類型)是最常用的數據類型之一,從用戶 ID 到商品數量,幾乎所有涉及數字的場景都離不開它。但你知道嗎?選對整型類型不僅能節省存儲空間,還能提升查詢性能。今天就用最通俗的方式,帶你搞懂 MySQL 整型的核心知識。

一、5 種整型類型,一張表講清區別

MySQL 提供了 5 種基礎整型類型,核心區別在于占用字節數表示范圍,直接決定了能存儲的數字大小:

類型占用字節有符號范圍(默認)無符號范圍(UNSIGNED)典型場景
TINYINT1 字節-128 ~ 1270 ~ 255狀態值(0/1/2)、性別
SMALLINT2 字節-32768 ~ 327670 ~ 65535小數量(如評論數)
MEDIUMINT3 字節-8388608 ~ 83886070 ~ 16777215中等規模 ID(如文章 ID)
INT4 字節-2147483648 ~ 21474836470 ~ 4294967295普通 ID(用戶 ID、訂單號)
BIGINT8 字節-9e18 ~ 9e180 ~ 1.8e19大數量(如海量數據 ID)

二、核心用法:3 個必須掌握的知識點

1. 無符號(UNSIGNED):讓正數范圍翻倍

默認情況下,整型是 “有符號” 的(可存正負值),但如果確定數值不會為負(如 ID、數量),可加UNSIGNED關鍵字,讓正數范圍翻倍:

-- 無符號TINYINT,范圍0~255(比有符號的0~127多一倍)
CREATE TABLE products (stock TINYINT UNSIGNED  -- 庫存不可能為負,用無符號更合理
);

2. 零填充(ZEROFILL):補零顯示,不影響存儲

加ZEROFILL會在查詢時用 0 補全到定義長度(僅影響顯示,不改變實際存儲值):

CREATE TABLE scores (rank INT(5) ZEROFILL  -- 定義長度5,顯示時不足補0
);INSERT INTO scores (rank) VALUES (3);  -- 存儲為3,查詢顯示"00003"

?? 注意:ZEROFILL會自動隱式添加UNSIGNED,不能存負數。

3. 自增(AUTO_INCREMENT):主鍵的最佳拍檔

整型 +AUTO_INCREMENT是生成唯一 ID 的經典組合,通常搭配PRIMARY KEY使用:

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,  -- 自動生成1,2,3...name VARCHAR(50)
);-- 插入時無需指定id,會自動遞增
INSERT INTO users (name) VALUES ('張三'), ('李四');

💡 建議:自增主鍵優先用INT(足夠多數場景),超 40 億數據再用BIGINT。

三、選型原則:記住這 2 條,避免 90% 的坑

  1. 夠用就好,別貪大

比如存儲 “性別”(0 = 未知,1 = 男,2 = 女),用TINYINT(1 字節)足夠,沒必要用INT(4 字節),浪費 3 倍空間。

  1. 預留擴展,但別過度

比如預估用戶量最多 100 萬,INT(最大 42 億)完全夠用,沒必要一上來就用BIGINT(8 字節)。

四、常見誤區:別被 “顯示長度” 誤導

定義整型時可以加數字,比如INT(10),但這不是存儲范圍,只是 “顯示寬度”:

  • INT(3)和INT(10)存儲范圍完全一樣(都是 4 字節,-21 億~21 億)

  • 僅當配合ZEROFILL時,才會影響顯示(如INT(3) ZEROFILL存 5 會顯示 “005”)

所以,別糾結INT(5)還是INT(10),根據范圍選INT/BIGINT等類型即可。

總結

MySQL 整型的核心是 “按范圍選類型”:小范圍用TINYINT/SMALLINT省空間,普通場景用INT,海量數據用BIGINT。記住:合適的類型 = 更少的存儲 + 更快的查詢,這就是整型優化的精髓。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96162.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

公司電腦監控軟件有哪些?公司電腦監控軟件應該怎么選擇

大家好呀,電競直播運營團隊常常面臨 “直播腳本被抄襲、用戶付費數據篡改、主播話術外泄” 的問題!尤其是獨家直播流程腳本、用戶充值記錄、主播互動話術庫、賽事解說手稿,一旦泄露可能導致競品跟風、用戶信任下降、直播競爭力減弱&#xff5…

ARM裸機開發:鏈接腳本、進階Makefile(bsp)、編譯過程、beep實驗

一、鏈接腳本的作用?各個段存放什么數據類型(一)鏈接腳本內容SECTIONS {. 0x87800000;.text : {obj/start.o*(.text)}.rodata ALIGN(4) : {*(.rodata*)}.data ALIGN(4) : {*(.data)}__bss_start .;.bss ALIGN(4) : {*(.bss) *(COMMON)}__bs…

Linux驅動開發(1)概念、環境與代碼框架

一、驅動概念驅動與底層硬件直接打交道,充當了硬件與應用軟件中間的橋梁。1、具體任務(1)讀寫設備寄存器(實現控制的方式)(2)完成設備的輪詢、中斷處理、DMA通信(CPU與外設通信的方式…

計算機視覺(十):ROI

什么是感興趣區域(ROI)? 在計算機視覺中,**感興趣區域(ROI)**指的是圖像中包含我們想要分析、處理或識別的目標或特征的特定子集。就像我們在閱讀一本書時會聚焦于某個重要的段落,計算機視覺系統…

Jenkins 構建 Node 項目報錯解析與解決——pnpm lockfile 問題實戰

在使用 Jenkins 自動化構建 Node.js 項目時,經常會遇到類似報錯: ERR_PNPM_OUTDATED_LOCKFILE? Cannot install with "frozen-lockfile" because pnpm-lock.yaml is not up to date with package.json Error: Cannot find module node_module…

Kafka在多環境中安全管理敏感

1. 配置提供者是什么? 配置提供者(ConfigProvider)是一類按需“拉取配置”的組件:應用讀取配置時,按約定的占位符語法去外部來源(目錄、環境變量、單一 properties 文件、你自定義的來源……)取…

編程工具的演進邏輯:從Python IDLE到Arduino IDE的深度剖析

引言:工具進化的本質 在編程學習與開發的道路上,我們總會與各種各樣的工具相遇。一個有趣的現象是,無論是初學者的第一款工具Python IDLE,還是硬件愛好者常用的Thonny和Arduino IDE,它們都自稱“集成開發環境”(IDE)。這背后隱藏著怎樣的邏輯? 本文將帶你深入分析這三…

p10k configure執行報錯: ~/powerlevel10k/config/p10k-lean.zsh is not readable

[ERROR] p10k configure: ~/powerlevel10k/config/p10k-lean.zsh is not readable 背景 我移動了Powerlevel10k文件夾的位置,導致p10k configure命令找不到powerlevel10k文件夾的位置。 原來Powerlevel10k的位置:~/powerlevel10k 移動后Powerlevel10k的位…

Java 學習筆記(進階篇3)

1. 美化界面關鍵邏輯 1:// 相對路徑:直接從項目的 src 目錄開始寫,不包含 D:\ 和個人名字 ImageIcon bg new ImageIcon("src/image/background.png"); JLabel background new JLabel(bg);這兩行代碼是 Swing 中加載并顯示圖片的經…

BFD 概述

BFD簡介1.BFD:Bidirectional Forwarding Detection,雙向轉發檢查概述:毫秒級鏈路故障檢查,通常結合三層協議(如靜態路由、vrrp、 ospf、 BGP等)實現鏈路故障快速切換。作用:① 檢測二層非直連故障② 加快三層協議收斂底…

【嵌入式DIY實例-ESP32篇】-Flappy Bird游戲

Flappy Bird游戲 文章目錄 Flappy Bird游戲 1、游戲介紹 2、硬件準備與接線 3、代碼實現 《Flappy Bird》游戲以其引人入勝的玩法和簡約的設計風靡全球。本文將探討如何使用 OLED SSD1306 顯示屏和 ESP32 微控制器重現這款經典游戲。這個 DIY 項目不僅充滿樂趣,也是學習編程和…

[數據結構——lesson2.順序表]

目錄 學習目標 引言 1.什么是線性表? 2.什么是順序表? 2.1概念及結構 2.2 接口實現 2.2.1順序表的功能 1.順序表的初始化 2.打印數據 3.尾插數據 (1)檢查空間 (2)插入數據 4.尾刪數據 5.頭插數據 6.頭刪數據 7.數據查找 8.指定位置數據…

ChatGPT大模型訓練指南:如何借助動態代理IP提高訓練效率

隨著人工智能技術的飛速發展,ChatGPT等大型語言模型(LLM)已成為科技界和產業界關注的焦點。模型的訓練過程耗時、耗資源且對網絡環境要求極高。尤其是在需要模擬真實用戶行為、進行大規模數據爬取或分布式訓練的場景下,單一IP地址…

Docker 學習筆記(六):多容器管理與集群部署實踐

Docker Docker-compose 單個 Dockerfile 可定義單容器應用,但日常工作中,Web 項目等常需 Web 服務、數據庫、負載均衡等多容器配合,手動按序啟停容器會導致維護量大、效率低。 Docker Compose 是高效的多容器管理工具,通過單個 do…

C++類和對象初識

面向過程 1.1 面向過程特點 1.2 通俗解釋:煮方便面 1.3 面向過程實現代碼 1.4 特點總結面向對象 2.1 面向對象特點 2.2 通俗解釋:對象協作思維 2.3 面向對象實現代碼 2.4 特點總結面向對象和面向過程總結C 面向對象介紹 4.1 面向對象三大基本特征封裝&am…

C++ Int128 —— 128位有符號整數類實現剖析

🧠 C Int128 —— 128位有符號整數類實現剖析 引用:openppp2/ppp/Int128.h 🏗? 1. 存儲結構設計 #mermaid-svg-2JDFsdz6MTbX253D {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…

【C 語言生成指定范圍隨機數(整數 + 小數):原理、實現與避坑指南】

概述 在 C 語言開發中,生成指定范圍的隨機數是高頻需求(如游戲隨機道具、數據模擬、測試用例生成等)。但很多新手會卡在 “范圍控制”“隨機數重復”“小數生成” 等問題上。本文結合實戰場景,從原理到代碼詳細講解如何生成 1100、…

一個簡單的langgraph agent系統

本文基于langgraph的預制件 Agent Chat UI和《搭建一個本地langgraph服務》中的本地服務構建一個簡單的agent系統。 說明:Agent Chat UI需要nodejs版本18及以上,而nodejs18需要的glibc版本為2.28,本人使用操作系統為ubuntu18.04,g…

通過SSH來推送本地文件夾到Github

配置SSH git使用SSH配置, 初始需要以下三個步驟 使用秘鑰生成工具生成rsa秘鑰和公鑰 將rsa公鑰添加到代碼托管平臺 將rsa秘鑰添加到ssh-agent中,為ssh client指定使用的秘鑰文件 具體操作如下: 第一步:檢查本地主機是否已經存在…

視頻轉webp批量處理工具哪個好?這里有答案

你是不是也遇到過這樣的困擾:手機里存滿了精彩的短視頻,想做成動圖分享到社交媒體,卻發現轉換后的GIF文件巨大無比,畫質還慘不忍睹?要怎么把手機視頻轉webp,才能既保持高清畫質,又能大幅減小文件…