CREATE FUNCTION用户定义函数
CREATE [AGGREGATE ]FUNCTION function_nameRETURNS {STRING |INTEGER|REAL|DECIMAL}SONAME shared_library_name
用户定义函数(UDF)是一种使用新函数扩展MySQL的方法,该新函数的工作方式类似于本机(内置)MySQL函数,例如ABS()
或CONCAT()
。
function_name
是在SQL语句中调用该函数应使用的名称。该RETURNS
子句指示函数的返回值的类型。DECIMAL
在之后是合法值RETURNS
,但当前DECIMAL
函数返回字符串值,应像STRING
函数一样编写。
shared_library_name
是包含实现该功能的代码的共享库文件的基本名称。该文件必须位于插件目录中。该目录由plugin_dir
系统变量的值给出。有关更多信息,请参见“添加用户定义的功能”。
要创建功能,您必须具有系统架构的INSERT
特权mysql
。这是必需的,因为CREATE FUNCTION
会在mysql.func
系统表中添加一行记录功能名称,类型和共享库名称的行。
CREATE FUNCTION
性能架构user_defined_functions
表中列出了使用进行注册的UDF 。请参见“ user_defined_functions表”。
活动函数是已加载但CREATE FUNCTION
未被删除的函数DROP FUNCTION
。每次服务器启动时都会重新加载所有活动功能,除非您使用该选项启动mysqld--skip-grant-tables
。在这种情况下,将跳过UDF初始化,并且UDF不可用。
有关编写用户定义函数的说明,请参见“添加用户定义的功能”。为了使UDF机制起作用,必须使用C或C ++(或可以使用C调用约定的另一种语言)编写函数,您的操作系统必须支持动态加载,并且必须动态(而非静态)编译mysqld。
一个AGGREGATE
函数的工作原理完全像一个本地的MySQL骨料(摘要)功能,如SUM
或COUNT()
。
要升级与UDF相关联的共享库,请发出一条DROP FUNCTION
语句,升级共享库,然后发出一条CREATE FUNCTION
语句。如果先升级共享库然后使用DROP FUNCTION
,则服务器可能会崩溃。