存储过程是带有逻辑的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. linux命令总结之dig命令

    Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内 ...

  2. string 中的一些优化事项

    1.1 fmt  vs  "+" (无转义) import ( "testing" "fmt" ) var ( str = "he ...

  3. P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 一只鸟从1跳到n.从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力 很简短的题目哼. ...

  4. git 提交模板配置

    1.创建模板文件,比如gitTemplate.txt,内容如下: ABSTRACT:修改自测发现的多度数据同步相关问题. Bug Fix [Y/N]:NBug ID:New Feature [Y/N] ...

  5. [洛谷P3643] [APIO2016]划艇

    洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...

  6. c# net 使用反射为对象赋值

    public T Bson2T(MongoDB.Bson.BsonDocument bson) { T t = default(T); //获取T类中的所有属性 PropertyInfo[] Tpro ...

  7. [转载]strtok函数和strtok_r函数

    1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{     char name[25];     char sex[1 ...

  8. [转载].net程序集自动生成版本号

    原文:http://hi.baidu.com/bcbgrand/item/a74a7ba71c3b0ea928ce9dce .net程序版本号的格式是4个十进制数字 比如 2.5.729.2 依次是 ...

  9. SMTP——MIME

    MIME 基础知识 MIME 表示多用途 Internet 邮件扩允协议.MIME 扩允了基本的面向文本的 Internet 邮件系统,以便可以在消息中包含二进制附件. MIME 信息由正常的 Int ...

  10. 【leetcode 简单】 第八十三题 反转字符串中的元音字母

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...