mysql 存储过程学习(总)
#一。存储过程和存储函数的创建案例
CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT)
BEGIN
set c=a+b;
end;
call myprocedure(1,2,@num);#存储过程需要call 来执行 @num 这个是执行的结果,我们通过select 来调用
SELECT @num;
CREATE FUNCTION myfunction(a INT) RETURNS INT(2)#RETURNS 要返回的类型
BEGIN
set a=a+1;
RETURN a;
end;
SELECT myfunction(2)+@num;
#二。变量的使用
#通用公式 :DECLARE 变量名称 变量类型 DEFAULT 默认值 (如果不写DEFAULT,则默认值为NULL)
#给变量赋值用set 或者select ... into 变量名
CREATE FUNCTION myfunction2(a INT) RETURNS INT(2)#RETURNS 要返回的类型
BEGIN
DECLARE b INT DEFAULT 100;
set a=b+1;
RETURN a;
end;
SELECT myfunction2(3);
SELECT myfunction(2),+@num;
CREATE FUNCTION myfunction3(a INT) RETURNS INT(2)
BEGIN
#相同的变量可以写在一起
# b,c,d为局部变量
DECLARE b,c,d INT DEFAULT 100;
set a=b+c+d;
RETURN a;
end;
SELECT myfunction3(2);
#三。定义条件和处理程序
#mysql 存储函数和过程可以将错误 变成我们想要的处理结果分2步骤
#1.定义错误条件 语法:DECLARE 条件名字 CONDITION for 错误编码
#2. 定义错误执行程序: DECLARE 类型(EXIT,CONTINUE)HANDLER for 条件名字 set @info='定义的含义';
CREATE TABLE contest(s1 int,PRIMARY KEY(s1));
CREATE PROCEDURE myprocedure2()
BEGIN
DECLARE myfirstcon CONDITION for 1062;
DECLARE CONTINUE HANDLER for myfirstcon set @info='主键冲突';
INSERT INTO contest VALUES(1);
INSERT INTO contest VALUES(1);
set @info='主键冲突1';
end;
call myprocedure2();
SELECT @info
# @info为用户变量
#备注:
-- 1. 局部变量:局部变量一般用在sql语句块中,比如存储过程的begin/end。
--
-- 2. 用户变量:用户变量的作用域要比局部变量要广。用户变量可以作用于当前整个连接,但是当当前连接断开后,其所定义的用户变量都会消失。
--
-- 3. 会话变量:服务器为每个连接的客户端维护一系列会话变量。(SET @num=1; #设置一个变量等于1 SELECT @num; #查询该变量)
--
-- 4. 全局变量:全局变量影响服务器整体操作。当服务器启动时,它将所有全局变量初始化为默认值(可以通过@@或global来操作系统变量)
#四。光标的使用
#声明光标 语法:DECLARE 光标名字 CURSOR FOR sql语句
#打开光标 OPEN 光标名称
#使用光标 FETCH 光标名称 into 。。。
#关闭光标 CLOSE 光标名称
CREATE PROCEDURE guangbiao()
BEGIN
DECLARE a VARCHAR(20);
DECLARE c VARCHAR(20);
DECLARE b int DEFAULT 0;
DECLARE myguangbiao CURSOR for SELECT title,body from 测试.articless;
DECLARE CONTINUE HANDLER for not FOUND set b=1;
OPEN myguangbiao;
read_loop:
LOOP
FETCH myguangbiao into a,c;
IF b=1 THEN
LEAVE read_loop;
end IF;
INSERT into 测试.aaa(text1,text) VALUES(a,c);
set b=0;
END LOOP read_loop;
CLOSE myguangbiao;
END;
call guangbiao();
#五。流程控制的使用
#1.IF 使用
create PROCEDURE iftest1()
BEGIN
DECLARE a int DEFAULT 10;
-- IF (a>1 &&a<20) THEN
IF (a>1 and a<20) THEN
SELECT 'ok';
ELSE SELECT 'No';
END IF;
END;
CALL iftest();
#2.case 使用
create PROCEDURE casetest()
BEGIN
DECLARE a int DEFAULT 10;
CASE a
WHEN a>10 then SELECT 'no';
WHEN 10 then SELECT 'ok';
ELSE SELECT 'nono';
end CASE;
END;
CALL casetest();
#3.loop 使用
CREATE PROCEDURE looptest()
BEGIN
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
my_loop:LOOP
set a=a+1;
if a>10 THEN LEAVE my_loop;
END if;
set b=a;
END LOOP my_loop;
SELECT b;
end;
CALL looptest();
#4.LEAVE 使用 跳出当前循环见上个测试用例 looptest相当于java循环中的break
#5.ITERATE 使用,跳转到循环头部执行,相当于java循环中的continue,ITERATE只能 使用在循环中
CREATE PROCEDURE ITERATEtest()
BEGIN
DECLARE a int DEFAULT 0;
DECLARE b int DEFAULT 0;
my_loop:LOOP
set a=a+1;
if a>10 THEN LEAVE my_loop;
ELSEIF a>5 THEN ITERATE my_loop;
END if;
set b=a;
END LOOP my_loop;
SELECT b;
end;
CALL ITERATEtest();
#6.REPEAT 带条件的循环
CREATE PROCEDURE REPEATtest()
BEGIN
DECLARE a int DEFAULT 0;
REPEAT
set a=a+1;
UNTIL a>10
END REPEAT;
SELECT a;
END;
CALL REPEATtest();
#7.WHILE 带条件的循环
CREATE PROCEDURE WHILEtest()
BEGIN
DECLARE a int DEFAULT 0;
WHILE a<10 DO
set a=a+1;
END WHILE;
SELECT a;
END;
CALL WHILEtest()
#查看存储过程和函数 状态和信息
show PROCEDURE STATUS like 'casetest%';
show CREATE FUNCTION 测试.myfunction;
show CREATE PROCEDURE 测试.casetest;
mysql 存储过程学习(总)的更多相关文章
- MySQL存储过程学习笔记
MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...
- MySql存储过程学习总结
创建存储过程 1.格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子: CREATE PROCEDURE proc1 (OUT s ...
- mysql存储过程学习(一)
转载 什么是存储过程,存储过程的作用及优点 mysql存储过程详细教程 mysql 使用存储过程批量插数据 一.存储过程介绍: 存储过程(Stored Procedure)是一组为了完成特定功能的 ...
- mysql存储过程学习
一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...
- MySQL 存储过程学习笔记
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- mysql存储过程学习第一天
摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在 ...
- mysql 存储过程学习
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- mysql 存储过程学习 汇总
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- mysql存储过程--学习
-- 存储过程示例一 inDROP DATABASE IF EXISTS tdemo;CREATE DATABASE tdemo CHARACTER SET=utf8; USE tdemo;CRE ...
随机推荐
- Apache common exec包的相应使用总结
最近在写一个Java工具,其中调用了各种SHELL命令,使用了Runtime.getRuntime().exec(command);这个方法.但是在我调用某个命令执行操作时,程序就卡在那了,但是其 ...
- Django跳转
跳转问题 如果我现在停留在文章的详情页,用户未登陆,如果你要评论,或者点赞就应该回到登陆页面登陆 如果登陆成功了,就要返回到当初跳转过来的页面 第一种通过前后端传送数据 $('.hit').click ...
- 20181106_线程之异常_取消_变量_安全Lock
一. 线程的异常处理: try { TaskFactory taskFactory = new TaskFactory(); List<Task> taskList = new List& ...
- MySql——编程
基本语法形式 语句块模式: 在mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法. 但又有所区别: 一个bigin...end;块,可以给定一个“标识符”,并且可以使 ...
- Java类的初始化与实例对象的初始化
Java对象初始化详解 2013/04/10 · 开发 · 1 评论· java 分享到:43 与<YII框架>不得不说的故事—扩展篇 sass进阶篇 Spring事务管理 Android ...
- [lua]判断nginx收到的是否json
local post_data = ngx.req.get_body_data() --[[ngx.log(ngx.ERR, 'post data:', post_data)]] local ok, ...
- Centos下Apache+Tomcat集群--搭建记录
一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内 ...
- @RestController的方法中 路径参数带.(点号)配置
如下面这种//http://localhost:8080/api/v1/user/info/email/test@163.com @RequestMapping(value = "/info ...
- GeoServer之图层的新建与发布
GeoServer之图层的新建与发布 GeoServer的图层发布并不复杂,在经过: 1.创建工作区 2.添加新的数据存储 3.编写styles 后:我们就可以很简单的创建图层了. 1.在新建图层中选 ...
- vue表单验证--veevalidate使用教程
vue表单验证----vee-validate使用教程 官网:https://baianat.github.io/vee-validate/ 一.安装 npm install vee-validate ...