語法定義
CREATE [AGGREGATE] FUNCTION function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
DROP FUNCTION function_name
參數詳解
- function_name:SQL陳述式中呼叫的函數名稱
- RETURNS:聲明回傳資料型別(STRING/INTEGER/REAL/DECIMAL)
- shared_library_name:共享目標檔基礎檔名(不含路徑、不含.so/.dll副檔名),必須位於動態連結器搜尋路徑中
- AGGREGATE:可選,聲明為聚合函數(如SUM、COUNT),需
mysql.func表有type欄位支援
權限需求
CREATE FUNCTION:需mysql資料庫INSERT權限(向mysql.func寫入記錄)
DROP FUNCTION:需mysql資料庫DELETE權限(從mysql.func刪除記錄)
- 若無
mysql.func表,執行mysql_fix_privilege_tables腳本建立
生命週期與載入機制
- 有效函數:已
CREATE FUNCTION載入且未DROP FUNCTION移除
- 每次
mysqld啟動自動重新載入所有有效函數
--skip-grant-tables啟動時跳過UDF初始化,UDF不可用
系統前置需求
- 以C或C++編寫函數代碼
- 作業系統支援動態載入(dlopen/LoadLibrary)
- 動態編譯的mysqld(非static linking)
AGGREGATE函數特殊要求
- 運作方式同內建聚合函數(SUM、COUNT)
mysql.func表必須包含type欄位
- 缺失時執行
mysql_fix_privilege_tables建立
部署檢查清單
- [ ] 共享庫編譯成功(.so/.dll)
- [ ] 庫檔放置於
LD_LIBRARY_PATH/PATH可搜尋路徑
- [ ] 執行
CREATE FUNCTION無錯誤
- [ ] SQL測試呼叫正確回傳
- [ ]
mysqld重啟後函數自動載入可用
- [ ]
mysql.func表記錄正確