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

MySQL 數據類型全解析與數據表操作實戰:從選型原則到建表增刪改查

     編輯:MySQL 綜合教學

MySQL 數據類型全解析與數據表操作實戰:從選型原則到建表增刪改查

數據類型決定存儲空間、計算效率、索引性能。本文系統梳理 MySQL 五大類型族、核心選型原則,並演示數據表全生命周期操作命令,助你建立「恰如其分」的表設計習慣。

一、 MySQL 五大數據類型族

1. 整數類型

類型字節有符號範圍無符號範圍典型場景
TINYINT1-128 ~ 1270 ~ 255布爾、狀態碼、極小計數
SMALLINT2-32768 ~ 327670 ~ 65535小範圍計數
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中等計數
INT / INTEGER4-21億 ~ 21億0 ~ 42億通用 ID、計數器
BIGINT8-922兆 ~ 922兆0 ~ 1844兆海量 ID、時間戳毫秒

原則:夠用就好,越小越好。節省存儲、緩存、索引深度、CPU 比較開銷。

2. 浮點/定點類型

類型字節精度適用場景
FLOAT4~7 位有效數字科學計算、非精確金額
DOUBLE8~15 位有效數字高精度科學計算
DECIMAL(M,D)M+2精確十進制金融、價格、比率(必選)

避坑:浮點類型存儲近似值,0.1 + 0.2 != 0.3。金額務必用 DECIMAL(10,2)。

3. 日期時間類型

類型字節範圍特點
YEAR11901~2155僅年份
DATE31000-01-01 ~ 9999-12-31日期
TIME3-838:59:59 ~ 838:59:59時間/間隔
DATETIME81000-01-01 00:00:00 ~ 9999-12-31 23:59:59無時區,靜態時間點
TIMESTAMP41970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC帶時區自動轉換,受 2038 年問題限制

實戰建議:

  • 跨時區應用:存儲 BIGINT 毫秒時間戳(UTC),應用層轉換展示。
  • 不跨時區/歷史數據:用 DATETIME 避開 2038 年上限。
  • 自動更新時間戳:updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

4. 字符串類型

類型長度範圍存儲特性適用場景
CHAR(M)0~255定長,右側空格填充固定長度代碼:MD5、UUID、國標代碼
VARCHAR(M)0~65535變長,1-2 字節前綴通用變長文本
TINYTEXT255溢出頁極短文本
TEXT64KB溢出頁文章、描述
MEDIUMTEXT16MB溢出頁長文本
LONGTEXT4GB溢出頁巨大文本
ENUM65535內部存數字索引固定集合:性別、狀態、類型
SET64位圖存儲多選標籤

5. 二進制類型

BINARY/VARBINARY、BLOB 族:存儲圖片、文件流、加密數據。不建議大文件入庫,存對象存儲路徑。

二、 數據表全生命周期操作

1. 創建表

USE db_name;

CREATE TABLE IF NOT EXISTS `users` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `username` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用戶名',
  `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '郵箱',
  `password_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '密碼哈希',
  `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1正常 0禁用',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

建表示例

2. 查看表

SHOW TABLES;                    -- 當前庫所有表
SHOW TABLES FROM other_db;      -- 指定庫
SHOW TABLES LIKE 'user%';       -- 模糊匹配

查看表列表

3. 查看表結構

DESC users;              -- 簡要
DESCRIBE users;          -- 同 DESC
SHOW CREATE TABLE users\G -- 完整 DDL(含引擎、字符集、索引、註釋)

表結構詳情

4. 記錄插入與查詢

-- 插入
INSERT INTO users(username, email, password_hash) VALUES('tom', 'tom@test.com', 'hash123');
INSERT INTO users(username, email, password_hash) VALUES('jerry', 'jerry@test.com', 'hash456'), ('spike', 'spike@test.com', 'hash789');

-- 查詢
SELECT * FROM users;
SELECT id, username FROM users WHERE status = 1 ORDER BY created_at DESC LIMIT 10;

插入記錄

查詢結果

5. 空值與非空約束

  • NOT NULL:插入 NULL 報錯 Column 'col' cannot be null。
  • DEFAULT:隱式插入時自動填充,配合 NOT NULL 保證數據完整性。
  • 避免不必要的 NULL,增加統計複雜度、索引效率損耗。

三、 選型決策速查表

業務需求推薦類型拒絕類型
自增主鍵 IDBIGINT UNSIGNEDINT(未來擴容風險)
金額/價格DECIMAL(10,2)FLOAT/DOUBLE
創建/更新時間DATETIME / TIMESTAMPVARCHAR 存字符串
用戶名/郵箱VARCHAR(64/128)CHAR/TEXT
性別/狀態枚舉TINYINT / ENUMVARCHAR
標籤多選SET / JSON / 關聯表逗號分隔 VARCHAR
MD5/UUIDCHAR(32/36)VARCHAR

「選對類型,是性能優化的起點;拒絕過度設計,是架構演進的智慧。」

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