首页 技术 正文
技术 2022年11月9日
0 收藏 575 点赞 4,082 浏览 1783 个字

学习sql的存储过程,笔记总结如下:

MySQL默认将分号,即“;”作为语句的分隔符。如果是这样的话,则一个存储过程将很难正常创建,因为它的BEGIN和END之间可以是任意数量的SQL语句,而每条SQL语句都以分号结束。所以,在创建存储过程时,必须重新定义分隔符。在创建完存储过程后,必须重新设置回原来的分隔符“;”。

1. 创建普通存储过程的基本格式

-- 创建存储过程
DELIMITER $ -- 声明存储过程的结束符
create procedure pro_test()
begin
-- 可以写多个sql
select * from admin where id = 1;
select * from user limit 5;
end $

2. 调用和删除存储过程

-- 调用存储过程
call pro_test();-- 删除存储过程
drop procedure pro_test; -- 注意:不是pro_test()

3. 存储过程的参数说明

IN:表示参数从外部传入到存储过程内部使用

OUT:表示参数从过程里边把数据保存到变量中,交给外部使用,所有传入的必须是变量。如果说传入的out变量本身在外部有数据,那么在进入过程之后,第一件事就是被清空,设为null

INOUT:数据可以从外部传入到过程内部使用,同事内部操作之后,又会将数据返回给外部。

4. 创建带有输入参数的存储过程

delimiter $
create procedure pro_find(IN aid int)
begin
select * from admin where id = aid;
end $-- 调用
call pro_find(3);

5. 创建带有输出参数的存储过程

delimiter $
create procedure pro_testout(out str varchar(20))
begin
set str = "test out";
end $

-- 调用
call pro_testout(@word);

-- 查看变量值
select @word;

6. 创建带有输入输出参数的存储过程

delimiter $
create procedure pro_testinout(inout n int)
begin
select n ;
set n = 500;
end $-- 调用
set @n = 10;
call pro_testinout($n);-- 查看
select $n

7. 创建带有条件判断的存储过程

delimiter $
create procedure pro_testif(in num int, out str varchar(20))
begin
if num = 1 then
set str = '周一';
elseif num =2 then
set str = '';
elseif num = 3 then
set str = '';
else
set str = '';
end if;
end $call pro_testif(5, @str);select @str;

8. 创建带有循环功能的存储过程

delimiter $
create procedure pro_testwhile(in num int, out result int)
begin
declare i int default 1;
declare vsum int default 0;
while i <= num do
set vsum = vsum + i;
set i = i + 1;
end while;
set result = vsum;
end $call pro_testwhile(50, @result);select @result;

9. 使用查询结果赋值给变量(into)

delimiter $
create PROCEDURE pro_find(in aid int, out uname varchar(20))
begin
select username into uname from staff where id = aid;
end $-- 调用
call pro_find(2, @name);select @name;

10. 删除存储过程

drop procedure pro_find;

11. 在thinkphp3中调用存储过程

query()执行的是查询(select)的SQL语句。

execute()执行的是插入(insert)和修改(update)的SQL语句。execute()方法将返回影响的记录数。

对于存储过程中,只有set语句时,需要使用M() -> execute($sql)来调用存储过程。

如果存储过程中,包含select语句是,可以使用execute或者query均可。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297