当前位置:Gxlcms > 数据库问题 > 扩展mysql - 手把手教你写udf

扩展mysql - 手把手教你写udf

时间:2021-07-01 10:21:17 帮助过:3人阅读

简介

MySQL是最流行的开放源码SQL数据库管理系统,相对于OracleDB2等大型数据库系统,MySQL由于其开源性、易用性、稳定性等特点,受到个人使用者、中小型企业甚至一些大型企业的广泛欢迎,MySQL具有以下特点:

l  MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内,这样就增加了速度并提高了灵活性。

l  MySQL软件是一种开放源码软件。

l  MySQL数据库服务器具有快速、可靠和易于使用的特点。

l  MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。

l  有大量可用的共享MySQL软件。

2 MySQL内置函数

使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。下面给几个例子:

l  字符串函数

mysql> select ASCII(‘2‘);

+------------+

| ASCII(‘2‘) |

+------------+

|      50 |

+------------+

打印字符的ASCII编码。

l  数值函数

mysql> SELECT LOG(10,100);

+-------------+

| LOG(10,100) |

+-------------+

|          2 |

+-------------+

打印以10为底,100的对数值。

l  日期和时间函数

mysql> SELECT CURDATE();

+------------+

| CURDATE()  |

+------------+

| 2011-11-11 |

+------------+

打印当前的日期。

 

这里简单举几个例子,如果想了解MySQL函数的全貌,请访问Mysql官方手册http://dev.mysql.com/doc/#manual.

3 扩展MySQL函数------ UDF

MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。其实除了UDF外,使用者还可以将函数添加为MySQL的固有(内建)函数,固有函数被编译进mysqld服务器中,称为永久可用的,不过这种方式较添加UDF

复杂,升级维护都较为麻烦,这里我们不做讨论。

无论你使用哪种方法去添加新函数,它们都可以被SQL声明调用,就像 ABS()SUM()这样的固有函数一样。

3.1 UDF的特性

l  函数能返回字符串,整数或实数。

l  你可以定义一次作用于一行的简单函数,或作用于多行的组的集合函数。

l  提供给函数的信息使得函数可以检查传递给它们的参量的数目和类型。

l  你可以让MySQL在将某参量传递给函数之前强制其为某一类型。

l  你可以表示函数返回NULL 或发生错误。

3.2 CREATE FUNCTION/DROP FUNCTION语法

CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL}

       SONAME shared_library_name

 

DROP FUNCTION function_name

一个自定义函数 (UDF) 就是用一个象ABS()SUM()这样的固有(内建)函数一样作用的新函数去扩展MySQL

function_name 是用在SQL声明中以备调用的函数名字。RETURNS 子句说明函数返回值的类型。shared_library_name 是共享目标文件的基本名,共享目标文件含有实现函数的代码。该文件必须位于一个能被你系统的动态连接者搜索的目录里。

你必须有mysql 数据库的INSERT 权限才能创建一个函数,你必须有mysql 数据库的DELETE权限才能撤销一个函数。这是因为CREATE FUNCTION 往记录函数名字,类型和共享名的mysql.func系统表里添加了一行,而DROP FUNCTION则是从表中删掉这一行。

值得注意的是,要使得UDF机制能够起作用,必须使用C

人气教程排行