Mysql

即使伺服器中有儲存函式,Mysql.func 表中也沒有記錄

  • March 18, 2015

當我在我的一個 mysql 伺服器中創建使用者定義的函式時,它不會在 mysql.func 表中創建任何行。即使我的 mysql 伺服器中有多個函式,這個表是空的。有人可以解釋一下為什麼它沒有被記錄。每當我們創建任何儲存過程時,它都應該像 mysql.proc 表一樣創建行。我正在使用 mysql 5.5.40。提前致謝。

所有儲存過程和儲存函式,其程式碼都是用 MySQL 儲存過程語言編寫的,都駐留在mysql.proc.

你可以看到每個有多少

SELECT COUNT(1) rowcount,type
FROM mysql.proc GROUP BY type;

我見過的唯一一次mysql.func是在函式的上下文中AGGREGATE

根據MySQL 文件CREATE FUNCTION Syntax for User-Defined Functions

AGGREGATE 函式的工作方式與原生 MySQL 聚合(匯總)函式如 SUM 或 COUNT() 完全相同。要使 AGGREGATE 起作用,您的 mysql.func 表必須包含一個類型列。如果你的 mysql.func 表沒有這個列,你應該執行mysql_upgrade程序來創建它(參見第 4.4.7 節,“mysql_upgrade - 檢查和升級 MySQL 表”)。

我的猜測是mysql.func儲存AGGREGATE函式而不是正常函式。顯然,您將在 C/C++ 中創建一些 UDF,並mysql.func使用CREATE AGGREGATE FUNCTION語法將其註冊。

引用自:https://dba.stackexchange.com/questions/95577