京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4855|回复: 0

MySQL之存储函数详细介绍

[复制链接]

27

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2022-1-10 20:34:48 | 显示全部楼层 |阅读模式 来自 中国
目录" L7 L+ I( l5 z9 c" w1 \

# G# L5 K& _3 |) G5 t1 d, x
    ! p2 ^3 x9 X/ q2 {7 V( ^; k# \
  • 1、创建存储函数
    3 b" H" r) F: _/ w: Q, z9 X* Y# W
  • 2 、调用存储函数9 ?6 V3 |) e0 l* K" t) q
  • 3、删除存储函数# L. s( H, O+ h1 t% b; M1 ^9 A" P
  • 4、查看存储过程
    ) v0 B9 S, h  q* U( a7 Z7 n: j
  • 5、修改存储函数
    % p" Q1 k) X  [) H
  • 6、对比存储函数和存储过程# T" x5 k. A' z$ I) |
  • 7、练习题加强
    * Y! T- f  N" w0 q7 E

1 v. g4 E7 i% f- P1、创建存储函数
8 A  h% h( i" N0 v5 B
. O3 `& x8 K* \语法格式:
  1. CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回值类型BEGIN        函数体   #函数体中肯定有 RETURN 语句END
复制代码
说明:" ?; j( Y) K4 f  a4 o# h
参数列表:& v9 G4 ?0 \" u. t- K
FUNCTION中总是默认为IN参数  k8 V4 Q/ O+ }- W% e
RETURNS 后的语句表示函数返回数据的类型;
1 [/ j) e6 {/ m  }RETURNS子句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。
5 B. U( ~. f! x4 r; C* P函数体也可以用BEGIN…END来表示SQL代码的开始和结束。5 |. x+ N% ^5 S: f  D) W. z8 Q
如果函数体只有一条语句,也可以省略BEGIN…END。
; B* W, y! K; w# `
0 `1 o9 K; f2 ^: E/ U( w2 、调用存储函数
, ?2 J  A3 ]$ k6 P3 _4 T5 W8 \: y, O' _9 P+ U
在MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与MySQL内部函数是一个性质的。区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的。
  1. SELECT 函数名(实参列表)
复制代码
3、删除存储函数
: [3 {5 K3 X8 `3 B% o* J$ z! I0 G8 c  a8 E4 M4 x& x
语法结构:
  1. DROP FUNCTION [IF EXISTS] 存储函数名
复制代码
4、查看存储过程% I; n- ?/ ^8 {6 p* |. n% [

8 J' N& g6 _1 Q1. 使用SHOW CREATE语句查看存储过程和函数的创建信息
* X/ f: _' [: e2 u0 g8 n+ a语法结构:
  1. SHOW CREATE FUNCTION 存储函数名
复制代码
2. 使用SHOW STATUS语句查看存储函数的状态信息
2 _5 V+ ~2 C6 O0 m. R, z1 U% s语法结构:
  1. SHOW FUNCTION STATUS [LIKE 'pattern']
复制代码
这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。
" _+ y/ b" Z; O2 ~3 p' |[LIKE 'pattern']匹配存储函数的名称,可以省略。当省略不写时,会列出MySQL数据库中存在的所有存储函数的信息。  }2 D5 ?, |. a
举例:
  1. #查询名称以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: utf8mb4collation_connection: utf8mb4_general_ci  Database Collation: utf8mb4_general_ci
复制代码
3. 从information_schema.Routines表中查看存储函数的信息
( J; ]( O0 q* e9 \4 n3 Y% uMySQL中存储函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储函数的信息。
) v! L5 o; d: I5 l. j, w& H: b语法结构:
  1. SELECT * FROM information_schema.RoutinesWHERE ROUTINE_NAME='存储函数名' [AND ROUTINE_TYPE = 'FUNCTION '];
复制代码
说明: 如果在MySQL数据库中存在存储过程和函数名称相同的情况,最好指定ROUTINE_TYPE查询条件来指明查询的是存储过程还是函数。& L/ z. P" J' o4 M# R8 Y( L  s: f5 D3 r

9 X& _8 {& i5 t" B% D$ c5、修改存储函数
6 E4 @4 _  i6 N1 {- d
3 `, W/ }& ?, U/ g, e修改存储函数,不影响存储函数功能,只是修改相关特性。使用ALTER语句实现。
  1. ALTER FUNCTION 存储函数名;
复制代码
6、对比存储函数和存储过程
/ K9 J$ S1 U& o' p  I( L8 Q2 @! f; X, O+ h5 y- X$ h1 m
                        关键字            调用语法            返回值            应用场景                                    存储过程            PROCEDURE            CALL 存储过程()            理解为有0个或多个            一般用于更新                            存储函数            FUNCTION            SELECT 函数()            只能是一个            一般用于查询结果为一个值并返回时        此外,存储函数可以放在查询语句中使用,存储过程不行。反之,存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。3 p3 d: Q) [9 C( [" T4 r( M# ?6 i

$ H- H% |- E% f. {! n9 \7、练习题加强
4 d  d( T3 ]! l* T. M
  1. #前提准备CREATE TABLE employeesASSELECT * FROM atguigudb.`employees`; CREATE TABLE departments ASSELECT * FROM atguigudb.`departments`;
复制代码
  1. #1. 创建函数get_count(),返回公司的员工个数 #有参有返回 SET GLOBAL log_bin_trust_function_creators = 1;DELIMITER $CREATE FUNCTION get_count()RETURNS INTBEGIN        RETURN (SELECT COUNT(*) FROM employees);END $DELIMITER ;
复制代码
注意:
* h5 K; `& i# @8 r* ]自己在创建存储函数中报错“you might want to use the less safe log_bin_trust_function_creators variable”,然后查看笔记发现解决此问题的一种方式就是执行SET GLOBAL log_bin_trust_function_creators = 1;SQL语句
  1. #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、知道存储函数与存储过程的相同和不同点
, k& U" H9 J3 f2 S
到此这篇关于MySQL之存储函数详细介绍的文章就介绍到这了,更多相关MySQL存储函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2 t4 ^2 p# W  g/ ]' ?$ k1 q0 u' u. g7 E
来源:http://www.jb51.net/article/232502.htm# i4 C: j: K( R  w0 a8 F# E7 f, @
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-3-25 10:57 , Processed in 0.038090 second(s), 23 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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