一、條件判斷函數
| 函數 | 語法 | 說明 | 示例 |
| IF | IF(expr, v1, v2) | expr 為真返回 v1,否則 v2 | SELECT id, IF(score>=60,'pass','fail') FROM t; |
| IFNULL | IFNULL(v1, v2) | v1 非空返回 v1,否則 v2 | SELECT a, IFNULL(a,'no') FROM t; |
| CASE (搜索) | CASE WHEN e1 THEN v1 [WHEN e2 THEN v2...] [ELSE vn] END | 多條件分支 | CASE WHEN grade>90 THEN 'A' WHEN grade>60 THEN 'B' ELSE 'C' END |
| CASE (簡單) | CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2...] [ELSE rn] END | 等值匹配分支 | CASE grade WHEN 100 THEN '完美' WHEN 60 THEN '及格' ELSE '加油' END |
二、系統信息函數
| 函數 | 返回值 |
VERSION() | 資料庫版本號 |
CONNECTION_ID() | 當前連線 ID(等同 SELECT CONNECTION_ID()) |
DATABASE() / SCHEMA() | 當前預設資料庫名 |
USER() / SYSTEM_USER() / SESSION_USER() | 客戶端聲明的用戶@主機(如 root@localhost) |
CURRENT_USER() | 實際認證通過的用戶@主機(權限判定依據) |
CHARSET(str) | 字符串的字符集 |
COLLATION(str) | 字符串的校對規則 |
LAST_INSERT_ID() | 最近一次 AUTO_INCREMENT 生成的值(批量插入返回首個) |
三、加密與雜湊函數
| 函數 | 特點 | 適用場景 |
PASSWORD(str) | MySQL 內部單向雜湊,**5.7.6+ 棄用**,8.0 移除 | 舊版本用戶密碼存儲(不建議新專案使用) |
MD5(str) | 128 位雜湊,不可逆 | 數據完整性校驗、非敏感標識生成 |
SHA1(str) / SHA2(str, 256/512) | 更強雜湊 | 密碼鹽值雜湊(建議應用層用 bcrypt/Argon2) |
AES_ENCRYPT(str, key) / AES_DECRYPT(crypt, key) | 對稱加密,需備份金鑰 | 敏感字段加密存儲(身份證、銀行卡) |
ENCODE(str, pwd) / DECODE(crypt, pwd) | 簡易對稱,**已棄用** | 不建議使用 |
四、格式化與進制轉換
FORMAT(x, n):數字保留 n 位小數,含千分位分隔符(如 FORMAT(12345.678, 2) → '12,345.68')。
BIN(x)、OCT(x)、HEX(x):二/八/十六進制字符串。
CONV(x, from_base, to_base):任意進制轉換(CONV(16,10,2) → '10000')。
五、IP 地址與數字互轉
SELECT INET_ATON('192.168.1.125'); -- → 3232235901
SELECT INET_NTOA(3232235901); -- → '192.168.1.125'
適用於 IP 範圍查詢、地理位置關聯、日誌分析,存儲用 INT UNSIGNED 節省空間並支援索引範圍掃描。
六、鎖函數(應用級協作鎖)
| 函數 | 返回值 |
GET_LOCK(name, timeout) | 1=獲取成功,0=超時,NULL=錯誤 |
RELEASE_LOCK(name) | 1=釋放成功,0=未持有,NULL=錯誤 |
IS_FREE_LOCK(name) | 1=空閒,0=被佔用 |
IS_USED_LOCK(name) | 持有者的 CONNECTION_ID,空閒返回 NULL |
典型用例:分布式定時任務防重跑、單實例資源串行化。
七、效能測試與類型轉換
BENCHMARK(count, expr):重複執行 expr count 次,返回耗時(秒),用於測試表達式效能。
CAST(x AS type) / CONVERT(x, type):目標類型限 BINARY、CHAR、DATE、DATETIME、TIME、SIGNED、UNSIGNED。僅影響輸出類型,不改變表結構。
CONVERT(str USING charset):字符集轉換(CONVERT('abc' USING utf8mb4))。