MySQL之存储过程和函数的示例分析

  介绍

这篇文章将为大家详细讲解有关MySQL之存储过程和函数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


<强>一、变量

<强>系统变量

系统变量分为<代码>全局变量和<代码>会话变量> <李>

全局变量作用域:服务器每次启动将为所有的全局变量初始化,不能跨重启。

<李>

会话变量作用域:仅针对当前会话有效。

【全局变量】,   作用域:服务器每次启动将为所有的全局变量初始化,不能跨重启#,1。查看所有的全局变量SHOW  GLOBAL 变量;#,2。查看部分全局变量SHOW  GLOBAL  VARIABLES  LIKE  & # 39; %字符% & # 39;;#,3。查看某个全局变量的值SELECT  @@global.autocommit; #,查看是否自动提交SELECT  @@global.tx_isolation; #,查看隔离级别# 4。为某个指定的全局变量赋值SET  @@global.autocommit=0;【会话变量】   作用域:仅针对当前会话有效。#,1。查看所有的会话变量SHOW  SESSION 变量;SHOW 变量;#默认省略会话#,2。查看部分会话变量SHOW  SESSION  VARIABLES  LIKE  & # 39; %字符% & # 39;;#,3。查看某个会话变量的值SELECT  @@tx_isolation; SELECT  @@session.tx_isolation; #, 4。为某个指定的会话变量赋值SET  @@session.autocommit=0;

<>强自定义变量

自定义变量分为<代码>用户变量和<代码>局部变量> 对比作用域定义和使用位置语法用户变量当前会话会话中的任何地方必须加@符号,不用限定类型局部变量开始…结束中只能在开始…结束中,且为第一句话一般不加@符号,需要限定类型【用户变量】   作用域:针对当前会话有效,和会话变量的作用域相同#,声明并初始化#,下面三种方式都可以SET  @count=1,, #, SET  @count:=1, #, select  @count:=1, #,赋值select  COUNT (*), INTO  @count 得到员工;#,查看用户变量select  @count;【局部变量】   作用域:仅在定义的begin end中有效,应用在begin end中的第一句话# 声明DECLARE 变量名 类型;# declare 变量名 类型 default 值;# 赋值SET 局部变量名=值;# 或set 局部变量名:=值;# select @局部变量名:=值# 使用SELECT 局部变量名;【案例】# 案例:声明两个变量并赋初值,求和,打印# 用户变量SET @m=1;SET @n=2;SET @sum=@m+@n;SELECT @sum;# 局部变量[只能在begin...end中运行]DECLARE m INT DEFAULT 1;DECLARE n INT DEFAULT 2;DECLARE SUM INT;SET SUM=m+n;SELECT SUM;

二、存储过程

定义:事先经过编译并存储在数据库中的一组sql语句的集合。

存储过程的优点:①提高代码重用性 ②减少编译与连接次数 ③提高效率。

创建语法:

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的sql语句);
END 结束符

调用语法:
CALL 存储过程名(实参列表)

删除语法:
DROP PROCEDURE 存储过程名;

查看语法:
SHOW CREATE PROCEDURE 存储过程名;

存储过程的参数别聊提供了3种参数:

  • IN:需要输入,需要调用方传入值。

  • OUT:可以输出,可以作为返回值。

  • INOUT:可以输入和输出,既需要入参又需要返回值。

注意:

  • 如果存储过程只有一句话,可以省略BEGIN END。

  • 存储过程体中的每条sql语句的结尾要求必须加分号。

  • 存储过程的结尾可以使用delimiter重写结束标志,DELIMITER 结束标记。

【空参存储过程】# 案例:向admin表中插入5条记录# 重置结尾符为$DELIMITER $# 创建存储过程CREATE PROCEDURE myp1()BEGIN
  ,,INSERT  INTO 管理(用户名、密码)
  ,,值(& # 39;join1& # 39; & # 39; 000 & # 39;), (& # 39; join2& # 39; & # 39; 000 & # 39;), (& # 39; join3& # 39; & # 39; 000 & # 39;), (& # 39; join4& # 39; & # 39; 000 & # 39;), (& # 39; join5& # 39; & # 39; 000 & # 39;);最终获得$ #,调用存储过程CALL  myp1()美元
  
  
  
  【带在模式的存储过程】#,案例:创建存储过程,实现根据女神名查询对应的男朋友信息CREATE  PROCEDURE  myp2 (beautyName 拷贝;VARCHAR(20))开始
  SELECT  bo。*
  得到boys  bo right  JOIN  beauty  b 
  提醒bo.id=b。boyfriend_id where  b.name=beautyName;结束CALL 美元;myp2(& # 39;柳岩& # 39;)$ #,案例:创建存储过程,查看用户是否登录成功CREATE  PROCEDURE  myp3 (username 拷贝;VARCHAR(10),拷贝PASSWORD  VARCHAR(10))开始
  DECLARE  result  INT  DEFAULT  0; #,声明并初始化
  
  SELECT  COUNT (*), INTO 结果#,赋值
  得到管理员where 管理。用户名以及密码用户名==密码;
  
  SELECT 如果(因此,& # 39;成功& # 39;,& # 39;失败& # 39;);#打印变量结束$ #,调用CALL  myp3(& # 39;约翰# 39;& # 39;& # 39;8888)美元
  
  
  
  【带出模式的存储过程】#,案例:根据女神名,返回对应的男神名CREATE  PROCEDURE  myp4 (beautyName 拷贝;VARCHAR (20), OUT  boyName  VARCHAR(20))开始
  SELECT  bo.boyName  INTO  boyName  #赋值
  得到boys  bo inner  JOIN  beauty  b提醒b.boyfriend_id=bo。id where  b.name=beautyName;最终获得CALL 美元;myp4(& # 39;热巴& # 39;,@bName)美元,#,不定义,直接使用用户变量填充#,调用SELECT  @bName $ #,案例:根据女神名,返回对应的男神名和男神魅力值CREATE  PROCEDURE  myp5 (beautyName 拷贝;VARCHAR (20), OUT  boyName  VARCHAR (20), OUT  userCP  INT)开始
  SELECT  bo.boyName bo.userCP  INTO  boyName userCP , #赋值
  得到boys  bo inner  JOIN  beauty  b提醒b.boyfriend_id=bo。null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

MySQL之存储过程和函数的示例分析