热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql之存储过程全面解析

1.什么是存储过程存储过程和函数是事先经过编译并存储在数据库中的一些sql语句,调用存储过程可以简化我们的开发。存储过程和函数的区别在于,函数是有返回值的,存储过程是没有返回ࠆ
1.什么是存储过程

存储过程和函数是事先经过编译并存储在数据库中的一些sql语句,调用存储过程可以简化我们的开发。存储过程和函数的区别在于,函数是有返回值的,存储过程是没有返回值的。

2.存储过程的语法

//创建存储过程
delimiter$
create procedure p1()
begin
语句集合
end$
查看存储过程:

show procedure status$

调用存储过程:

call p1()$

3.存储过程中的变量,表达式,控制语句

变量定义:

格式 declare 变量名 变量类型 [default 默认值]
变量赋值:

set 变量名:=变量名+10;

控制语句:

if 条件 then

语句

else

语句

end if;

例子:

delimiter$
create procedure p1()
begin
declare num1 int default 20;
if num1>10 then
set num1:=num1+1;
else
set num1:=num1+10;
end if;
select * from goods where num =num1;
end$
4.存储过程之参数传递

例子:条件查询

create procedure p2(in num1 int,in name varchar(20))
begin
if num1 is not null then
if name is not null then
select * from goods where num=num1 and name=name;
else
select * from goods where num=num1;
end if;
else
if name is not null then
select * from goods where name=name;
else
select * from goods;
end if;
end if;
end$
call p3(9,'dog')$
结果:


5.存储过程之循环条件

类似于java中的while语句

create procedure p3()
begin
declare total int default 0;
declare num int default 0;
while num<=10 do
set total:=total+num;
set num:=num+1;
end while;
select total;
end$
结果:



6.存储过程之输出参数

完成了之前的数字累加功能的输出:

delimiter$
create procedure p3(in n int,out total int)
begin
declare num int default 0;
set total :=0;
while num<=n do
set total:=total+num;
set num:=num+1;
end while;
end$

调用存储过程:

call p3(10,@total)$
打印结果:

select @total$

结果:



7.存储过程之输入输出参数

create procedure p4(inout num int)
begin
set num:=num+20;
end$
设置参数变量,调用存储过程:

set @currentNum =10$
call p4(@currentNum)$
由于输入和输出都是变量,所以要先设置参数变量再传值,不可以直接传值。

打印结果:

select @currentNum$
结果:


8.存储过程之case语句

类似于java中的switch。。。case。。default语句

delimiter$
create procedure p5(in pos int)
begin
case pos
when 1 then select 'still flying';
when 2 then select 'fall in the sea';
when 3 then select 'in the island';
else select 'I dont know';
end case;
end$
结果:


9.存储过程之repeat语句

类似于java中的do。。。while()语句

create procedure p6()
begin
declare i int default 1;
repeat
select i;
set i :=i+1;
until i>4 end repeat;
end$
结果:


10.存储过程之游标

在存储过程或者函数中,可以使用游标对结果集进行循环的处理,其中光标的使用包括声明declare、打开OPEN、取值FETCH和关闭CLOSE。

create procedure p6()
begin
declare r_gid int;
declare r_name varchar(20);
declare r_num int;
declare getgoods cursor for select gid,name,num from goods;
open getgoods;
fetch getgoods into r_gid,r_name,r_num;
select r_name,r_num;
close getgoods;
end$
结果:








推荐阅读
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • scrapy 采集入为库 mysql 数据库,只更新一个字段 提示这个语法错误?
    就是查询有没有这个字,如果查到这个字就更新这个字的bsmc字段表是news_topic插入代码如下: ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • PHP操作MySql数据库_PHP教程:链接数据库$conn@mysql_connect(localhost,root,88888888)ordie(链接错误);解决中文乱码mys ... [详细]
  • 图解 Google V8 # 19 :异步编程(二):V8 是如何实现 async/await 的?
    说明图解GoogleV8学习笔记前端异步编程的方案史1、什么是回调地狱?如果在代码中过多地使用异步回调函数,会将整个代码逻辑打乱,从 ... [详细]
author-avatar
yema狂想曲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有