首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 學習筆記:MySQL 建表語法基礎與資料型態對照

     編輯:PHP 相關知識

前言

PHP 操作 MySQL 資料庫是後端開發核心技能。熟悉建表語句、資料型態選擇、約束設計,能避免後期遷移修改的高昂成本。本文整理常用 MySQL 建表語法與型態對照,供快速查閱。

一、標準建表語句範例

CREATE TABLE `persons` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵 ID',
    `last_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '姓氏',
    `first_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名字',
    `email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '電子郵件',
    `phone` VARCHAR(20) DEFAULT NULL COMMENT '電話',
    `birth_date` DATE DEFAULT NULL COMMENT '生日',
    `balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '餘額',
    `is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '啟用狀態',
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
    `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_email` (`email`),
    KEY `idx_last_name` (`last_name`),
    KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人員基本資料表';

二、常用資料型態選擇指南

分類型態儲存範圍/長度適用場景備註
整數TINYINT-128~127 / 0~255 (UNSIGNED)布林旗標、極小計數1 位元組
SMALLINT-32768~32767小範圍計數2 位元組
MEDIUMINT-8388608~8388607中等計數3 位元組
INT / INTEGER-2147483648~2147483647標準 ID、計數4 位元組,最常用
BIGINT±9.22e18大量 ID、時間戳毫秒8 位元組
定點數DECIMAL(M,D)精確至 D 位小數金額、價格、比率字串儲存,精確運算
NUMERIC同 DECIMAL同上同義詞
浮點數FLOAT / DOUBLE近似值科學計算、座標不適合金額
日期時間DATE1000-01-01 ~ 9999-12-31生日、截止日3 位元組
TIME-838:59:59 ~ 838:59:59時間段3 位元組
DATETIME1000-01-01 00:00:00 ~ 9999-12-31 23:59:59完整時間點(無時區)8 位元組,5.6+ 支援微秒
TIMESTAMP1970-01-01 ~ 2038-01-19 (UTC)自動記錄建立/更新時間4 位元組,含時區轉換
字串CHAR(N)固定 0~255 字元MD5、UUID、國家代碼右側空格填充
VARCHAR(N)可變 0~65535 字元一般文字、名稱1-2 位元組長度前綴
TEXT / MEDIUMTEXT / LONGTEXT65535 / 16M / 4G 字元長文本、文章內容離頁儲存,避免 SELECT *
二進制BINARY / VARBINARY同 CHAR/VARCHAR檔案雜湊、加密資料位元組比較
BLOB 系列同 TEXT 系列圖片、檔案二進制建議存檔案路徑而非內容
JSONJSON約 1G半結構化資料、動態屬性5.7+ 原生支援,可索引虛擬欄位
ENUMENUM('a','b','c')預設值集合狀態機、固定分類內部存數字索引,效能佳
SETSET('a','b','c')多選值集合標籤、權限位元組內部存位元遮罩

三、關鍵約束與索引設計

  • PRIMARY KEY:唯一識別,聚簇索引(InnoDB),建議用 `BIGINT UNSIGNED AUTO_INCREMENT` 或 UUID。
  • UNIQUE KEY:業務唯一性(email、手機、身分證),自動建立索引。
  • FOREIGN KEY:參考完整性(InnoDB 支援),大型高併發系統常移至應用層維護以減輕鎖爭用。
  • INDEX (KEY):加速 WHERE、JOIN、ORDER BY。遵循「最左前綴」、「高選擇性優先」、「覆蓋索引」原則。
  • NOT NULL + DEFAULT:避免 NULL 語意模糊,簡化查詢條件(`IS NULL` 無法用索引)。
  • COMMENT:每欄、每表必寫,文檔即代碼。

四、字元集與排序規則

  • utf8mb4:支援完整 Unicode(含 Emoji、生僻字),新專案預設選擇。
  • utf8mb4_unicode_ci:基於 UCA(Unicode Collation Algorithm),排序準確(如 ß=ss)。
  • utf8mb4_general_ci:舊版簡化排序,效能略高但準確度較低(不區分某些字元)。
  • 避免使用 `utf8`(MySQL 別名實為 `utf8mb3`,不支援 4 位元組字元)。

五、儲存引擎選擇

引擎支援交易支援外鍵鎖粒度適用場景
InnoDB是是行鎖預設、OLTP、高併發、資料完整性要求高
MyISAM否否表鎖唯讀/讀多寫少、全文搜尋(5.6+ InnoDB 也支援)
MEMORY否否表鎖暫存表、查找表、Session(資料重啟消失)
ARCHIVE否否行鎖日誌、歸檔、僅追加寫入

六、PHP 連線與執行建表

<?php
$pdo = new PDO(
    'mysql:host=127.0.0.1;dbname=test;charset=utf8mb4',
    'user', 'pass',
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
);

$sql = <<exec($sql);
echo "Table created/verified.\n";

結語

良好的表結構設計是系統穩定擴展的基石。掌握資料型態精準選擇、約束完整定義、索引科學規劃、字元集統一規範,配合 PHP PDO 安全執行 DDL,即能構建經得起時間考驗的資料層。

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