#存储过程

存储过程和函数:类似于java中的方法

好处:

1.提高代码的重用性

2.简化操作

#存储过程  procedure

含义:一组预先编译好的SQL语句的集合,理解成批处理语句

1.提高代码的重用性

2.简化操作

3.减少了编译次数并且减少了和数据服务器的连接次数,提高了效率

#一、创建语法 begin end类型于{}

CREATE PROCEDURE 存储过程名(参数列表)

BEGIN

存储过程体(一组合法的SQL语句)

END

注意:

1.参数列表包含三部分

参数模式 参数名 参数类型

举例:

IN stuname VARCHAR(20)

参数类型:

IN :该参数可以作为输入,也就是该参数需要调用方传入值

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

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

2.如果存储过程体仅仅只有一句话,begin end可以省略

存储过程中的每条SQL语句的结尾必须加分号。

            存储过程的结尾可以使用 DELIMITER 重新设置 delimter $结束标记 再遇到$符号就执行

语法:

DELIMITER 结束标记

案例: #

DELIMITER $

#二、调用语法

CALL 存储过程名(实参列表);

存储过程案例

 #1、空参列表

#案例:插入到admin表中五条记录

SELECT * FROM admin;

#delimter $ 声明这个$符号遇到 end$时 当遇到这个符号再执行整段语句 

  因为储存过程中的sql语句结尾分号 如果不加标记编译器认为到分号就结束了

DELIMITER $

CREATE PROCEDURE myp1()

BEGIN

INSERT INTO admin(username,`password`)

VALUE('tom',777),('lily',577),('luce',767),('jack',797),('sim',377);

END $

复制到mysql自带客户端

#调用存储结构 call

CALL myp1()$  成功的的插入五条数据

前面声明了遇到$符号才执行 我在select查询时 用分号无效用$符回车才执行select语句

#2、创建带in模式参数的存储过程

#案例1.创建存储过程实现 根据女神名,查询对应的男神名

这里的女神名需要当作参数

CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))

BEGIN

SELECT bo.*

FROM boys bo

RIGHT JOIN beauty gr ON gr.`boyfriend_id`=bo.`id`

WHERE gr.name=beautyName;

END $

#调用

CALL myp2('小昭')$  传入形参

    #案例2.创建存储过程实现,用户是否登录成功

CREATE PROCEDURE myp3(IN username VARCHAR(20),IN `password` VARCHAR(20))

BEGIN

DECLARE result INT DEFAULT 0;#声明局部变量并赋值

SELECT COUNT(*) INTO result #满足用户名密码与数据库中数据一致时 筛选条件满足count加1 赋值给result变量

FROM admin a

WHERE a.username=username

AND a.password=`password`;

SELECT IF(result>0,'成功','失败');  #查看局部变量 如果result>0则where筛选条件成功 count加1

END $

传入的值满足筛选条件传入name与password与 admin表中一致的话count(*)就将满足的数据加1,赋值给result。如果result大于0返回成功,反之返回失败

调用存储过程  

CALL myp3('join','8888')$   admin 数据john 8888

#3、创建带out模式的存储过程

#案例1:根据女神名,返回对应的男神名

CREATE PROCEDURE myp4(IN girlName VARCHAR(20),OUT boyname VARCHAR(20))

BEGIN

SELECT bo.boyname INTO boyname #满足传入的女神名=连接查询的gir.name into赋值给 输出模式boyname

FROM boys bo

INNER JOIN beauty gir ON bo.id=gir.`boyfriend_id`

WHERE gir.name = girlName;

END $

#调用

#定义一个用户变量

SET @boyname=''$   #接收返回值的变量

#调用myp4

CALL myp4('热巴',@boyname)$

#查看用户变量@boyname

SELECT @boyname$

#案例2:根据女神名,返回对应的男身名和魅力值

多个out模式 bo.boyName,bo.userCP INTO boyName,userCP 满足筛选条件的 将男神名与CP值分别into到两个输出变量

CREATE PROCEDURE mpy5(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)

BEGIN

SELECT bo.boyName,bo.userCP INTO boyName,userCP

FROM boys bo

INNER JOIN beauty gir ON bo.id=gir.boyfriend_id

WHERE gir.name=beautyName;

END $

/*set @boyname;

set @usercp;

也可不用定义*/

    #调用mpy5

CALL mpy5('小昭',@boyname,@usercp)$

#查看调用结果

SELECT @boyname,@usercp$

    #4.创建带inout模式参数的存储过程

#案例1:传入a和b两个值,最终a和b都翻倍并返回

CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)

BEGIN

SET a=a*2;   #a和b都为局部变量 直接*2

SET b=b*2;

END $

#定义用户变量赋值

SET @a=8$

SET @b=9$

#调用 并传入参数

CALL myp6(@a,@b)$

#查看调用存储过程结果

SELECT @a,@b$

#三、删除存储过程

语法: DROP PROCEDURE 存储过程名

DROP PROCEDURE test2;

DROP PROCEDURE test1,test2;#错误的语法 报错

#四、查看存储过程的信息

DESC myp2;#错误的存储信息

SHOW CREATE PROCEDURE myp2;

#存储过程案例

#一、创建存储过程或函数实现传入用户名和密码,插入到admin表中

CREATE PROCEDURE test1(IN `name` VARCHAR(10),IN `passwords` VARCHAR(16))

BEGIN

INSERT INTO admin(username,`password`)

VALUE(`name`,passwords);

END $

#调用test1

CALL test1('jack','6666')$

存储过程成功创建 与 调用成功插入

SELECT * FROM admin$

#二、创建存储过程或函数实现传入女神编号,返回女神名称和女神电话

CREATE PROCEDURE test2(IN beautyId INT,OUT beautyName VARCHAR(20),OUT phone VARCHAR(11))

BEGIN

SELECT gir.name,gir.phone INTO beautyName,phone

FROM beauty gir

WHERE gir.id=beautyId;

END $

#调用test2 传入女神3 ID

CALL test2(3,@beautyName,@phone)$

SELECT @beautyName,@phone$

#三、创建存储过程或函数实现传入两个女神生日,返回大小

CREATE PROCEDURE test3(INT date1 DATETIME,INT date2 DATETIME,OUT result VARCHAR(2))

BEGIN

SELECT DATEDIFF(date1,date2) INTO result;

SELECT result,

CASE

WHEN result>0 THEN '大'

WHEN result<0 THEN '小'

ELSE '相等'

END;

END $

CALL test3(NOW(),'1996-1-6',@result)$

Mysql_sql存储过程相关推荐

  1. hql调用mysql存储过程_hibernate调用mysql存储过程

    在mysql中创建两个存储过程,如下: 1.根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3      s ...

  2. mysql 分号 存储过程_MySql 存储过程

    自动增长列.字段值唯一性约束 create table aa( id int auto_increment primary key, sname varchar(32) unique ); inser ...

  3. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  4. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

  5. MySQL 学习笔记(6)— 存储过程创建、调用、删除以及带参数的存储过程

    1. 存储过程总结 存储过程是一种存储在数据库中的程序.它可以包含多个 SQL 语句,并提供许多过程语言的功能,例如变量定义.条件控制语句.循环语句.游标以及异常处理等. 1.1 存储过程优点 实现代 ...

  6. SER SERVER存储过程

    Transact-SQL中的存储过程,非常类似于C#语言中的方法,可以重复调用.当存储过程执行一次后,可以将语句存储到缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. 一 ...

  7. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  8. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

  9. sql server 2008学习10 存储过程

    输入输出参数: 给存储过程传参数,叫做输入参数,用户告诉存储过程需要 利用这个参数干些什么. 输出参数: 从存储过程得到那些数据. 创建一个可选参数的存储过程: create proc pa1 @na ...

最新文章

  1. Objective-C中MRC和ARC的自我理解
  2. 3.1 if条件语句
  3. Android引入library失败的可能原因
  4. ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
  5. 运行Hadoop自带的wordcount单词统计程序
  6. Ubuntu搭建tftp服务器
  7. HDU1560 DNA sequence IDA* + 强力剪枝 [kuangbin带你飞]专题二
  8. 人月神话贯彻执行_《人月神话》读后感与读书笔记
  9. STC学习:电子音乐
  10. 缓存key生成策略的一些思考
  11. Foxit PDF SDK for Linux (C++ Library) 8.4.1 Crack
  12. 【阅读百本英文原版书】—为提升英语运用能力—已看完77本
  13. 台式计算机设置热点,台式电脑怎样设置wifi热点?设置wifi热点流程一览
  14. 懒惰还是懦弱?你真的不行吗?
  15. python怎么定义向量类_python的用户定义向量类
  16. iOS项目开发中的知识点与问题收集整理
  17. 错误: 找不到或无法加载主类 com.zz.javajdbc.JDBCTest
  18. 【5G NR】NG接口
  19. kali win10双系统_win10安装kalilinux双系统详细步骤
  20. 轻量级过程改进之需求管理

热门文章

  1. 最近非常受欢迎的国外经典计算机教材有这样7本
  2. 关于#include iomanip中iomanip的作用~
  3. 转变为一维向量的flatten()操作
  4. Linux 部署 MongoDB 副本集
  5. STEM教育活动一览
  6. 阿里云和腾讯云免费SSL证书 专题
  7. PTA 程序设计天梯赛【day2】
  8. 【转】ASCII码十进制、十六进制对照表
  9. python路线寻优_曲线寻优
  10. 向工程腐化开炮 | 治理思路全解