MySQL之存储函数详细介绍

1、创建存储函数

语法格式:

create function 函数名(参数名 参数类型,...) 
returns 返回值类型
begin
	函数体   #函数体中肯定有 return 语句
end

说明:

参数列表:

function中总是默认为in参数

returns 后的语句表示函数返回数据的类型;

returns子句只能对function做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个return value语句。

函数体也可以用begin…end来表示sql代码的开始和结束。

如果函数体只有一条语句,也可以省略begin…end

2 、调用存储函数

在mysql中,存储函数的使用方法与mysql内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与mysql内部函数是一个性质的。区别在于,存储函数是用户自己定义的,而内部函数是mysql的开发者定义的。

select 函数名(实参列表)

3、删除存储函数

语法结构:

drop function [if exists] 存储函数名

4、查看存储过程

1. 使用show create语句查看存储过程和函数的创建信息

语法结构:

show create function 存储函数名

2. 使用show status语句查看存储函数的状态信息

语法结构:

show function status [like 'pattern']

这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。

[like 'pattern']匹配存储函数的名称,可以省略。当省略不写时,会列出mysql数据库中存在的所有存储函数的信息。

举例:

#查询名称以select开头的存储函数
mysql> show function status like 'select%';
*************************** 1. row ***************************
                  db: test_db
                name: selectalldata
                type: function 
             definer: root@localhost
            modified: 2021-10-16 15:55:07
             created: 2021-10-16 15:55:07
       security_type: definer
             comment: 
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  database collation: utf8mb4_general_ci

3. 从information_schema.routines表中查看存储函数的信息

mysql中存储函数的信息存储在information_schema数据库下的routines表中。可以通过查询该表的记录来查询存储函数的信息。

语法结构:

select * from information_schema.routines
where routine_name='存储函数名' [and routine_type = 'function '];

说明: 如果在mysql数据库中存在存储过程和函数名称相同的情况,最好指定routine_type查询条件来指明查询的是存储过程还是函数。

5、修改存储函数

修改存储函数,不影响存储函数功能,只是修改相关特性。使用alter语句实现。

alter function 存储函数名;

6、对比存储函数和存储过程

关键字 调用语法 返回值 应用场景
存储过程 procedure call 存储过程() 理解为有0个或多个 一般用于更新
存储函数 function select 函数() 只能是一个 一般用于查询结果为一个值并返回时

此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

7、练习题加强

#前提准备
create table employees
as
select * from atguigudb.`employees`; 

create table 
departments as
select * from atguigudb.`departments`; 
#1. 创建函数get_count(),返回公司的员工个数 #有参有返回 
set global log_bin_trust_function_creators = 1;

delimiter $
create function get_count()
returns int
begin
	return (select count(*) from employees);
end $
delimiter ;

注意:

自己在创建存储函数中报错“you might want to use the less safe log_bin_trust_function_creators variable”,然后查看笔记发现解决此问题的一种方式就是执行set global log_bin_trust_function_creators = 1;sql语句

#2. 创建函数ename_salary(),根据员工id,返回它的工资 
#查询表结构来看要返回数据的类型
desc employees;

delimiter $
create function ename_salary(id int)
returns double(8,2)
begin
	return (select salary from employees where employee_id = id);
end $
delimiter ;

#查询结果
select ename_salary(100);

爱在结尾:自己应该学会:1、会使用创建存储函数的基本语法 ; 2、学会调用存储函数; 3、知道存储函数与存储过程的相同和不同点

到此这篇关于mysql之存储函数详细介绍的文章就介绍到这了,更多相关mysql存储函数内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐