MySQL 存储过程入门
存储过程是带有逻辑的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 存储过程入门的更多相关文章
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
- MySQL存储过程入门
MySQL存储过程入门 在本教程中,我们将逐步介绍如何使用CREATE PROCEDURE语句开发第一个MySQL存储过程. 另外,我们将向您展示如何从SQL语句调用存储过程. 编写第一个MySQL存 ...
- Mysql存储过程入门介绍
delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...
- MySQL存储过程入门教程
存储过程介绍 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程可由应用程序通过一个调用来执行,而且 ...
- MySQL存储过程入门基础
创建存储过程无参语法: delimiter // create procedure 函数名() begin 业务逻辑 end // call 函数名() 通过函数名调用存储过程 创建存储过程有参与法: ...
- MySQL存储过程入门了解
0.环境说明: mysql版本:5.7 1.使用说明 存储过程是数据库的一个重要的对象,可以封装SQL语句集,可以用来完成一些较复杂的业务逻辑,并且可以入参出参(类似于java中的方法的书写). ...
- mysql存储过程编写-入门案例-遁地龙卷风
(-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delim ...
- mysql数据库之存储过程入门
引用:百度百科 存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存 ...
- MySQL 菜鸟入门“秘籍”
一.MySQL简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不 ...
随机推荐
- JFreeChart工具类
需要的jar包: jfreechart-1.0.17.jarjcommon-1.0.24.jar (jfreechart一般只要1.0系列的都可以,jcommon一般任何版本都可以) 效果: 代码: ...
- navicat执行大容量的.sql文件时的设置
如果有主外键关联等,执行报错,则去掉中间的对勾保留第三个对勾试试.第三个对勾 是 手动提交(不自动提交,估计是全部导入到数据库中之后再一起提交,而不是导入一条sql语句就提交一次) 如果同时不勾选第2 ...
- Betsy Ross Problem
Matlab学习中的betsy ross 问题.用matlab函数画1777年的美国国旗. 五角星绘制部分是自己想出来的方法去画上的.具体代码参考如下. 先是绘制矩形的函数 function Draw ...
- Kubernetes Pod 健康检查
参考文档: https://jimmysong.io/kubernetes-handbook/guide/configure-liveness-readiness-probes.html 一.Pod的 ...
- Tomcat权威指南-读书摘要系列4
4. Tomcat的性能调校 测量Web服务器的性能 测试负载的工具 Apache Benchmark Siege JMeter
- ORM choice字段 如何在页面上显示值
核心:obj.get_字段名_display 1.定义module 数据结构: class msg(models.Model): choice = ( (1, '技术部'), (2, '行政'), ( ...
- 转:UIView的sizeToFit与sizeThatFits
UILabel经常用到的方法- (void)sizeToFit- (CGSize)sizeThatFits:(CGSize)size解释如下: sizeToFit会自动调用sizeThatFits方法 ...
- clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
1. clock_gettime( ) 提供了纳秒的精确度 int clock_gettime(clockid_t clk_id, struct timespect *tp); clockid_t c ...
- Mongo 后台加索引踩坑
背景,随着mongo数据量变大,查询效率变低,要对索引进行优化,所在公司对mongo依赖比较严重,而DBA并不对mongo的权限做控制,所以每个后端开发都有mongo的读写权限,通常每个人各自管理自己 ...
- NYOJ 123 士兵杀敌(四) (线段树)
题目链接 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个 ...