CREATE TABLE [IF NOT EXISTS] 表名稱 (
欄位名1 型別 [屬性] [索引],
欄位名2 型別 [屬性] [索引],
...
欄位名n 型別 [屬性] [索引]
) [表屬性] [表字元集];
命名規範:
| 型別 | 位元組 | 範圍(有號) | 範圍(無號/UNSIGNED) |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 |
FLOAT(M,D):4 位元組,單精度,有誤差DOUBLE(M,D):8 位元組,雙精度,五捨六入DECIMAL(M,D):M+2 位元組,以字串儲存,**精確無誤差**,四捨五入,適合金額計算⚠️ 最佳實踐:涉及金額、精確計算務必使用 DECIMAL。
| 型別 | 最大長度 | 特性 |
|---|---|---|
| CHAR(M) | 255 | 固定長度,不足補空格,尾部空格會被截斷 |
| VARCHAR(M) | 255(5.0.3 前)/ 65,535(5.0.3+) | 可變長度,實際長度+1 位元組儲存長度資訊 |
| TEXT | 65,535 | 長文本,文章、日誌 |
| BLOB | 65,535 | 二進位資料,圖片、檔案(通常由程式語言寫入) |
選擇建議:固定長度用 CHAR(如 MD5、UUID),可變長度用 VARCHAR。
ENUM('a','b','c'):單選,1–2 位元組,最多 65,535 個值SET('a','b','c'):多選,逗號分隔,1–8 位元組,最多 64 個值| 型別 | 格式 | 範圍 | 備註 |
|---|---|---|---|
| DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | |
| TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 ~ 9999-12-31 | 8 位元組,與時區無關 |
| TIMESTAMP | YYYYMMDDHHMMSS | 1970-01-01 ~ 2038-01-19 | 4 位元組,受時區影響,自動更新 |
| YEAR | YYYY | 1901 ~ 2155 | 1 位元組 |
💡 建議:應用層使用整數時間戳(如 PHP time()、Java System.currentTimeMillis())儲存,計算更高效。
SHOW TABLES; -- 列出所有表
DESC users; -- 查看表結構
SELECT * FROM users; -- 查詢資料