MySQL學習——操作自定義函數 摘要:本文主要學習了使用DDL語句操作自定義函數的方法。 瞭解自定義函數 是什麼 自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。 自定義函數與存儲過程的區別 ...
MySQL學習——操作自定義函數
摘要:本文主要學習了使用DDL語句操作自定義函數的方法。
瞭解自定義函數
是什麼
自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。
自定義函數與存儲過程的區別
自定義函數不能擁有輸出參數,這是因為自定義函數自身就是輸出參數;而存儲過程可以擁有輸出參數。
自定義函數中必須包含一條return語句,而這條特殊的SQL語句不允許包含於存儲過程中。
可以直接對自定義函數進行調用而不需要使用call語句,而對存儲過程的調用需要使用call語句。
創建自定義函數
語法
1 create function 函數名([參數]) 2 returns 類型 3 函數主體
說明
1)函數名
指定自定義函數的名稱。註意,自定義函數不能與存儲過程具有相同的名稱。
2)參數
用於指定自定義函數的參數。這裡的參數只有名稱和類型,不能指定關鍵字in、out和inout。
3)類型
用於聲明自定義函數返回值的數據類型。
4)函數主體
自定義函數的主體部分,也稱函數體。所有在存儲過程中使用的SQL語句在自定義函數中同樣適用,包括前面所介紹的局部變數、set語句、流程式控制制語句、游標等。
除此之外,自定義函數體還必須包含一個 return 返回值 語句,用於指定自定義函數的返回值。在 return 返回值 語句中包含select語句時,select語句的返回結果只能是一行且只能有一列值。
實例
創建不帶參數的自定義函數:
1 mysql> create function showTopGrade() 2 -> returns int(10) 3 -> return (select max(grade) from score); 4 Query OK, 0 rows affected (0.00 sec) 5 6 mysql>
創建帶有參數的自定義函數:
1 mysql> create function getStuGrade(stu varchar(45)) 2 -> returns int(10) 3 -> return (select max(grade) from score where student = stu); 4 Query OK, 0 rows affected (0.00 sec) 5 6 mysql>
使用自定義函數
語法
1 select 自定義函數名稱([參數]);
實例
1 mysql> select showTopGrade(); 2 +----------------+ 3 | showTopGrade() | 4 +----------------+ 5 | 95 | 6 +----------------+ 7 1 row in set (0.00 sec) 8 9 mysql>
查看自定義函數
查看所有自定義函數
1 mysql> mysql> show function status; 2 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ 3 | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | 4 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ 5 | demo | getGrade | FUNCTION | root@localhost | 2019-09-07 18:40:17 | 2019-09-07 18:40:17 | DEFINER | | utf8 | utf8_general_ci | gb2312_chinese_ci | 6 | demo | getStuGrade | FUNCTION | root@localhost | 2019-09-10 00:25:54 | 2019-09-10 00:25:54 | DEFINER | | utf8 | utf8_general_ci | gb2312_chinese_ci | 7 | demo | showTopGrade | FUNCTION | root@localhost | 2019-09-10 00:19:40 | 2019-09-10 00:19:40 | DEFINER | | utf8 | utf8_general_ci | gb2312_chinese_ci | 8 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ 9 3 rows in set (0.00 sec) 10 11 mysql>
查看自定義函數的創建語句
1 mysql> mysql> show create function getGrade; 2 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 3 | Function | sql_mode | Create Function | character_set_client | collation_connection | Database Collation | 4 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 5 | getGrade | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `getGrade`() RETURNS int(10) return (select grade from score where id = 12) | utf8 | utf8_general_ci | gb2312_chinese_ci | 6 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 7 1 row in set (0.00 sec) 8 9 mysql>
修改自定義函數
可以通過先刪除自定義函數,然後重新創建自定義函數的方法實現修改的操作。
刪除自定義函數
語法
1 drop function 自定義函數名稱
實例
1 mysql> drop function getGrade; 2 Query OK, 0 rows affected (0.00 sec) 3 4 mysql>