mysql存储过程的初步学习及案例示例
存储过程
几个月前小编开始初步接触学习存储过程,当然是跟着大神的视频学习的,在学习的过程中自己也记录了一下笔记,如今整理一下,接下来我将从概念,优缺点以及语法和实际应用几方面为大家详细讲解一下存储过程,如有不对的地方,望留言批评,给予修正。
概念:一组预先编译好的sql语句的集合,理解成批处理语句。
优点:1.提高代码的重用性 2.简化操作 3.减少了我们的编译次数并且减少了服务器的连接次数,提高了效率。
语法:一、创建语法
create procedure 存储过程名称(参数列表)
begin
存储过程体(一组合法的sql语句)
end
注意:1.参数列表包含三部分:参数模式、参数名,参数类型
例如:in stuname varchar(20) ,其中“in”为参数模式,“stuname”为参数名,varchar(20)为参数类型。
这里重点说一下参数模式,参数模式有以下三种:
in该参数可以作为输入,也就是说该参数需要调入方传入值;
out:该参数可以作为输出,也就是该参数可以作为返回值;
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。
2.如果存储过程仅仅只有一句话,begin end可以省略。存储过程体的每条sql语句的结尾要求必须加分号, 存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记 案例:delimiter $
二、调用语法
call 存储过程名(实体参数);
三、简单案例
1.空参列表 案例:插入到persion表中五条记录
delimiter $
create procedure myp1()
begin
insert into persion5(name,sex) values("张三",1),("汤姆",1),("李四",1),("王五",1);
end $
调用语法
call myp1();
2.创建一个in模式的存储过程
案例一:创建存储过程实现,根据姓名查询对应的信息
delimiter $
create procedure myp3(in beautyName varchar(20))
begin
select p.*
from persion5 p
where p.name = beautyName;
end $
调用语法
call myp3('张三')
;
案例二 创建存储过程用来传多个参数 in 模式
delimiter $
create procedure myp4(in inname varchar(20),in insex int)
begin
select if(p.name = inname and p.sex = insex,'查询出了数据','没有查询出数据') as result
from persion5 as p
where p.id = 9;
end $
call myp4('张三',2);
案例三 自己声明参数
delimiter $
create procedure myp5(in inname varchar(20),in insex int)
begin
declare result varchar(20) default '';#声明并初始化
select count(*) into result #赋值
from persion5 as p
where p.name = inname and p.sex = insex;
select result;#使用
end $
call myp5('王五',1);
3.创建一个out模式的存储过程
案例一:根据name ,返回sex
delimiter $
create procedure myp6(in inname varchar(20),in inid int,out outsex varchar(20))
begin
select p.name into outsex
from persion5 as p
where p.name = inname and p.id = inid;
end $
set @outsex = '';
call myp6('李四',3,@outsex);
select @outsex as '结果';
4 创建一个inout模式参数的存储过程
案例!、传入a和b两个值,最终a和b都翻倍并返回
delimiter $
create procedure myp7(inout a int,inout b int)
begin
set a = a*2;
set b = b*2;
end $
set @a=10;#声明一个变量a
set @b=20;#声明一个变量b
call myp7(@a,@b);#将变量a b传入到myp7中,返回的值存入先前声明的变量
SELECT @a,@b;#将变量输出
调用:需要先定义变量,
练习:
一、创建存储过程(略微提高难度)
实现往admin表中插入数据
delimiter $
create procedure test_pro1(in userName varchar(20),in loginPwd varchar(20))
begin
insert into admin(admin.username,admin.password)
VALUES (userName,loginPwd);
end $
call test_pro1('admiin','00001');
创建存储过程实现传入id,获取姓名以及地址
delimiter $
create procedure test_pro2(in inid int,out outName varchar(20),out outAdress varchar(20))
begin
select p.name ,p.adress into outName,outAdress
from persion p
where p.id = inid;
end $
set @outName = '';
set @outAdress = '';
call test_pro2(1,@outName,@outAdress);
select @outName as outName,@outAdress as outAdress;
创建存储过程用来实现比较大小
delimiter $
create procedure test_pro3(in birth1 DATETIME,in birth2 DATETIME,out result int)
begin
select DATEDIFF(birth1,birth2) into result;#调用比较日期大小的函数
end $
call test_pro3('2998-1-1',now(),@result);#传入两个时间,now()/取当前的时间
select @result;
二、删除存储过程
语法 drop procedure 存储过程名称 注意:只能删除一条
drop procedure test_pro5;
三、查看存储过程的信息
show create procedure '存储名称';
show create procedure myp1;
四、创建存储过程或者函数实现传入一个日期,格式化成XX年XX月XX日并返回
delimiter $
create procedure test_pro4(in mydata datetime,out strdate varchar(20))
begin
select DATE_FORMAT(mydata,'%Y年%c月%e日') into strdate;
end $
call test_pro4(now(),@str);
select @str as '格式化日期';
五 传入姓名,查出姓名 and 地址
delimiter $
create procedure test_pro5(in myName varchar(20),out str varchar(20))
begin
select concat(myName,' and ',IFNULL(p.adress,'111')) into str
from persion p
where p.name = myName;
end $
call test_pro5('李白',@str);
select @str;
六 创建存储过程,根据传入的条目数和起始索引,查询记录
delimiter $
create procedure test_pro6(in startIndex int,in size int)
begin
select *
from persion5 limit startIndex,size;
end $
call test_pro6(2,5);
在学习存储过程的过程中还需要注意的一点是与mysql函数的比较区分,在这里主要讲解的是存储过程的初步学习,函数方面就不做过多介绍了,后期有机会的话讲解一下函数。本篇存储过程的讲解适合初学者,更复杂的还需要大家和小编一块努力探究学习。
mysql存储过程的初步学习及案例示例的更多相关文章
- MYSQL存储过程和函数学习笔记
学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...
- 创建MySQL存储过程示例
创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...
- Mysql存储过程知识,案例--mysql存储过程基本函数
Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...
- MySQL存储过程学习笔记
MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...
- MySQL 存储过程学习笔记
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- MySQL 存储过程传参数实现where id in(1,2,3,...)示例
一个MySQL 存储过程传参数的问题想实现例如筛选条件为:where id in(1,2,3,...),下面有个不错的示例,感兴趣的朋友可以参考下 正常写法: ,,,,...); 当在写存储过程 ...
- MYSQL存储过程初步认知
存储过程(Stored Procedure): 一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行. 优点:将重 ...
- python预课04 列表,元祖,统计值计算示例,py文件转为EXE文件,爬虫初步学习
列表,元组 #list l1 = [1, 2, 3, '高弟弟'] #定义一个列表 #增 l1.append("DSB") #最后增加"DSB"的元素 #删 l ...
- mysql 存储过程学习
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
随机推荐
- 常见面试题之操作系统中的LRU缓存机制实现
LRU缓存机制,全称Least Recently Used,字面意思就是最近最少使用,是一种缓存淘汰策略.换句话说,LRU机制就是认为最近使用的数据是有用的,很久没用过的数据是无用的,当内存满了就优先 ...
- 区块链入门到实战(32)之Solidity – 代码注释
Solidity 支持c风格和c++风格的注释. //之后到行尾的文本,都被看作注释,编译器忽略此内容 /* 与 */ 之间的文本被看作注释, 编译器忽略此内容 示例 注释示例. function g ...
- js apply() call() bind() 的使用
bind ,call,apply 这三者都是用来改变函数的this对象的指向的. call和apply其实是同一个东西,区别只有参数不同. 其实call和apply ,只要你调用调用一个函数的时候就可 ...
- discuz论坛替换logo之后不显示该怎么办
http://www.wocaoseo.com/thread-2-1-1.html 这个虽然不算是seo的问题,但是在平时的操作之中经常性的遇到,常常是我用FTP已经上传替换了原来的logo,但是前台 ...
- py_冒泡排序
import random """ 排序:将一组无序记录序列调整为有序记录序列 列表排序:将无序列表调整为有序列表 输入:列表 输出:有序列表 升序与降序 内置函数sor ...
- XMLHttpRequest 简单封装
当开发简单页面的时候,不需要引入任何js库,这时需要封装一个用到 XMLHttpRequest 对象的好用的接口请求. simple 封装如下 ajaxRequest({ url: '', metho ...
- 新手oracle重启、监听
有一次遇到了记录下. #su到oracle用户下 [root@localhost ~]# su - oracle #重启数据库:[oracle@localhost ~]$ sqlplus /nolo ...
- 使用docker部署hadoop集群
最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用doc ...
- Easy Problem(等差数列求和导公式)
链接:https://ac.nowcoder.com/acm/contest/316/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言2621 ...
- 在react项目添加看板娘(react-live2d)
有留意到看板娘这么个东西,简直就是我们程序员+动漫迷的挚爱.但是回观网上,大多只是在老旧的html的静态引入.vue甚至也有几个不怎么维护的,还是老旧的不行的SDK2.X的版本.这这这这!我们的rea ...