擴展 MySQL 8.4  /  將函數加入 MySQL

第 6 章 將函數加入 MySQL

有三種方法可以將新函數加入 MySQL

  • 建立儲存函數 (一種儲存物件)。儲存函數是使用 SQL 陳述式撰寫,而不是編譯物件碼。撰寫儲存函數的語法在此不涵蓋。請參閱使用儲存常式

  • 建立原生 (內建) MySQL 函數。原生函數是透過修改 MySQL 原始程式碼,編譯到 mysqld 伺服器中,並永久可用。請參閱第 6.1 節,「加入原生函數」

  • 使用可載入函數介面。可載入函數是編譯為程式庫檔案,然後使用 CREATE FUNCTIONDROP FUNCTION 陳述式,動態地從伺服器載入和卸載。請參閱第 6.2 節,「加入可載入函數」

    在某些情況下,可載入函數會包含在組件或外掛程式程式庫檔案中,並在安裝或解除安裝組件或外掛程式時自動載入和卸載。

注意

可載入函數之前稱為使用者定義函數 (UDF)。該術語有些誤稱,因為「使用者定義」也可以應用於使用 SQL 撰寫的儲存函數,以及透過修改伺服器原始程式碼加入的原生函數。

每種建立編譯函數的方法都有其優缺點

  • 加入原生函數需要修改原始程式碼發行版本。加入可載入函數則不需要;它可以加入二進位 MySQL 發行版本,而無需存取 MySQL 原始碼。

  • 可載入函數包含在一個物件檔案中,您除了伺服器本身之外還必須安裝該檔案。對於編譯到伺服器中的函數,則不需要這樣做。(此點不適用於由組件或外掛程式自動載入的可載入函數。)

  • 如果您升級 MySQL 發行版本,您可以繼續使用先前安裝的可載入函數,除非您升級到可載入函數介面變更的較新 MySQL 版本。對於原生函數,您每次升級都必須重複您的原始程式碼修改。

無論使用哪種方法來加入函數,都可以在 SQL 陳述式中像原生函數 (例如 ABS()SOUNDEX()) 一樣調用。

如需描述伺服器如何解讀對不同類型函數參照的規則,請參閱函數名稱剖析與解析

以下章節描述可載入函數介面的功能、提供撰寫可載入函數的指示、討論 MySQL 為防止濫用可載入函數而採取的安全預防措施,以及描述如何加入原生 MySQL 函數。

如需說明如何撰寫可載入函數的範例原始程式碼,請查看 MySQL 原始碼發行版本中提供的 sql/udf_example.cc 檔案。

注意

MySQL 原始程式碼包含使用 Doxygen 撰寫的內部文件。此文件對於從開發人員的角度了解 MySQL 的運作方式很有用。產生的 Doxygen 內容可在 https://mysqldev.dev.org.tw/doc/index-other.html 取得。也可以使用 產生 MySQL Doxygen 文件內容 中的指示,從 MySQL 原始碼發行版本在本地產生此內容。