用戶自定義函數(user-defined function,UDF)是一種對MySQL數據庫擴展的途徑,其用法與內置函數相同。數據庫
1)參數:能夠有零個或多個。函數
2)返回值:只能有一個返回值。.net
使用自定義函數的注意事項get
1)全部函數都有返回值,但不必定都有參數。it
2)函數的參數與返回值之間沒有必然的內在聯繫。io
3)函數能夠返回任意類型的值,一樣能夠接收這些類型的參數。function
建立自定義函數的語法結構:class
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body;test
1)函數體由合法的SQL語句構成。擴展
2)函數體能夠是簡單的SELECT或INSERT語句。
3)函數體若是爲複合結構則使用BRGIN...END語句。
4)複合結構能夠包含聲明,循環,控制結構。
實例:
查看當前日期時間和格式化當前時間
SELECT NOW();
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H點:%i分:%s秒');
對於習慣使用日期時間的來講,咱們並不習慣上面的第一個,第二個格式化後的時間咱們比較認同。每次都去格
式化日期時間會比較麻煩,所以咱們考慮把這個過程自定義爲一個函數。
將上面的過程封裝爲一個函數
CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H
點:%i分:%s秒');
調用函數
SELECT f1();
自定義一個求兩個數的平均數的函數,要求結果保留兩位小數。
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS FLOAT(10,2)
UNSIGNED RETURN (num1+num2)/2;
調用函數
SELECT f2(10,15);
自定義一個返回最後插入數據表的記錄而且返回最後一個插入的ID號的函數
USE t1;
SELECT * FROM test;
CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNED BEGIN INSERT
test(username) VALUES(username); RETURN LAST_INSERT_ID(); END;
上面報錯的緣由是MySQL語句結束符號報錯,咱們日常通常的MySQL語句都是以;結束,可是複合結構中包括插
入語句,查詢語句等子SQL語句,而每一個語句都會以;結束,所以MySQL數據庫的客戶端只會識別第一個;號,後面的
內容再也不讀取,所以形成語句出錯。
咱們作出如下修改:
修改語句的結束符號
DELIMITER //
建立自定義函數
CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNED BEGIN INSERT
test(username) VALUES(username); RETURN LAST_INSERT_ID(); END//
DELIMITER ;
調用函數
SELECT adduser('Lee');
SELECT * FROM test;
自定義函數的查找
SHOW FUNCTION STATUS\G;
刪除函數的語法結構:
DROP FUNCTION [IF EXISTS] function_name;