MySQL学习——操作自定义函数
程序员文章站
2022-04-14 20:44:40
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>
下一篇: 多了个后妈