CREATE TABLE 核心語法
CREATE TABLE table_name (
col1 data_type [constraints],
col2 data_type [constraints],
...
[table_constraints]
) ENGINE=storage_engine DEFAULT CHARSET=charset COLLATE=collation;
關鍵列屬性詳解
| 屬性 | 含義 | 示例 |
NOT NULL | 禁止 NULL 值 | name VARCHAR(20) NOT NULL |
AUTO_INCREMENT | 自增整數,通常用於主鍵 | id INT UNSIGNED AUTO_INCREMENT |
PRIMARY KEY | 主鍵約束,唯一+非空 | PRIMARY KEY (id) 或 id INT PRIMARY KEY |
DEFAULT | 默認值 | status TINYINT DEFAULT 1 |
UNIQUE | 唯一約束,允許單個 NULL | email VARCHAR(100) UNIQUE |
COMMENT | 列註釋 | score INT COMMENT '考試分數' |
完整建表示例
CREATE TABLE tutorials (
tutorial_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY (tutorial_id),
INDEX idx_author (tutorial_author),
UNIQUE KEY uk_title (tutorial_title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='教程表';
命令行創建表實戰
mysql -u root -p
USE testdb;
CREATE TABLE tutorials (
tutorial_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY (tutorial_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
PHP 腳本創建表 (mysqli)
<?php
$mysqli = new mysqli('localhost', 'root', 'pass', 'testdb');
if ($mysqli->connect_errno) die('Connect failed: ' . $mysqli->connect_error);
$sql = "CREATE TABLE tutorials (
tutorial_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY (tutorial_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
if ($mysqli->query($sql) === TRUE) {
echo 'Table created successfully';
} else {
echo 'Error: ' . $mysqli->error;
}
$mysqli->close();
?>
DROP TABLE 刪除表
-- 基礎刪除
DROP TABLE tutorials;
-- 安全刪除(不存在不報錯)
DROP TABLE IF EXISTS tutorials;
-- 批量刪除
DROP TABLE t1, t2, t3;
命令行刪除表
mysql -u root -p
USE testdb;
DROP TABLE tutorials;
-- Query OK, 0 rows affected (0.08 sec)
PHP 腳本刪除表
<?php
$mysqli = new mysqli('localhost', 'root', 'pass', 'testdb');
$sql = 'DROP TABLE IF EXISTS tutorials';
if ($mysqli->query($sql) === TRUE) {
echo 'Table deleted successfully';
} else {
echo 'Error: ' . $mysqli->error;
}
$mysqli->close();
?>
存儲引擎選擇指南
| 引擎 | 事務 | 行鎖 | 外鍵 | 適用場景 |
| InnoDB | ✅ | ✅ | ✅ | 核心業務、高併發、數據一致性要求高 |
| MyISAM | ❌ | ❌(表鎖) | ❌ | 只讀/讀多寫少、全文搜索(舊版本)、日志分析 |
| Memory | ❌ | ❌ | ❌ | 臨時表、緩存、極高速查找(重啟丟失) |
| Archive | ❌ | ❌ | ❌ | 海量歸檔、僅插入/全表掃描、壓縮存儲 |
默認推薦:ENGINE=InnoDB,除非有明確理由選擇其他。
字符集與校對規則
DEFAULT CHARSET=utf8mb4:支持完整 Unicode (含 Emoji)
COLLATE=utf8mb4_unicode_ci:基於 UCA 算法,多語言排序準確
utf8mb4_general_ci:舊版兼容,性能略高但排序不準(如 ß = ss)
- 列級可單獨指定:
name VARCHAR(50) CHARSET utf8mb4 COLLATE utf8mb4_bin (區分大小寫)