存储过程

几个月前小编开始初步接触学习存储过程,当然是跟着大神的视频学习的,在学习的过程中自己也记录了一下笔记,如今整理一下,接下来我将从概念,优缺点以及语法和实际应用几方面为大家详细讲解一下存储过程,如有不对的地方,望留言批评,给予修正。

概念:一组预先编译好的sql语句的集合,理解成批处理语句。

优点:1.提高代码的重用性 2.简化操作 3.减少了我们的编译次数并且减少了服务器的连接次数,提高了效率。

语法:一、创建语法

  1. create procedure 存储过程名称(参数列表)
  2. begin
  3. 存储过程体(一组合法的sql语句)
  4. end

注意:1.参数列表包含三部分:参数模式、参数名,参数类型

例如:in stuname varchar(20)   ,其中“in”为参数模式,“stuname”为参数名,varchar(20)为参数类型。

这里重点说一下参数模式,参数模式有以下三种:

in该参数可以作为输入,也就是说该参数需要调入方传入值;

out:该参数可以作为输出,也就是该参数可以作为返回值;

inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。

2.如果存储过程仅仅只有一句话,begin end可以省略。存储过程体的每条sql语句的结尾要求必须加分号, 存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记 案例:delimiter $

二、调用语法

call 存储过程名(实体参数);

  1. 三、简单案例

1.空参列表 案例:插入到persion表中五条记录

  1. delimiter $
  2. create procedure myp1()
  3. begin
  4. insert into persion5(name,sex) values("张三",1),("汤姆",1),("李四",1),("王五",1);
  5. end $

调用语法

  1. call myp1();

2.创建一个in模式的存储过程

案例一:创建存储过程实现,根据姓名查询对应的信息

  1. delimiter $
  2. create procedure myp3(in beautyName varchar(20))
  3. begin
  4. select p.*
  5. from persion5 p
  6. where p.name = beautyName;
  7. end $

调用语法

call myp3('张三');

案例二 创建存储过程用来传多个参数 in 模式

  1. delimiter $
  2. create procedure myp4(in inname varchar(20),in insex int)
  3. begin
  4. select if(p.name = inname and p.sex = insex,'查询出了数据','没有查询出数据') as result
  5. from persion5 as p
  6. where p.id = 9;
  7. end $
  8. call myp4('张三',2);

案例三 自己声明参数

  1. delimiter $
  2. create procedure myp5(in inname varchar(20),in insex int)
  3. begin
  4. declare result varchar(20) default '';#声明并初始化
  5. select count(*) into result #赋值
  6. from persion5 as p
  7. where p.name = inname and p.sex = insex;
  8. select result;#使用
  9. end $
  10. call myp5('王五',1);

3.创建一个out模式的存储过程

案例一:根据name ,返回sex

  1. delimiter $
  2. create procedure myp6(in inname varchar(20),in inid int,out outsex varchar(20))
  3. begin
  4. select p.name into outsex
  5. from persion5 as p
  6. where p.name = inname and p.id = inid;
  7. end $
  8. set @outsex = '';
  9. call myp6('李四',3,@outsex);
  10. select @outsex as '结果';

4 创建一个inout模式参数的存储过程

案例!、传入a和b两个值,最终a和b都翻倍并返回

  1. delimiter $
  2. create procedure myp7(inout a int,inout b int)
  3. begin
  4. set a = a*2;
  5. set b = b*2;
  6. end $
  7. set @a=10;#声明一个变量a
  8. set @b=20;#声明一个变量b
  9. call myp7(@a,@b);#将变量a b传入到myp7中,返回的值存入先前声明的变量
  10. SELECT @a,@b;#将变量输出

调用:需要先定义变量,

练习:

一、创建存储过程(略微提高难度)

实现往admin表中插入数据

  1. delimiter $
  2. create procedure test_pro1(in userName varchar(20),in loginPwd varchar(20))
  3. begin
  4. insert into admin(admin.username,admin.password)
  5. VALUES (userName,loginPwd);
  6. end $
  7. call test_pro1('admiin','00001');

创建存储过程实现传入id,获取姓名以及地址

  1. delimiter $
  2. create procedure test_pro2(in inid int,out outName varchar(20),out outAdress varchar(20))
  3. begin
  4. select p.name ,p.adress into outName,outAdress
  5. from persion p
  6. where p.id = inid;
  7. end $
  8. set @outName = '';
  9. set @outAdress = '';
  10. call test_pro2(1,@outName,@outAdress);
  11. select @outName as outName,@outAdress as outAdress;

创建存储过程用来实现比较大小

  1. delimiter $
  2. create procedure test_pro3(in birth1 DATETIME,in birth2 DATETIME,out result int)
  3. begin
  4. select DATEDIFF(birth1,birth2) into result;#调用比较日期大小的函数
  5. end $
  6. call test_pro3('2998-1-1',now(),@result);#传入两个时间,now()/取当前的时间
  7. select @result;

二、删除存储过程

  1. 语法 drop procedure 存储过程名称 注意:只能删除一条
  2. drop procedure test_pro5;

三、查看存储过程的信息

  1. show create procedure '存储名称';
  2. show create procedure myp1;

四、创建存储过程或者函数实现传入一个日期,格式化成XX年XX月XX日并返回

  1. delimiter $
  2. create procedure test_pro4(in mydata datetime,out strdate varchar(20))
  3. begin
  4. select DATE_FORMAT(mydata,'%Y年%c月%e日') into strdate;
  5. end $
  6. call test_pro4(now(),@str);
  7. select @str as '格式化日期';

五 传入姓名,查出姓名 and 地址

  1. delimiter $
  2. create procedure test_pro5(in myName varchar(20),out str varchar(20))
  3. begin
  4. select concat(myName,' and ',IFNULL(p.adress,'111')) into str
  5. from persion p
  6. where p.name = myName;
  7. end $
  8. call test_pro5('李白',@str);
  9. select @str;

六 创建存储过程,根据传入的条目数和起始索引,查询记录

  1. delimiter $
  2. create procedure test_pro6(in startIndex int,in size int)
  3. begin
  4. select *
  5. from persion5 limit startIndex,size;
  6. end $
  7. call test_pro6(2,5);

    在学习存储过程的过程中还需要注意的一点是与mysql函数的比较区分,在这里主要讲解的是存储过程的初步学习,函数方面就不做过多介绍了,后期有机会的话讲解一下函数。本篇存储过程的讲解适合初学者,更复杂的还需要大家和小编一块努力探究学习。

mysql存储过程的初步学习及案例示例的更多相关文章

  1. MYSQL存储过程和函数学习笔记

    学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...

  2. 创建MySQL存储过程示例

    创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...

  3. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  4. MySQL存储过程学习笔记

    MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...

  5. MySQL 存储过程学习笔记

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

  6. MySQL 存储过程传参数实现where id in(1,2,3,...)示例

    一个MySQL 存储过程传参数的问题想实现例如筛选条件为:where id in(1,2,3,...),下面有个不错的示例,感兴趣的朋友可以参考下   正常写法:  ,,,,...); 当在写存储过程 ...

  7. MYSQL存储过程初步认知

    存储过程(Stored Procedure): 一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行. 优点:将重 ...

  8. python预课04 列表,元祖,统计值计算示例,py文件转为EXE文件,爬虫初步学习

    列表,元组 #list l1 = [1, 2, 3, '高弟弟'] #定义一个列表 #增 l1.append("DSB") #最后增加"DSB"的元素 #删 l ...

  9. mysql 存储过程学习

    存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...

随机推荐

  1. 神舟zx6-ct5da装黑苹果Macos 10.15.6记录

    可能是一时脑子抽风,突然就想体验一把mac系统.以前就了解过,给非苹果电脑装macos叫黑苹果,emmmmm.好吧,给我的神船也整一个. 看了很多个视频,整理一下装黑苹果过程.本人电脑系统是win10 ...

  2. 数据处理 | pandas入门专题——离散化与one-hot

    今天是pandas数据处理专题第7篇文章,可以点击上方专辑查看往期文章. 在上一篇文章当中我们介绍了对dataframe进行排序以及计算排名的一些方法,在今天的文章当中我们来了解一下dataframe ...

  3. Sql 注入----学习笔记

    先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...

  4. 初识ABP vNext(8):ABP特征管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 定义特征 应用特征 用户数量 社交登录 最后 前言 上一篇提到了ABP功能管理(特征管理),它来自ABP的Featur ...

  5. beautifulsoup教程

    beautifulsoup教程 BeautifulSoup4是爬虫必学的技能.BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码 ...

  6. P1306 斐波那契公约数(ksm+结论)

    题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? Update:加入了一组数据. 输 ...

  7. [BUUOJ记录] [GXYCTF2019]BabyUpload

    CTF三大骗局:Baby Easy Funny,本题主要考察.htaccess文件解析文件.文件类型检测绕过 打开题目给了一个上传点,上传一个php文件看看过滤规则 “后缀名不能有ph”直接禁掉了所有 ...

  8. 用安卓 WebView 做一个“套壳”应用

    前言 目前手机应用市场上的 APP 类型主要为以下两种: Native App(原生应用):直接针对平台(Android.iOS 等手机系统)进行开发,属于性能最优的方案,也是开发成本最大的方案. H ...

  9. Kubernetes-12:Secret介绍及演示

    Secret介绍 Secret存在的意义 Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中,可以以Volume或者环境变量的方式使用 ...

  10. 为ASP_NET应用程序启用SQL缓存

    步骤一: sql数据库必须开启ServiceBroker服务,首先检测是否已经启用ServiceBroker,检测方法: SELECT DATABASEPROPERTYEX('dbName','IsB ...