MySQL基础(5) | 存储过程
MySQL基础(5) | 存储过程
一、基础
- 结束符【重要】
mysql的命令行执行每一条命令是以分号结尾的,也就是说识别是否为一条命令,是根据分号决定的。
然而存储过程中设计多条语句,很可能出现多个分号,所以直接把存储过程复制到命令执行一般都会失败。
解决方法是临时切换分隔符,让命令行知道整个存储过程的代码是完整的一块代码,如下:
DELIMITER $$
BEGIN
select * from table_name;
END$$
- 声明存储过程
CREATE PROCEDURE demo_in_parameter(IN p_in int)
- 存储过程开始和结束符号
BEGIN .... END
- 变量赋值【注:使用Set可以直接创建并赋值一个变量,该变量要用@开头】
SET @p_in=1;
SELECT 'Hello World' into @x;
- 变量定义【注:DECLARE定义的变量,开头不能加@,也是比较坑】
DECLARE l_int int unsigned default 4000000;
- 存储过程的参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])
- IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
- OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
- INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
- 注释
#注释方式一
-- 注释方式二【注意有空格】
/*
注释方式三【可以注释多行】
*/
二、进阶
1). 条件语句
- if---then---else---end if 语句
delimiter $$
create PROCEDURE proc(aa int)
begin
declare sum int;
set sum = 100;
if aa > 0 then
set sum = sum - aa;
else
set sum = sum + aa;
end if;
select sum;
end$$
- case---when---then---else---end case语句
delimiter //
CREATE PROCEDURE proc2 ( aa INT ) BEGIN
DECLARE sum INT;
SET sum = 100;
CASE aa
WHEN 0 THEN
SET sum = sum + 10;
WHEN 1 THEN
SET sum = sum + 11;
ELSE
SET sum = sum + 12;
END CASE;
SELECT sum;
END //
2). 循环语句
- while---do---end while语句
delimiter //
CREATE PROCEDURE proc3(a int)
BEGIN
set @result = a;
WHILE a > 0 DO
set @result = @result + a;
set a = a - 1;
END WHILE;
select @result;
END //
call proc3(100)
- repeat---until 结束条件 end repeat;
delimiter //
CREATE PROCEDURE proc4(aa int)
BEGIN
declare result int;
set result = 0;
REPEAT
set result = result + aa;
set aa = aa - 1;
UNTIL aa <= 0 END REPEAT;
SELECT result;
END //
CALL proc4(3)
- loop语句
label: LOOP
statement_list
IF exit_condition THEN
LEAVE label;
END IF;
END LOOP label;
delimiter //
CREATE PROCEDURE proc5(aa int)
BEGIN
declare result int;
set result = 0;
label: LOOP
set result = result + aa;
set aa = aa - 1;
IF aa <= 0 THEN
LEAVE label;
END IF;
END LOOP label;
SELECT result;
END //
- iterate迭代【复合】
delimiter //
CREATE PROCEDURE proc6(aa int, out result int)
BEGIN
set result = 0;
label: LOOP
#如果aa是偶数,则跳过
if aa % 2 = 0 then
set aa = aa - 1;
ITERATE label;
end if;
set result = result + aa;
set aa = aa - 1;
IF aa <= 0 THEN
LEAVE label;
END IF;
END LOOP label;
SELECT result;
END //
call proc6(3, @result);
SELECT @result;
MySQL基础(5) | 存储过程的更多相关文章
- MySQL基础值 存储过程和函数
一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE PROCE ...
- MySQL基础之存储过程
学过之后却没有总结,今天好不容易有点时间来看看. 存储过程的优势 1.简化复杂的SQL语句,将多个SQL语句封装成为一个存储过程,可以在其中加上一些流程控制语句 2.存储过程封装在数据库内部,编译之后 ...
- MySQL 基础四 存储过程
-- 定义存储过程 DELIMITER // CREATE PROCEDURE query_student2() BEGIN SELECT * FROM student; END // DELIMIT ...
- MYSQL:基础—存储过程
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- MySql(十九):基础——自定义存储过程和函数
MYSQL中创建存储过程和函数分别使用CREATE PROCEDURE和CREATE FUNCTION 使用CALL语句来调用存储过程,存储过程也可以调用其他存储过程 函数可以从语句外调用,能返回标量 ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- Mysql基础(二)
学习路线:数据约束-> 数据库的设计过程-> 存储过程的相关知识-> 触发器-> 权限管理 (一)数据约束 1.1.默认值的设置 创建员工表emp 将默认地址设置为'中国'my ...
随机推荐
- 基于云开发开发 Web 应用(一):项目介绍 & 初始化
基于云开发开发 Web 应用(一):项目介绍 & 初始化 背景描述 Linux 中国曾在过去的 1 - 2 年内长期运行了一个 TL;DR 的中国版.不过当时做的版本是小程序的版本,一直以来, ...
- 2020.2,《The day after tomorrow》
“The day after tomorrow, where will you be?” 2020春节冠状病毒肆虐被迫禁足家里,无意间打开了2004年由德国罗兰·艾默里奇(Roland Emmeric ...
- springBoot的事件机制---GenericApplicationListener用法
springBoot的事件机制---GenericApplicationListener用法 什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环 ...
- Shell与进程
查看当前运行的进程 名称: ps 使用权限: 所有使用者 使用方式: ps [options] [--help] 说明: 显示瞬间行程 (process) 的动态 参数: ps的参数非常多, 在此仅列 ...
- 用JavaScript完成页面自动操作
在之前的一篇<JavaScript实现按键精灵>中曾记录了几个事件对象,本文将会对它们进行一次实战,要完成的动作包括滚动.点击和翻页. 一.滚动 滚动是通过修改容器元素的scrollTop ...
- 如何在网页读取用户IP,操作系统版本等数据demo
我们浏览网页的时候,会不经意间看到,有些地方(如个人的签名档)显示出了个人的IP,操作系统等数据.借助第三方API和请求报头useragent是很容易实现的. <html> <hea ...
- python练习——第0题
原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种 ...
- Go语言实现:【剑指offer】包含min函数的栈
该题目来源于牛客网<剑指offer>专题. 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数. 时间复杂度应为O(1). Go语言实现: var myList = ...
- H3C router cmd
LAN转WAN:接口下port link-mode route windows CMD,本地连接5的链路本地地址经常有一个百分号加一个数字,该数字即接口索引,fe80::8c79:e4f9:f5a3: ...
- 卫星轨道相关笔记SGP4
由卫星历书确定卫星轨道状态向量 卫星历书的表示方法有2种: TLE(Two Line Element),和轨道根数表示方法 由卫星历书计算出卫星轨道状态向量的方法有2种: SGP方法,NORAD的方法 ...