首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 與 MySQL 的關係解析:標準語言、擴展語法、註釋風格與嵌入式應用全覽

     編輯:MySQL 資料庫相關知識

SQL:關係型資料庫通用語言

SQL (Structured Query Language) 是 ANSI/ISO 標準,分四大功能類別:

類別英文核心語句用途
資料查詢語言DQLSELECT檢索資料
資料定義語言DDLCREATE, ALTER, DROP, TRUNCATE, RENAME建立/修改/刪除資料庫物件
資料操縱語言DMLINSERT, UPDATE, DELETE, SELECT增刪改查業務資料
資料控制語言DCLGRANT, 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官方 GUIER 圖、SQL 開發、伺服器管理、遷移
phpMyAdminWeb PHP瀏覽器存取、跨平台、免安裝客戶端
Navicat / DataGrip / DBeaver商業/開源 GUI智能補全、資料同步、報表、SSH 隧道
掌握標準 SQL 可移植技能,深入 MySQL 擴展可發揮平台極致效能。生產代碼堅持「參數化查詢 + 顯式列名 + 參數化 LIMIT/OFFSET」,拒絕字串拼接,從源頭杜絕注入與效能隱患。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved