存储过程是带有逻辑的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. Docker 安装tensorflow

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

  2. C语言复习---判断素数

    一般 int main01() { ; scanf("%d", &a); n_sqrt = sqrt(a); ; i <= n_sqrt; i++) ) { flag ...

  3. React.js基础入门

    本文主要是针对React的一些demo教程.参考了菜鸟教程中的react教程,做了一些总结.Demo的下载链接是 https://github.com/RealAndMe/react-demo 下面要 ...

  4. 2017 清北济南考前刷题Day 1 afternoon

    期望得分:80+30+70=180 实际得分:10+30+70=110 T1 水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水 ...

  5. zookeeper系列之:zookeeper简介浅谈

    一.zookeeper的定义 打开zookeeper官网,赫然一行大字,写着:“Apache ZooKeeper致力于开发和维护实现高度可靠的分布式协调的开源服务器”.什么意思呢?就是Apache Z ...

  6. Java并发编程原理与实战三十:CountDownLatch与CyclicBarrier 区别

    相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到 ...

  7. jQuery.Validator Sample

    <!DOCTYPE html> <html> <head> <title></title> <script src="./j ...

  8. JS中的作用域和闭包

    作用域:在编程语言中,作用域控制着变量与参数的可见性及生命周期.JS确实有函数作用域,那意味着定义在函数中的参数和变量在函数外部是不可见的,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是 ...

  9. 让老版本IE支持HTML5

    一直想入手C3和H5,但因为所开发的项目一直要求兼容IE7,IE8.而这两个浏览器并不支持html5,所以一直都在观望而未真正的投入太多精力去学习.尽管我知道h5和c3是主流. 在最近的项目开发中,偶 ...

  10. laravel 和 thinkphp 条件查询的区别

    laravel:以二维数组形式where查询,可以为空,即,该条where不运行: thinkphp:以字符串形式查询,不能为空.