mysql之存储过程和函数

1. 变量

系统变量:

  定义:变量由系统提供,不是用户定义,属于服务器层面

  查看所有变量:SELECT global | session variables;

  

  查看满足条件的部分系统变量:SELECT global | session variables like ‘%char%‘;
  查看某个系统变量:select @@系统变量名 或者 select @@[session]global.系统变量名;如select @@tx_isolation查看事务隔离级别

  

  为变量赋值:set 系统变量名=值

  

系统全局变量(GLOBAL):

# 查看全部的系统全局变量
SELECT GLOBAL VARIABLES;

# 查看部分系统全局变量
SELECT GLOBAL VARIABLES LIKE ‘%char%‘;

# 其他同上方式

  作用域:服务器每次启动将为所有的全局变量赋初值,针对于所有会话有效,但不能跨重启;

会话变量(SESSION):

  作用域:变量仅对于当前会话连接有效。

自定义变量:

  使用步骤:声明、赋值、使用(查看,比较,运算符)

  作用域:针对于当前会话有效。

# 赋值操作符:=或:=
SET @用户变量名=值;
SET @用户变量名:=值;
SElECT @用户变量名:=值;

  

  

局部变量:

  作用域:仅仅在定义它的begin end之间有效

# 声明
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;
# 赋值
SET 局部变量=值
SET 局部变量:=值
# begin与end中根据查询结果赋值
declare v1 int default 0; # 声明并初始化
select count(*) into v1 from table_name ;

2. 存储过程

存储过程类似于python中的函数,完成了一组操作,只对外暴露引用名,隐藏了具体实现细节

定义:一组预先编译好的SQL语句的集合,理解成批处理语句

优点:

   1. 提高了代码的重用性;

   2. 简化了操作;

   3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

创建语法:

create procedure 存储过程名(参数列表)
begin
    存储过程体(一组合法有效的SQL语句)
end

参数模式:在mysql中提供了三组参数模式

IN 该参数可以用作输入,也就是说该参数需要调用方传入值
OUT 该参数可以作为输出,类似python中return之后的返回值
INOUT 该参数即可以作为参数又可以作为参数输出

其他:存储过程体只有一条语句时, begin和end可以省略;否则就需要使用delimiter来重新设置语句结束符

调用存储过程:call 存储过程名(参数)

实例演示:

  1. 无参,向指定表插入数据

  

  2. IN模式

  

  

  3.OUT模式,根据指定name查询其财产并返回

  

  4. INOUT模式,参数既能作为返回值,也能作为接收值,在调用该存储过程的时候,就需要传入已经初始化的两个用户变量来完成。

  

3.函数

和存储过程大致相同,区别在于:

  1. 存储过程可以有0个或者多个返回,适合批量插入,批量更新,

  2. 有且仅有1个返回,适合做处理数据后返回一个结果。

语法格式:

create function 函数名(参数列表) returns 返回类型
begin
    函数体
end

注意:参数列表包含两个部分:参数名及参数类型;函数体中肯定会有return语句,如果没有会报错

调用语法:

select 函数名(参数);

实例:

delimiter $
create function myfun(mid int) returns int
begin
    declare res int default 0;
    select count(*) into res from transaction where id<mid;
    return res;
end$

查看与删除函数

# 查看
show create function myfun;

# 删除
drop function myfun;

4. 流程控制结构

顺序结构:程序从上向下依次执行

分支结构:程序从两条或多条路径选择一条去执行

循环结构:在满足一定条件下,重复执行一段代码

case结构:可以作为独立语句来使用,放在begin end中

#应用一:做等值的布尔判断,类似于switch
#语法:
case 变量或表达式
when 要判断的值 then 返回的值或语句;
when 要判断的值 then 返回的值或语句;
...
else 返回的值或语句;
end case;
# 应用二:做区间判断
case
when 判断的条件表达式1 then 返回的值;
when 判断的条件表达式1 then 返回的值;
...
else 返回的值;
end case;
# 传入mid,与flag(9)作比较
create function myfunc(mid int) returns varchar(20)
begin
    declare flag int default 9;
    declare res varchar(10) default ‘‘;
    case
    when mid>flag then set res=‘mid>flag‘;
    when mid<flag then set res=‘mid<flag‘;
    else set res=‘mid=flag‘;end case;
    return res;
end$

if结构:实现多重分支, 只能用在begin end中

语法:

if 条件1 then 语句1;
elseif 条件2 then 语句2;
.....
[else 语句n;] # 可选
end if;

循环结构:

分类有while、loop、repeat

循环控制:iterate类似于continue、leave类似于break

语法:

# while 【标签】: while 循环条件 do
            循环体;
end  while 【标签】  ;
# loop 死循环

【标签:】loop
        循环体;
end loop 【标签】;
# repeat类似于do while
【标签:】repeat
        循环体
until 结束循环的条件
end repeat 【标签】;

实例演示:

批量插入

delimiter $
create procedure pro_insert(IN count INT)
begin
    declare i int default 0;
    declare last_letter char default ‘‘; #transaction最后一行数据的name值的第一位字符,如‘AAAAAA‘则取‘A‘
    declare max_ascii int default 0; #transaction表的最后一行数据的name值的第一位字符的ASCII码
    select substr(name, 1, 1) into last_letter from transaction where id=(select max(id) from transaction); #为last_letter变量赋值
    set max_ascii=ASCII(last_letter); #为max_ascii赋值
    _insert: while i<count do    # 循环的别名为_insert
                set max_ascii=max_ascii+1;
                set i=i+1;
                insert into transaction values(null, repeat(char(max_ascii), 6), 8000);
    end while _insert;
end$    

 

原文地址:https://www.cnblogs.com/kisun168/p/11326357.html

时间: 2025-01-18 16:45:16

mysql之存储过程和函数的相关文章

mysql导出存储过程或函数

查询数据库中的存储过程和函数方法一:select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'   //存储过程select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION'   //函数方法二:show procedure status; //存储过程show function status;   

Mysql查看存储过程、函数、视图、触发器、表

mysql查看所有存储过程,函数,视图,触发器,表查询数据库中的存储过程和函数 方法一:select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' //存储过程select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION' //函数 方法二:show procedure status; //存储过程s

mysql事务、触发器、视图、存储过程、函数

存储过程: procedure 概念类似于函数,就是把一段代码封装起来, 当要执行这一段代码的时候,可以通过调用该存储过程来实现. 在封装的语句体里面,可以用if/else, case,while等控制结构. 可以进行sql编程. 查看现有的存储过程: Show procedure status 删除存储过程 Drop procedure 存储过程的名字 调用存储过程 Call 存储过程名字(); 第1个存储过程 ,体会"封装sql" 第2个存储过程, 体会"参数"

我的MYSQL学习心得(十) 自定义存储过程和函数

我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习

MySQL视图view/存储过程和函数的使用

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC Semibold"; color: #454545 } p.p3 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px

九、MySQL存储过程和函数

存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理. 9.1.创建存储过程和函数 存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别是CREATE PROCEDURE和CREATE FUNCTION.使用CALL语句来调用存储过程,只能用输出变量返回值.函数可以从语句外调用( 即通过引用函数名),也能返回标量值.存储过程也能调用其他存储过程. 创建存储过程 创建存储过程,需要使用CREATE PROCEDURE语句,基本语法为: CREAT

MySQL导出数据库、数据库表结构、存储过程及函数【用】

一.导出数据库 我的mysql安装目录是D:\Program Files\MySQL\MySQL Server 5.5\bin\,导出文件预计放在D:\sql\ 在mysql的安装目录执行命令: mysqldump -hhostname -uusername -ppassword databasename > d:\sql\databasename.sql 在mysql5.7的时候报出一个警告,但是数据导出成功: 现在换一种方式解决上述问题: 创建一my.cnf文件,我放在与mysqldump.

自定义存储过程和函数

MYSQL的存储过程和函数 MYSQL中创建存储过程和函数分别使用CREATE PROCEDURE和CREATE FUNCTION 使用CALL语句来调用存储过程,存储过程也可以调用其他存储过程 函数可以从语句外调用,能返回标量值 创建存储过程 语法 CREATE PROCEDURE sp_name ([ proc_parameter ]) [ characteristics..] routine_body proc_parameter指定存储过程的参数列表,列表形式如下: [IN|OUT|IN

mysql数据库存储过程学习

1.建立存储过程方式一: mysql中存储过程属于函数一栏中,点击新建函数会有让你选择是存储过程还是函数 接下来是存储过程中设置的参数: IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 OUT 输出参数:该值可在存储过程内部被改变,并可返回 INOUT 输入输出参数:调用时指定,并且可被改变和返回 接下来就在BEGIN和END中填写需要的sql语句,和平时使用的相同 保存后存储在函数下,执行时可以直接运行,查看结果. 注:当没有参数或者只有