存储过程是带有逻辑的SQL语句,优点是执行效率高。缺点是可移植性差

1、存储过程语法

DELIMITER $  --声明结束符
CREATE PROCEDURE pro_test() --创建存储过程  存储过程名称(参数列表)
BEGIN
SELECT * FROM employee --可以写多条SQL语句  SQL语句+流程控制
END $ --结束

2、调用存储过程

CALL pro_test  --CALL 存储过程名称

3、储存过程参数

IN            表示输入参数

OUT         表示输出参数

INOUT     表示输入、输出参数

3.1带有输入参数的存储过程

需求:通过传入一个员工的id,查询员工信息

DELIMITER $
CREATE PROCEDURE pro_findById(IN eid INT) --IN: 输入参数
BEGIN
SELECT * FROM employee WHERE id = eid;
END $

调用

CALL pro_findById(2);

3.2 带有输出参数的存储过程

DELIMITER $
CREATE PROCEDURE pro_testOut (OUT str VARCHAR(20))
BEGIN
SET str="这是一个输出参数";
END $

调用带返回参数的存储过程

先介绍下MySQL变量
1、全局变量(内置变量)
查看所有全局变量 show variables
   查看跟字符集有关的全局变量 SHOW VARIABLES LIKE 'character_%';
   查看某个全局变量 SELECT @@变量名
修改全局变量 SET 变量名=新值
常用全局变量
--character_set_client : mysql服务器能够接收数据的编码
--character_set_results : mysql服务器输出数据的编码
2、会话变量:只存在于当前的客户端与数据库服务器端的一次连接当中,如果连接断开,会话丢失
  定义一个会话变量 SET @变量=值
  查看会话变量 SELECT @变量
3、局部变量:在存储过程中使用的变量 就是存储变量,只存储过程执行完毕,那么局部变量就会消失。 变量介绍完,现在说明如何调用带输出参数的存储过程
1、定义一个会话变量
CALL pro_testOut(@NAME) //1)定义一个会话变量NAME,2)使用NAME会话变量
2、查看会话变量
SELECT @NAME;

3.3带有输入输出参数的存储过程

DELIMITER $
CREATE PROCEDURE pro_testInOut(INOUT n INT) --INOUT输入输出参数
BEGIN
SELECT n; --作为输入参数传入存储过程, 该变量变为局部变量 不用加'@',但在存储过程外仍然是会话变量
SET n = 500;
END $ --调用
输入
SET @n = 10;
CALL pro_testInOut(@n); --结果输出10 输入
SELECT @n; --结果输出500

4、带有条件判断的存储过程

需求:输入一个整数。如果为1,则返回“星期一”,如果是2,则返回“星期二”,如果是3,则返回“星期三”。如果 是其他数值,返回“错误的数值”

DELIMITER $
CREATE PROCEDURE pro_testIf(IN num INT, OUT str VARCHAR(10))
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(1, @str);
SELECT @str;

5、带有循环功能的存储过程

--需求:输入一个整数,求和。例如输入100.求1-100的和

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(100, @result); SELECT @result;

6、使用查询结果作为返回值

DELIMITER $
CREATE PROCEDURE pro_findById(IN eid INT, OUT vnaem VARCHAR(20))
BEGIN
SELECT empName INTO vname FROM employee WHERE id = eid;
END $ --调用
CALL pro_findByID(1, @NAME); SELECT @NAME

7、删除存储过程

DROP PROCEDURE 存储过程名称

MySQL 存储过程入门的更多相关文章

  1. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  2. MySQL存储过程入门

    MySQL存储过程入门 在本教程中,我们将逐步介绍如何使用CREATE PROCEDURE语句开发第一个MySQL存储过程. 另外,我们将向您展示如何从SQL语句调用存储过程. 编写第一个MySQL存 ...

  3. Mysql存储过程入门介绍

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

  4. MySQL存储过程入门教程

    存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且 ...

  5. MySQL存储过程入门基础

    创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...

  6. MySQL存储过程入门了解

    0.环境说明: mysql版本:5.7 1.使用说明 ​ 存储过程是数据库的一个重要的对象,可以封装SQL语句集,可以用来完成一些较复杂的业务逻辑,并且可以入参出参(类似于java中的方法的书写). ...

  7. mysql存储过程编写-入门案例-遁地龙卷风

    (-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delim ...

  8. mysql数据库之存储过程入门

    引用:百度百科 存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存 ...

  9. MySQL 菜鸟入门“秘籍”

    一.MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不 ...

随机推荐

  1. C#线程篇---Windows调度线程准则(3)

    Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...

  2. Docker 安装tensorflow

    安装DOCKER 1. https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ nstall from a packag ...

  3. mysql 优化总结

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. (laravel 可以使用 debugbar 包,可以及时发现低效 sql 语句,不使用索 ...

  4. laravel 中的 toSql 获取带参数的 sql 语句

    默认情况下,toSql 获取到的 sql 里面的参数使用 "?" 代替的,如下: DB::table('user')->where('id', 1)->toSql(); ...

  5. Gogs安装配置(快速搭建版)转载

    gogs官网 oschina gogs介绍 一句话描述: 一款极易搭建的自助 Git 服务. 环境 centos7:golang+mysqldb+git 安装配置环境 yum install mysq ...

  6. tp 用group去重

    $baseGoodIds_arr = [1,2,3,4,5,6,7,8,9];$relate_gimgs = D('GoodsImages')->where(['good_id' => [ ...

  7. Navicat数据备份

    备份:点击数据库---数据传输 目标:备份地点,数据会传送到yaozh_backup 数据传输成功

  8. iis配置访问错误

    最近换工作,忙着熟悉新的环境,新的框架技术(银行用的EBF),各种碰坑. 总结一下iis配置过程当中遇到的一个坑------ 按照环境搭配手册一步一步的配置,在我机器上访问一直报500的错,但是同样的 ...

  9. jvm内存模型(运行时数据区)

    运行时数据区(runtime data area) jvm定义了几个运行时数据区,这些运行时数据区存储的数据,供开发者的应用或者jvm本身使用.按线程共享与否可以分为线程间共享和线程间独立. 线程间独 ...

  10. c#+js 使用formdata上传文件

    如果不是使用form表单submit的形式,我们可以手动通过formdata传值(针对文件上传等) 比如: <html> <head> <meta name=" ...