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

MySQL 語言參考完整指南

     編輯:MySQL 資料庫相關知識

MySQL SQL 語言結構總覽

MySQL 擁有功能豐富且直觀易學的 SQL 介面。本章節詳細說明各類命令、資料型別與函數,為高效使用 MySQL 的核心參考資料。

6.1.1 字面值:字串與數字的撰寫規則

字串字面值

字串由單引號 ' 或雙引號 " 包圍(ANSI 模式僅支援單引號)。範例:

'a string'
"another string"

字串內以反斜線 \ 開頭的序列為跳脫字元,MySQL 支援以下跳脫序列:

序列意義
\0ASCII 0 (NUL) 字元
\'單引號
\"雙引號
\b退格鍵
\n換行符
\r歸位符
\t定位符
\zASCII 26 (Control-Z),解決 Windows 下檔案結束標記問題
\\反斜線本身
\%百分號字面值(用於 LIKE 模式比對)
\_底線字面值(用於 LIKE 模式比對)

引號巢狀處理:

  • 單引號字串內的單引號可用 '' 或 \' 跳脫
  • 雙引號字串內的雙引號可用 "" 或 \" 跳脫
  • 單引號字串內的雙引號、雙引號字串內的單引號無需特殊處理
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', ''hello';
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello";

二進位資料插入字串欄位(BLOB 等)時必須跳脫的字元:

  • NUL (ASCII 0) → \0
  • 反斜線 (ASCII 92) → \\
  • 單引號 (ASCII 39) → \'
  • 雙引號 (ASCII 34) → \"

C 語言可用 mysql_real_escape_string(),Perl 可用 DBI 的 quote 方法自動處理。

數字字面值

  • 整數:數字序列,可加負號,如 1221、0、-32
  • 浮點數:以 . 為小數點,支援科學記號,如 294.42、-32032.6809e+10、148.00

十六進位值

MySQL 支援 x'hexstring'(ANSI SQL 標準)與 0xhex(ODBC 風格)兩種語法:

mysql> SELECT x'4D7953514C';  -- 輸出: MySQL
mysql> SELECT 0xa+0;        -- 輸出: 10
mysql> SELECT 0x5061756c;   -- 輸出: Paul

數值語境下視為 64 位元整數;字串語境下每兩位十六進位轉換為一字元。可用 HEX() 函數轉換。

NULL 值

NULL 代表「無資料」,不同於數值 0 或空字串。匯入匯出文字檔(LOAD DATA INFILE、SELECT ... INTO OUTFILE)時以 \N 表示。

6.1.2 識別名稱規範

資料庫、表格、索引、欄位、別名遵循相同規則。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`欄位名為保留字或含特殊字元

當引用不明確時(如多表同名欄位)必須加前綴限定。

6.1.3 名稱大小寫敏感度

  • 資料庫與表格:取決於作業系統檔案系統。Windows 不敏感、Unix 多數敏感、Mac OS X 預設 HFS+ 不敏感但 UFS 敏感。
  • 欄位與欄位別名:所有情況下不敏感。
  • 表格別名:敏感。

最佳實踐:統一採用小寫命名,或啟動參數 lower_case_table_names=1(Windows 預設 1,Unix 預設 0)。

6.1.4 使用者變數

連線專用變數,語法 @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 等需明確數值的語境不可使用使用者變數。

6.1.5 系統變數

MySQL 4.0.3+ 提供動態調整系統變數功能,無需重啟服務。分兩類:

  • 連線專用 (SESSION/LOCAL):當前連線獨有,新連線以全域值初始化
  • 全域 (GLOBAL):影響全域運作,亦作為新連線的初始值
-- 設定全域變數
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)。

6.1.6 註解語法

  • # 至行尾
  • -- 至行尾(雙減號後需至少一空格)
  • /* ... */ 行內或多行

mysql 客戶端限制:註解內的引號會被視為字串開始;分號視為陳述式結束。建議避免在 /* ... */ 內使用引號或分號。

6.1.7 保留字清單

MySQL 明確保留大量關鍵字(SELECT、INSERT、UPDATE、DELETE、WHERE、JOIN、INDEX、TABLE 等),多為 ANSI SQL92 禁止作為識別符者。部分 ANSI 禁止但 MySQL 允許作為欄位/表名:ACTION、BIT、DATE、ENUM、NO、TEXT、TIME、TIMESTAMP。使用函數名作欄位名時,函數名與左括號間不可有空格。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved