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 ...
随机推荐
- 虚拟环境vitualenv的使用
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- 工具之sort
转自:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参 ...
- Nginx-负载均衡实现解读
负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就 ...
- 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...
- springboot mybatis 多数据源配置支持切换以及一些坑
一 添加每个数据源的config配置,单个直接默认,多个需要显示写出来 @Configuration @MapperScan(basePackages ="com.zhuzher.*.map ...
- json通过后台获取数据库中的内容,并在前端进行显示
fastjson.jar以及Echarts树图的js文件(需要在servlet对json进行赋值,所以需要用到json的插件) 链接:https://pan.baidu.com/s/1GBbamPNG ...
- Linux服务器上python2升为python3.6
如何在在Linux服务器上吧Python2升级为Python3 最近白嫖了一年的服务器,打算在服务器上跑一个Python项目,没想到居然预装的是Python2.7.5.本来是打算把Python2.7. ...
- 找python爬虫小项目?github给你准备好了!
前言 即使我们都是程序员,但我们也并非都会修电脑,都会做酷炫的ppt,都会优化系统卡顿.其实程序员也是分行业.分专业的,就像医生也分内外科.呼吸科.神经科神的. 作为非专业的python选手,或者非专 ...
- python批量删除子文件夹中的空子文件夹
例如A文件夹下有许多子文件夹,我需要获得的是子文件夹中的图片,但是现在子文件夹中不光有图片,还混入了空的文件夹(在使用OpenImages工具箱的时候,按照检索的方式下载的图片文件中是带有label的 ...
- 2019icpc徐州现场赛 H Yuuki and a problem (树状数组套主席树)
题意 2e5的数组,q个操作 1.将\(a[x]\)改为y 2.求下标l到r内所有的\(a[i]\)通过加法不能构成的最小的值 思路 通过二操作可以知道需要提取l到r内的值及其数量,而提取下标为l到r ...