学习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均可。

MySql存储过程的创建与使用及在thinkphp中如何调用笔记的更多相关文章

  1. MySQL存储过程_创建-调用

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的"脚本" 创建存储过程 调用存储过程 存储过程体 语句块标签 存储过程的参数 in:向过程里传参 out:过程向 ...

  2. MySQL存储过程的创建及调用

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 1.创建存储过程 2.调用存储过程 3.存储过程体 4.语句块标签 存储过程的参数 1.in:向过程里传参 2.out:过 ...

  3. mysql存储过程的创建和调用

    描述:存储过程就是具有名字的一段代码,用来完成一个特定的功能.创建的存储过程保存在数据库的数据词典中. --创建一个名为GreetWorld的存储过程,拼接两个值 CREATE PROCEDURE G ...

  4. MYSQL中存储过程的创建,调用及语法

    MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...

  5. 【转】图解MySql命令行创建存储过程

    一 操作实例 首先登录mysql: 使用source命令,从命令行执行sql脚本,创建表: 创建第一个存储过程: 事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";&q ...

  6. MySQL存储过程(转)

    一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...

  7. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. Mysql 存储过程基本语法

    delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...

  9. Mysql存储过程总结

    1.     关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...

随机推荐

  1. node和gulp版本的坑

    现在node版本最新的稳定版在14+ 然后我在接手项目的时候使用gulp打包,怎么也打包不了,这个问题纠结了挺久,然后百度了下,发现版本的问题 node 12+ 以上的版本不兼容 gulp 3的版本 ...

  2. 关于JAVA的FlowLayout流动布局的换行问题--图形界面

    我在网上寻找Java流动布局换行的方法,看了好久,也没有找到满意的答案. FlowLayout是流式布局,所以如果需要让换行有意义,就得锁定窗口的大小,否则随着窗口的伸缩,布局将被彻底打乱. 网上的方 ...

  3. 【逆向&编程实战】Metasploit安卓载荷运行流程分析_复现meterpreter模块接管shell

    /QQ:3496925334 作者:MG193.7 CNBLOG博客号:ALDYS4 未经许可,禁止转载/ 关于metasploit的安卓模块,前几次的博客我已经写了相应的分析和工具 [Android ...

  4. (鸡汤文)这一次我终于搞懂了 JavaScript 定时器的 this 指向!

    开篇语 忽然有一种感觉,每次学习一个知识点就像是谈一场恋爱:从初次邂逅,到彼此了解,一切都那么的符合恋爱的过程! 如果这个知识点再有点"调皮"的话,那简直是让人欲仙欲死而又不可自拔 ...

  5. 使用mockjs模拟分页请求

    首先安装mockjs npm install mockjs --save-dev 创建mock.js //mock.js const Mock = require("mockjs" ...

  6. ES6中的Generator函数

    今天小编发现一个es6中的新概念,同时也接触到了一个新关键字yeild,下面我就简单和大家聊聊es6中的generator函数.大家还可以关注我的微信公众号,蜗牛全栈. 一.函数声明:在functio ...

  7. SpringCloud Alibaba实战(9:Hystrix容错保护)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经使用OpenFeign完成了服务间的调用.想一下,假如我们一个服务链 ...

  8. hdu1233 最小生成树Prim算法和Kruskal算法

    Prim算法 时间复杂度:O(\(N^2\),N为结点数) 说明:先任意找一个点标记,然后每次找一条最短的两端分别为标记和未标记的边加进来,再把未标记的点标记上.即每次加入一条合法的最短的边,每次扩展 ...

  9. 使用jsonp实现跨源请求

    jsonp 该技术用来实现跨源请求,即向协议.域名.端口号不同的服务器发送请求 通过使用 script 标签的 src 向服务器发送GET请求http://xxx/xxx?callback=callb ...

  10. 与KubernetesAPI服务器交互

    在介绍过的Downward API提供了一种简单的方式,将pod和容器的元数据传递给在它们内部运行的进程.但这种方式其实仅仅可以暴露一个pod自身的元数据,而且只可以暴露部分元数据.某些情况下,应用需 ...