一個自訂函數 (UDF)就是用一個象ABS() 或 CONCAT()這樣的固有(內建)函數一樣作用的新函數去 擴充MySQL。
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL}
SONAME shared_library_name
DROP FUNCTION function_name
function_name 是 用在SQL聲明中以備調用的函數名字。RETURNS 子句說明函數傳回值的類型。 shared_library_name 是共用目標檔案的基本名,共用目標檔案含有實現函數的代碼。該檔案必須位於一 個能被你系統的動態串連者搜尋的目錄裡。
你必須有mysql 資料庫的INSERT 許可權才能建立一個函數,你必須有mysql 資料庫的DELETE許可權才能撤 銷一個函數。這是因為CREATE FUNCTION 往記錄函數名字,類型和共用名稱的mysql.func系統資料表裡添加了一 行,而DROP FUNCTION則是從表中刪掉這一行。如果你沒有這個系統資料表,你應該運行 mysql_fix_privilege_tables指令碼來建立一個。
一個有效函數是一個用CREATE FUNCTION載入且沒有用DROP FUNCTION移除的函數。每次伺服器啟動 的時候會重新載入所有有效函數,除非你使用--skip-grant-tables參數啟動mysqld。在這種情況下, 將 跳過UDF的初始化,UDF不可用。
要使得UDF機制能夠起作用,必須使用C或者C++編寫函數,你的系統必須支援動態載入,而且你必須是 動態編譯的mysqld(非靜態)。
一個AGGREGATE函數就像一個MySQL固有的集合(總和)函數一樣起作用,比如,SUM或COUNT()函數。 要使得AGGREGATE 起作用,你的mysql.func表必須包括一個type列。如果你的mysql.func表沒有這一 列 ,你應該運行mysql_fix_privilege_tables指令碼來建立此列。