mysql:高级:存储过程

本文深入探讨了数据库中存储过程和函数的概念、创建、调用、查询及删除方法。介绍了如何利用存储过程和函数简化应用开发,提升数据处理效率。同时,详细讲解了变量、条件判断、循环等控制语句,以及游标、参数传递等高级特性。

存储过程和函数

1、概述

事先经过编译,存储在数据库中的一段SQL语句的集合。调用存储过程和函数可以简化应用开发人员的很多工作。减少数据在数据库和应用服务器之间的传输。对于提高数据的处理的效率是有好处的。

# 函数 有返回值

# 过程 没有返回值

2、创建存储过程

create procedure procedure_name()

    begin

        --- SQL 语句

    end ;

结束符。 example:delimiter &

>> delimiter >>

3、调用存储过程

call pro_name() >>

4、查询存储过程

查询过程列表

select name from mysql.proc where db= 'database_name' >>

查询情况

show procedure status >>

查询定义

show create procedure pro_name >>

↑ 可以加 \G

5、删除存储过程

drop procedure pro_name >>

 

6、语句

1、变量

* declare

通过declare可以定义一个局部变量。作用域begin -- end

* set

为变量赋值

还可以使用select ... into.....赋值

2、if 条件判断

if 

    seif

end if

3、传递参数

 in

 out

 4、case

case 

 when 条件

   then 结果

5、while

满足条件就继续

6、repeat

满足条件退出循环

REPEAT 

 statement_list

 unitl search_condition  # 退出条件

END REPEAT

如果这样运行是会报错的,因为循环是不接分号的。

7、loop

[ begin_label ]: LOOP

statement_list

END LOOP

要想退出就得借助leave语句

8、游标/光标

1、声明游标

declare cursor_name cursor for  select_statement;

2、open 游标

open cursor_name;

3、fetch 游标

fetch cursor_name into var_name [, var_name ]

4、关闭游标

close cursor_name;

 

7、 存储函数

create function function_name(param type ...)

returns type  # 声明一个返回值的类型

begin

 ...

end;

存储函数有返回值

存储过程没有返回值,但是任然可以返回。in out 

其实我创建的时候是报错了,原因是:

这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的         deterministic
2 NO SQL 没有SQl语句,当然也不会修改数据  
3 READS SQL DATA 只是读取数据,当然也不会修改数据   reads sql data
4 MODIFIES SQL DATA 要修改数据    modifies sql data
5 CONTAINS SQL 包含了SQL语句  conditions sql

 

解决方法:1、我运行了这个命令,信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求

SET GLOBAL log_bin_trust_function_creators = 1;

2、你也可以在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个,

CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()
    DETERMINISTIC
BEGIN
 #Routine body goes here...
END;

调用函数的方法:之前调用procedure的时候用的是call(),如果你继续使用,系统就会认为你仍然调用的是存储过程,所以调用函数的话,直接使用select语句就可以了。

 删除存储函数

drop function function_name;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值