首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 建表設計原則與欄位屬性完整指南

     編輯:MySQL 綜合教學

MySQL 建表設計原則與欄位屬性完整指南

資料表設計是資料庫效能與維護性的基石。本文系統整理建表核心原則、各資料類型特性、儲存空間計算與屬性選擇策略,助你建立高效、節省空間的資料結構。

核心建表原則

  • 列即聲明:建表本質是聲明欄位,資料最終以檔案形式存放於硬碟/記憶體
  • 夠用不浪費:不同類型佔用空間不同,選擇原則是「夠用、不浪費」
  • 預留擴充:考慮未來業務擴展,避免頻繁 ALTER TABLE

數值類型詳細對照表

類型位元組無符號範圍有符號範圍
TINYINT10 ~ 255-128 ~ 127
SMALLINT20 ~ 65,535-32,768 ~ 32,767
MEDIUMINT30 ~ 16,777,215-8,388,608 ~ 8,388,607
INT40 ~ 4,294,967,295-2,147,483,648 ~ 2,147,483,647
BIGINT80 ~ 2^64-1-2^63 ~ 2^63-1

TINYINT 位元級解析

1 位元組 = 8 位元。最高位為符號位:0 表正數,1 表負數。

  • 無符號:00000000 ~ 11111111 → 0 ~ 255
  • 有符號:0xxxxxxx → 0 ~ 127;1xxxxxxx → -128 ~ -1

整數欄位可選屬性

  • NOT NULL:禁止空值,提升查詢效能
  • UNSIGNED:無符號,將正數範圍翻倍
  • ZEROFILL:不足寬度時左側補 0,隱含 UNSIGNED

關鍵結論:聲明 ZEROFILL 時一定是無符號;零填充不改變實際數值大小。

浮點型與定點型

類型位元組精度適用場景
FLOAT4單精度(約 7 位有效數字)科學計算、近似值
DOUBLE8雙精度(約 15 位有效數字)高精度科學計算
DECIMAL(M,D)M+2精確定點數金額、財務資料(必選)

核心差異:FLOAT/DOUBLE 為二進制近似值,DECIMAL 為精確十進制儲存。金額欄位務必使用 DECIMAL。

字串類型:CHAR vs VARCHAR

特性CHAR(M)VARCHAR(M)
長度固定長度可變長度
儲存方式不足右側補空格實際長度 + 1~2 位元組長度前綴
尾部空格查詢時自動移除保留尾部空格
效能固定長度,查詢快節省空間,但需額外計算長度
適用場景MD5、UUID、固定代碼不定長文字、名稱、描述

字元集與位元組計算

  • VARCHAR(N) 的 N 為字元數,非位元組數
  • UTF-8:1 個中文 = 3 位元組,英文 = 1 位元組
  • GBK:1 個中文 = 2 位元組
  • MySQL 5.0+:VARCHAR(N) 可存 N 個字元(中英混排),實際位元組視編碼而定
  • 檢查實際長度:SELECT LENGTH(field) FROM table

日期時間類型選擇指南

類型格式範圍位元組建議用途
YEARYYYY1901~21551僅需年份
TIMEHH:MM:SS-838:59:59 ~ 838:59:593時間間隔、單日時間
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-313純日期(生日、紀念日)
DATETIMEYYYY-MM-DD HH:MM:SS1000~9999 年8完整時間點,不處理時區
TIMESTAMPYYYY-MM-DD HH:MM:SS1970~2038 年4自動時區轉換、記錄建立/更新時間

實務建議

  1. 主鍵優先用 BIGINT UNSIGNED AUTO_INCREMENT,避免未來 ID 耗盡
  2. 金額欄位用 DECIMAL(10,2) 或 DECIMAL(12,4)
  3. 狀態碼、枚舉值用 TINYINT UNSIGNED,而非字串
  4. 建立/更新時間用 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  5. 大文本用 TEXT/JSON,避免 VARCHAR 過長
  6. IP 地址用 INT UNSIGNED 儲存(INET_ATON/INET_NTOA 轉換)

良好的表結構設計能顯著降低儲存成本、提升查詢效能、減少未來維護負擔。建立項目初期即制定命名規範與類型選擇標準,事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved