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 ...
随机推荐
- 利用geojson实现模型轨迹运动
直接上代码 var viewer = new Cesium.Viewer('cesiumContainer'); //Set the random number seed for consistent ...
- 2020年大厂Java面试题(基础+框架+系统架构+分布式+实战)
前言 作为一个Java开发者,Java架构师应该是大家的一个职业目标了吧. 要成为Java架构师,首先你要是一个高级Java工程师,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得 ...
- 硬件原理系列之LED数码管(一)
LED数码管也叫数码显示器,由8段(7段,8多一位小数点)发光二极管组成,控制不同组合,就可以显示不同字符 dp示小数点,COM为公共端,根据连接方式的不同,分为共阴极和共阳极 工作原理:若选用共阴极 ...
- 今天你上班了吗?来聊聊一个隐蔽了 5 年的BUG!
前言 今天,我们要揭晓一个 FineUI 隐藏最深的一个BUG,这个问题从 2014-07-30 发布 FineUIPro v1.0.0 就一直存在,直到最新于 2020-01-10 发布的 v6.1 ...
- pdo数据操作,3-4,0724
require 'connect.php'; $linshi = $dbh->prepare('UPDATE `category` SET `name` = :name, `alias`=:al ...
- angularJS 格式化日期 转载
angularjs中的filter(过滤器)——格式化日期的date 标签: filterangularjsdate http://blog.csdn.net/smile_panda/article/ ...
- tensorflow roadshow 全球巡回演讲 会议总结
非常荣幸有机会来到清华大学的李兆基楼,去参加 tensorflow的全球巡回.本次主要介绍tf2.0的新特性和新操作. 1. 首先,tensorflow的操作过程和机器学习的正常步骤一样,(speak ...
- Shell脚本 一键重启
有个程序必须用 kill -9 pid号 关闭后,才能重新启动,每次都要手动查找pid号,麻烦容易出错,写个shell脚本 就三行很方便,自动查找pid号-关闭程序-重启程序 #!/bin/bas ...
- Linux恢复删除的文件
linux恢复删除的文件 先介绍下一些文件的基本概念: · 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘 ...
- Nginx安装(yum源)
CentOS7 $ vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/c ...