设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10912|回复: 0

MySQL之存储函数详细介绍

[复制链接]

76

主题

0

回帖

240

积分

中级会员

Rank: 3Rank: 3

积分
240
发表于 2022-3-26 11:01:00 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
目录


1、创建存储函数

语法格式:
  1. CREATE FUNCTION 函数名(参数名 参数类型,...)
  2. RETURNS 返回值类型
  3. BEGIN
  4.         函数体   #函数体中肯定有 RETURN 语句
  5. END
复制代码
说明:
参数列表:
FUNCTION中总是
  1. 默认为IN参数
复制代码
  1. RETURNS
复制代码
后的语句表示函数返回数据的类型;
RETURNS子句只能对FUNCTION做指定,对函数而言这是
  1. 强制
复制代码
的。它用来指定函数的返回类型,而且函数体必须包含一个
  1. RETURN value
复制代码
语句。
函数体也可以用
  1. BEGIN…END
复制代码
来表示SQL代码的开始和结束。
如果函数体只有一条语句,也
  1. 可以省略BEGIN…END
复制代码


2 、调用存储函数

在MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与MySQL内部函数是一个性质的。区别在于,存储函数是
  1. 用户自己定义
复制代码
的,而内部函数是MySQL的
  1. 开发者定义
复制代码
的。
  1. SELECT 函数名(实参列表)
复制代码
3、删除存储函数

语法结构:
  1. DROP FUNCTION [IF EXISTS] 存储函数名
复制代码
4、查看存储过程

1. 使用SHOW CREATE语句查看存储过程和函数的创建信息
语法结构:
  1. SHOW CREATE FUNCTION 存储函数名
复制代码
2. 使用SHOW STATUS语句查看存储函数的状态信息
语法结构:
  1. SHOW FUNCTION STATUS [LIKE 'pattern']
复制代码
这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。
  1. [LIKE 'pattern']
复制代码
匹配存储函数的名称,可以省略。当省略不写时,会列出MySQL数据库中存在的所有存储函数的信息。
举例:
  1. #查询名称以select开头的存储函数
  2. mysql> SHOW FUNCTION STATUS LIKE 'SELECT%';
  3. *************************** 1. row ***************************
  4.                   Db: test_db
  5.                 Name: SelectAllData
  6.                 Type: FUNCTION
  7.              Definer: root@localhost
  8.             Modified: 2021-10-16 15:55:07
  9.              Created: 2021-10-16 15:55:07
  10.        Security_type: DEFINER
  11.              Comment:
  12. character_set_client: utf8mb4
  13. collation_connection: utf8mb4_general_ci
  14.   Database Collation: utf8mb4_general_ci
复制代码
3. 从information_schema.Routines表中查看存储函数的信息
MySQL中存储函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储函数的信息。
语法结构:
  1. SELECT * FROM information_schema.Routines
  2. WHERE ROUTINE_NAME='存储函数名' [AND ROUTINE_TYPE = 'FUNCTION '];
复制代码
说明: 如果在MySQL数据库中
  1. 存在存储过程和函数名称相同的情况
复制代码
,最好指定
  1. ROUTINE_TYPE
复制代码
查询条件来指明查询的是存储过程还是函数。

5、修改存储函数

修改存储函数,不影响存储函数功能,只是修改相关特性。使用ALTER语句实现。
  1. ALTER FUNCTION 存储函数名;
复制代码
6、对比存储函数和存储过程

                        关键字            调用语法            返回值            应用场景                                    存储过程            PROCEDURE            CALL 存储过程()            理解为有0个或多个            一般用于更新                            存储函数            FUNCTION            SELECT 函数()            只能是一个            一般用于查询结果为一个值并返回时        此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

7、练习题加强
  1. #前提准备
  2. CREATE TABLE employees
  3. AS
  4. SELECT * FROM atguigudb.`employees`;

  5. CREATE TABLE
  6. departments AS
  7. SELECT * FROM atguigudb.`departments`;
复制代码
  1. #1. 创建函数get_count(),返回公司的员工个数 #有参有返回
  2. SET GLOBAL log_bin_trust_function_creators = 1;

  3. DELIMITER $
  4. CREATE FUNCTION get_count()
  5. RETURNS INT
  6. BEGIN
  7.         RETURN (SELECT COUNT(*) FROM employees);
  8. END $
  9. DELIMITER ;
复制代码
注意:
自己在创建存储函数中报错“
  1. you might want to use the less safe log_bin_trust_function_creators variable
复制代码
”,然后查看笔记发现解决此问题的一种方式就是执行
  1. SET GLOBAL log_bin_trust_function_creators = 1;
复制代码
SQL语句
  1. #2. 创建函数ename_salary(),根据员工id,返回它的工资
  2. #查询表结构来看要返回数据的类型
  3. DESC employees;

  4. DELIMITER $
  5. CREATE FUNCTION ename_salary(id INT)
  6. RETURNS DOUBLE(8,2)
  7. BEGIN
  8.         RETURN (SELECT salary FROM employees WHERE employee_id = id);
  9. END $
  10. DELIMITER ;

  11. #查询结果
  12. SELECT ename_salary(100);
复制代码
  1. 爱在结尾:自己应该学会:1、会使用创建存储函数的基本语法 ; 2、学会调用存储函数; 3、知道存储函数与存储过程的相同和不同点
复制代码
到此这篇关于MySQL之存储函数详细介绍的文章就介绍到这了,更多相关MySQL存储函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
                                                        
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表