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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236415.html
標籤:其他
下一篇:mysql分組查詢
