MySQL之自定義函式

2021-08-19 07:21:27 字數 2443 閱讀 1438

mysql中已經有很多函式,如時間函式等,但是有時這些函式不能滿足自己的設計需求,此時需要自定義函式,使用者自定義函式(user-defined functuin,udf)是對mysql的擴充套件,其用法和內建函式相同

函式需要具備:引數 返回值

對於函式體中的部分可以是:

1、函式體由合法的sql語句組成

2、函式體可以是簡單的select或者insert語句

3、函式體若為復合結構則使用begin...end語句

4、復合結構可以包含宣告、迴圈、控制結構

知道通過now()函式可以顯示日期和時間,如果想把這個時間表達成:「年月日時分秒」 的形式怎麼辦呢?通過使用格式化函式date_format()

mysql> select date_format(now(),'%y年%m月%d日 %h點:%i分:%s秒');

由於該過程書寫較為麻煩,如果經常使用很不方便,因此將其「製作」成函式

mysql> create function f1() returns varchar(30)

-> return date_format(now(),'%y年:%m月:%d日 %h點:%i分:%s秒');

由於在定義f1()的時候沒有引數,因此呼叫時就可以直接呼叫

mysql> select f1();
帶有乙個以上的引數時,這裡求解兩個數的平均數

mysql> create function f2(num1 smallint unsigned,num2 smallint unsigned)  #函式名

-> returns float(10,2) unsigned #返回值的型別

-> return (num1+num2)/2; #返回值

首先建立乙個資料表test

現在想往資料表中插入記錄,返回值是新插入的記錄的id號

root@localhost test>insert into test values(default,'lj.k');
由於分號是命令的結束,因此這裡需要修改預設的分隔符,否則在輸入分號之後無法返回新插入記錄的id,因此使用命令 

delimiter 分隔符
這樣所有的命令均需要以分隔符來結束

比這將分隔符修改為//,則所有命令均需要以 // 為結束

root@localhost test>create function adduser(username varchar(20))  #建立新增引數名為username的函式adduser

-> returns int unsigned

-> begin

-> insert test(username) values(username);

-> return last_insert_id();

-> end

-> //

這裡因為有兩條語句 insert test(username) values(username)和return last_insert_id()兩條語句要執行,因此需要使用begin...end語句,從而構成聚合體

通過drop function命令進行刪除

MySQL之自定義函式

自定義函式 使用者定義函式 udf 是一種對mysql擴充套件的途徑,其用法與內建函式相同 自定義函式需要兩個必要條件 引數和返回值 函式可以返回任意型別的值,同樣可以接收這些型別的引數,最多1024個引數 1.建立自定義函式 create function function name return...

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql自定義函式命名 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...