MySQL之運算符與函數、自定義函數

 一自定義函數簡介

        (1)自定義函數定義

        用戶自定義函數(user-defined function,UDF)是一種對MySQL數據庫擴展的途徑,其用法與內置函數相同。數據庫

        (2)自定義函數的兩個必要條件

        1)參數:能夠有零個或多個。函數

        2)返回值:只能有一個返回值。.net

       使用自定義函數的注意事項get

       1)全部函數都有返回值,但不必定都有參數。it

       2)函數的參數與返回值之間沒有必然的內在聯繫。io

       3)函數能夠返回任意類型的值,一樣能夠接收這些類型的參數。function

       (3)建立自定義函數

       建立自定義函數的語法結構:class

       CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body;test

       (4)函數體

       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;

相關文章
相關標籤/搜索