MySQL 擁有功能豐富且直觀易學的 SQL 介面。本章節詳細說明各類命令、資料型別與函數,為高效使用 MySQL 的核心參考資料。
字串由單引號 ' 或雙引號 " 包圍(ANSI 模式僅支援單引號)。範例:
'a string'
"another string"
字串內以反斜線 \ 開頭的序列為跳脫字元,MySQL 支援以下跳脫序列:
| 序列 | 意義 |
|---|---|
\0 | ASCII 0 (NUL) 字元 |
\' | 單引號 |
\" | 雙引號 |
\b | 退格鍵 |
\n | 換行符 |
\r | 歸位符 |
\t | 定位符 |
\z | ASCII 26 (Control-Z),解決 Windows 下檔案結束標記問題 |
\\ | 反斜線本身 |
\% | 百分號字面值(用於 LIKE 模式比對) |
\_ | 底線字面值(用於 LIKE 模式比對) |
引號巢狀處理:
'' 或 \' 跳脫"" 或 \" 跳脫mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', ''hello';
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello";
\0\\\'\"C 語言可用 mysql_real_escape_string(),Perl 可用 DBI 的 quote 方法自動處理。
1221、0、-32. 為小數點,支援科學記號,如 294.42、-32032.6809e+10、148.00MySQL 支援 x'hexstring'(ANSI SQL 標準)與 0xhex(ODBC 風格)兩種語法:
mysql> SELECT x'4D7953514C'; -- 輸出: MySQL
mysql> SELECT 0xa+0; -- 輸出: 10
mysql> SELECT 0x5061756c; -- 輸出: Paul
數值語境下視為 64 位元整數;字串語境下每兩位十六進位轉換為一字元。可用 HEX() 函數轉換。
NULL 代表「無資料」,不同於數值 0 或空字串。匯入匯出文字檔(LOAD DATA INFILE、SELECT ... INTO OUTFILE)時以 \N 表示。
資料庫、表格、索引、欄位、別名遵循相同規則。MySQL 3.23.6+ 引入反引號 ` 包裹識別符(ANSI 模式下雙引號亦可)。
| 識別符類型 | 最大長度 | 允許字元 |
|---|---|---|
| 資料庫 | 64 | 目錄名允許字元,除 /、\、. |
| 表格 | 64 | 檔案名允許字元,除 /、. |
| 欄位 | 64 | 所有字元 |
| 別名 | 255 | 所有字元 |
不可包含 ASCII(0)、ASCII(255) 或引號字元。保留字或含特殊字元的識別符必須用反引號包裹:
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
| 語法 | 含義 |
|---|---|
col_name | 查詢所用任一表中的對應欄位 |
tbl_name.col_name | 當前資料庫中指定表的欄位 |
db_name.tbl_name.col_name | 指定資料庫與表的欄位(MySQL 3.22+) |
`column_name` | 欄位名為保留字或含特殊字元 |
當引用不明確時(如多表同名欄位)必須加前綴限定。
最佳實踐:統一採用小寫命名,或啟動參數 lower_case_table_names=1(Windows 預設 1,Unix 預設 0)。
連線專用變數,語法 @var_name。名稱可含字母、數字、_、$、.。無需初始化,預設為 NULL,可儲存整數、實數、字串。連線結束自動釋放。
SET @var = {整數運算式 | 實數運算式 | 字串運算式} [, @var = ...]
-- 非 SET 語句中賦值用 :=
mysql> SELECT @t1:=(@t2:=1)+@t3:=4, @t1, @t2, @t3;
注意:同一陳述式中勿同時賦值與使用同一變數;HAVING、GROUP BY、ORDER BY 中不可引用 SELECT 列表中設定的變數。LIMIT、IGNORE n LINES 等需明確數值的語境不可使用使用者變數。
MySQL 4.0.3+ 提供動態調整系統變數功能,無需重啟服務。分兩類:
-- 設定全域變數
SET GLOBAL sort_buffer_size = value;
SET @@global.sort_buffer_size = value;
-- 設定連線變數
SET SESSION sort_buffer_size = value;
SET @@session.sort_buffer_size = value;
SET sort_buffer_size = value; -- 預設為 SESSION
-- 查看變數值
SELECT @@global.sort_buffer_size;
SHOW GLOBAL VARIABLES LIKE 'sort_buffer_size';
SELECT @@session.sort_buffer_size;
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';
常見變數:autocommit、key_buffer_size、max_connections、query_cache_size、sort_buffer_size、table_cache、thread_cache_size、wait_timeout 等。num 型別接受數值,bool 接受 0/1/ON/OFF,enum 接受列舉值或對應數字(首項為 0)。
# 至行尾-- 至行尾(雙減號後需至少一空格)/* ... */ 行內或多行mysql 客戶端限制:註解內的引號會被視為字串開始;分號視為陳述式結束。建議避免在 /* ... */ 內使用引號或分號。
MySQL 明確保留大量關鍵字(SELECT、INSERT、UPDATE、DELETE、WHERE、JOIN、INDEX、TABLE 等),多為 ANSI SQL92 禁止作為識別符者。部分 ANSI 禁止但 MySQL 允許作為欄位/表名:ACTION、BIT、DATE、ENUM、NO、TEXT、TIME、TIMESTAMP。使用函數名作欄位名時,函數名與左括號間不可有空格。