類型 聲明 前綴 作用域 訪問方式 局部變量 DECLARE var INT DEFAULT 0; 無 BEGIN...END 塊內 直接用變量名 會話變量 SET @var = 1; @ 整個連接會話 @var 系統變量 SET GLOBAL sort_buffer_size=... @@ 全局/會話 @@global.var / @@session.var 規範: 過程內優先用局部變量,避免 @ 變量跨過程污染。
3. 註釋風格統一
-- IF-THEN-ELSEIF-ELSE IF condition1 THEN -- statements ELSEIF condition2 THEN -- statements ELSE -- statements END IF; -- CASE 條件值匹配 CASE expr WHEN value1 THEN statements WHEN value2 THEN statements ELSE statements END CASE; -- CASE 條件表達式 CASE WHEN condition1 THEN statements WHEN condition2 THEN statements ELSE statements END CASE;循環結構
模式 關鍵字 方向 規範 輸入 IN 調用者→過程 默認,不可修改 輸出 OUT 過程→調用者 過程內必須賦值 雙向 INOUT 雙向 調用者初始化,過程修改 50+ 字符串函數分類速查表
大小寫轉換
CHAR_LENGTH(str) / CHARACTER_LENGTH(str) -- 字符數 LENGTH(str) / OCTET_LENGTH(str) -- 字節數 BIT_LENGTH(str) -- 二進制位數子串提取與定位
CONCAT(str1, str2, ...) -- 連接 CONCAT_WS(sep, str1, str2, ...) -- 帶分隔符連接 INSERT(str, pos, len, newstr) -- 替換指定區間 REPLACE(str, from_str, to_str) -- 全量替換 REVERSE(str) -- 反轉 REPEAT(str, count) -- 重複 SPACE(n) -- n 個空格去除與填充
FIND_IN_SET(str, strlist) -- 集合中查找 (逗號分隔) FIELD(str, str1, str2, ...) -- 列表中位置 ELT(n, str1, str2, ...) -- 位置取值 STRCMP(expr1, expr2) -- 比較 (-1/0/1) LIKE / NOT LIKE -- 模式匹配 (% _) REGEXP / RLIKE -- 正則表達式編碼與轉換
FORMAT(x, d) -- 數字格式化 #,###.## SOUNDEX(str) -- 英文發音編碼 SPACE(n) -- 空格字符串壓縮與解壓 (MySQL 5.7+)
LOAD_FILE(file_name) -- 讀取文件內容 (需 FILE 權限、secure_file_priv)調試與最佳實踐
- 用
SELECT ... INTO @debug_var;輸出中間值- 建立
debug_log(msg VARCHAR(1000))表記錄關鍵節點- 複雜邏輯拆分為多個小過程,單元測試後組合
- 避免在循環中執行 DDL/大事務
- 動態 SQL 必須用
PREPARE/EXECUTE/DEALLOCATE PREPARE三部曲- 異常處理:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ...