SQL:關係型資料庫通用語言
SQL (Structured Query Language) 是 ANSI/ISO 標準,分四大功能類別:
| 類別 | 英文 | 核心語句 | 用途 |
| 資料查詢語言 | DQL | SELECT | 檢索資料 |
| 資料定義語言 | DDL | CREATE, ALTER, DROP, TRUNCATE, RENAME | 建立/修改/刪除資料庫物件 |
| 資料操縱語言 | DML | INSERT, UPDATE, DELETE, SELECT | 增刪改查業務資料 |
| 資料控制語言 | DCL | GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT | 權限、事務、鎖控制 |
MySQL 對 SQL 的擴展與差異
- 支援標準 SQL-92/99/2003 核心特性:子查詢、視圖、觸發器、預存程序、外鍵 (InnoDB)、事務隔離級別。
- 獨有擴展語法:
LIMIT offset, row_count (分頁,標準為 OFFSET ... FETCH)
REPLACE INTO / INSERT ... ON DUPLICATE KEY UPDATE (Upsert)
SHOW DATABASES/TABLES/STATUS/VARIABLES/ENGINES/PROCESSLIST (元資料檢視)
EXPLAIN / EXPLAIN ANALYZE (執行計畫)
BACKUP TABLE / RESTORE TABLE (已廢棄,改用 XtraBackup)
HANDLER (底層儲存引擎 API 直接存取)
LOAD DATA INFILE / SELECT ... INTO OUTFILE (高效大量導入導出)
PREPARE / EXECUTE / DEALLOCATE PREPARE (預處理語句)
- 使用者變數
@var、系統變數 @@var
- 不支援/受限標準特性:
- CHECK 約束 (8.0.16+ 始支援,舊版忽略)
- 全外鍵動作 (InnoDB 支援,MyISAM 不支援)
- 遞歸 CTE (8.0+ 支援)
- 窗口函數 (8.0+ 支援)
MySQL 註釋三種風格
# 1. 單行註釋:# 到行尾
SELECT * FROM users; # 這是註釋
# 2. 單行註釋:-- 空格 到行尾 (標準 SQL 風格,注意必須有空格)
SELECT * FROM users; -- 這是註釋
# 3. 多行註釋:/* ... */ (標準 SQL 風格,可嵌套)
SELECT * FROM users /* 這是多行
註釋 */ WHERE id = 1;
/*
多行註釋範例
可包含 /* 內層註釋 */
*/
嵌入式應用:SQL 在程式語言中
-- PHP PDO 範例 (參數化查詢,防注入)
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND status = ?');
$stmt->execute([$email, 1]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
-- Java JDBC 範例
String sql = "SELECT * FROM users WHERE email = ? AND status = ?";
try (Connection c = DriverManager.getConnection(url, user, pass);
PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, email);
ps.setInt(2, 1);
ResultSet rs = ps.executeQuery();
while (rs.next()) { ... }
}
-- Python PyMySQL 範例
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='user', password='pass', db='test', charset='utf8mb4')
with conn.cursor() as cur:
cur.execute('SELECT * FROM users WHERE email=%s AND status=%s', (email, 1))
rows = cur.fetchall()
MySQL 客戶端工具對比
| 工具 | 類型 | 特色 |
| mysql | 官方 CLI | 輕量、腳本自動化、管道友善 |
| MySQL Workbench | 官方 GUI | ER 圖、SQL 開發、伺服器管理、遷移 |
| phpMyAdmin | Web PHP | 瀏覽器存取、跨平台、免安裝客戶端 |
| Navicat / DataGrip / DBeaver | 商業/開源 GUI | 智能補全、資料同步、報表、SSH 隧道 |
掌握標準 SQL 可移植技能,深入 MySQL 擴展可發揮平台極致效能。生產代碼堅持「參數化查詢 + 顯式列名 + 參數化 LIMIT/OFFSET」,拒絕字串拼接,從源頭杜絕注入與效能隱患。