MYSQL入門學習之十三:自定義函數的基本操作 相關鏈接: MYSQL入門學習之一:基本操作 http://www.BkJia.com/database/201212/173868.html MYSQL入門學習之二:使用正則表達式搜索 http://www.BkJia.com/database/201212/173869.html MYSQL入門學習之三:全文本搜索 http://www.BkJia.com/database/201212/173873.html MYSQL入門學習之四:MYSQL的數據類型 http://www.BkJia.com/database/201212/175536.html MYSQL入門學習之五:MYSQL的字符集 http://www.BkJia.com/database/201212/175541.html MYSQL入門學習之六:MYSQL的運算符 http://www.BkJia.com/database/201212/175862.html MYSQL入門學習之七:MYSQL常用函數 http://www.BkJia.com/database/201212/175864.html MYSQL入門學習之八:數據庫及表的基本操作 http://www.BkJia.com/database/201212/175867.html MYSQL入門學習之九:索引的簡單操作 http://www.BkJia.com/database/201212/176772.html MYSQL入門學習之十:視圖的基本操作 http://www.BkJia.com/database/201212/176775.html MYSQL入門學習之十一:觸發器的基本操作 http://www.BkJia.com/database/201212/176781.html MYSQL入門學習之十二:存儲過程的基本操作 http://www.BkJia.com/database/201212/177380.html 一、自定義函數(UDF)的特性和功能 www.2cto.com 函數能分返回字符串,整數或實數; 可以定義一次作用於一行的簡單函數,或作用於多行的組的集合函數; 二、基本操作 1、創建自定義函數 CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} BEGIN //函數實現的語句 END; aggregate 指定創建的函數是普通的自定義函數,還是AGGREGATE函數。 function_name 是用在SQL聲明中以備調用的函數名字。 RETURNS 子句說明函數返回值的類型。 每次服務器啟動的時候會重新加載所有有效函數,除非使用--skip-grant-tables參數啟動mysqld。在這種情況下, 將跳過UDF的初始化,UDF不可用。 一個AGGREGATE函數就像一個MySQL固有的集合(總和)函數一樣起作用,比如,SUM或COUNT()函數。要使得AGGREGATE 起作用,mysql.func表必須包括一個type列。如果mysql.func表沒有這一 列,則應該運行mysql_fix_privilege_tables腳本來創建此列。 示例: [sql] mysql> delimiter // mysql> create function fun_add_rand( -> in_int int -> ) -> RETURNS int -> BEGIN -> declare i_rand int; -> declare i_return int; -> -> set i_rand=floor(rand()*100); -> set i_return = in_int + i_rand; -> -> return i_return; -> END; -> // mysql> delimiter ; 2、使用自定義函數 示例: [sql] mysql> select id from test_inn; +------+ | id | +------+ | 1 | | 1 | | 1 | | 1 | +------+ mysql> select fun_add_rand(id) from test_inn; +------------------+ | fun_add_rand(id) | +------------------+ | 91 | | 34 | | 93 | | 66 | +------------------+ 3、刪除自定義函數 DROP FUNCTION [ IF EXISTS ] function_name; 示例: [sql] mysql> drop function if exists fun_add_rand; 4、查看自定義函數創建信息 SHOW CREATE FUNTION function_name; 示例: [sql] mysql> show create function fun_add_rand; +--------------+----------+-----------------------------------------------------------+----------------------+----------------------+--------------------+ | Function | sql_mode | Create Function | character_set_client | collation_connection | Database Collation | +--------------+----------+-----------------------------------------------------------+----------------------+----------------------+--------------------+ | fun_add_rand | | CREATE DEFINER=`root`@`localhost` FUNCTION `fun_add_rand`( in_int int ) RETURNS int(11) BEGIN declare i_rand int; declare i_return int; set i_rand=floor(rand()*100); set i_return = in_int + i_rand; return i_return; END | latin1 | latin1_swedish_ci | latin1_swedish_ci | +--------------+----------+-----------------------------------------------------------+----------------------+----------------------+--------------------+ 5、查看自定義函數狀態 SHOW FUNCTION STATUS [ LIKE '' ]; 示例: [sql] mysql> show function status like 'fun%'; +------+--------------+----------+----------------+---------------------+---------------------+---------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | +------+--------------+----------+----------------+---------------------+---------------------+---------------+ | test | fun_add_rand | FUNCTION | root@localhost | 2012-12-18 20:08:50 | 2012-12-18 20:08:50 | DEFINER | +------+--------------+----------+----------------+---------------------+---------------------+---------------+