mysql 存储过程 与 循环
mysql 操作同样有循环语句操作,三种标准循环模式:while, loop,repeat, 外加一种非标准循环:goto [在c或c#中貌似出现过类型循环但是一般不建议用!] 一般格式为:delimiter // 定义结束符 drop procedure if exists wk; 假如存在则删除create procedure name([in | out | input] 参数) begin while-loop-repeat-mysql-code end //
delimiter ; 还原
定义变量: declare count int default 1; 定义count为int类型 并且设置初始值为1; set count=1; 修改count变量的值为1 set count=count+1; 相当于python里面的自加打印值: select count;
条件语句:if mysql_condtion then; mysql_codeelse mysql_codeend if;
if mysql_condtion then; mysql_codeend if;
Sample_1:while while mysql_condtion do mysql_code end while; Sample_2:loop
loop_name:loop mysql_codeend loop;
Sample_3:repeat
repeat mysql_code until mysql_condtion end repeat;
BEGIN
declare i int default 0;
loop_label: loop
set i=i+1;
if i<8 then
iterate loop_label;
end if;
if i>=10 then
leave loop_label;
end if;
select i;
end loop loop_label;
END
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql
使用存储过程的优点:
#1. 用于替代程序写的SQL语句,实现程序与sql解耦 #2. 基于网络传输,传别名的数据量小,而直接传sql数据量大
使用存储过程的缺点:
#1. 程序员扩展功能不方便
补充:程序与数据库结合使用的三种方式

#方式一:
MySQL:存储过程
程序:调用存储过程
#方式二:
MySQL:
程序:纯SQL语句
#方式三:
MySQL:
程序:类和对象,即ORM(本质还是纯SQL语句)

对于存储过程,可以接收参数,其参数有三类: #in 仅用于传入参数用 #out 仅用于返回值用 #inout 既可以传入又可以当作返回值
废话不多说 上代码 #loop 循环delimiter //drop procedure if exists sum2;create procedure sum2(args int)begin declare sum int ; declare count int ; set count=1; set sum=1; loop_name:loop if count>args then leave loop_name; end if; set sum=sum+count; set count=count+1; end loop; select sum; 输出end //delimiter ; delimiter //drop procedure if exists sum2;create procedure sum2(args int)begin declare sum int ; declare count int ; set count=1; set sum=1; loop_name:loop --循环开始 if count>args then leave loop_name; --判断条件成立则结束循环 end if; set sum=sum+count; set count=count+1; end loop; --循环结束 select sum; --输出结果end //delimiter ;
desc copy;copy_struct: id int priymary key auto_increment sname varchar(25) not null
#无参 存储过程delimiter //drop procedure if exists loopcc;create procedure loopcc()begin declare i int; set i=0; repeat insert into copy (sname) values (now()); set i=i+1; until i>=20 end repeat;end //delimiter;
#有参 存储过程delimiter //drop procedure if exists sum3;create procedure sum3(a int)begin declare sum int default 0; declare i int default 1; repeat -- 循环开始 set sum=sum+i; set i=i+1; until i>a end repeat; -- 循环结束 select sum; -- 输出结果end//delimiter ;---执行存储过程call sum3(100);drop prodedure if exists sum3;
desc register_time;register_time struct:id int parmary key auto_increment,name varchar(15) not null,register_time datetime not null,email varchar(60) not null default 'xxxxxxx@126.com'gender enum('male','female') default 'male'
#存储过程delimiter //create procedure p1()BEGIN DECLARE num INT ; SET num = 0 ; WHILE num < 100000 DO --循环开始 insert into index_test (name,regiter_time) values('李宗军',now()); SET num = num + 1 ; END WHILE ; --结束
END //delimiter ;
desc copy;copy_struct: id int priymary key auto_increment sname varchar(25) not null
#while 循环delimiter //drop procedure if exists wk;create procedure wk()begin declare i int; set i=1; while i<8 do insert into copy (sname) values ('你大爷'); set i=i+1; end while;end //delimiter ;
desc student;student_stuct:sid int parmary key auto_increment,gender enum('male','female') default 'male',class_id int not null,sname varchar(32) not null
#传参数查询 指定范围的 数据
delimiter //
drop procedure if exists get_data;
create procedure get_data(in id_value int)
begin
select * from student where sid>id_value;
end //
delimiter ;
call get_data(4);
drop procedure get_data;
create table emp(
eid int primary key auto_increment,
ename varchar(20),
sex enum('male','female') not null default 'male',
hire_time datetime default now(),
salary varchar(15) not null default 'egon大哥看着给!',
department_fk int
);
insert into emp (ename,department_fk) values('egon',2);
查询员工
--创建存储过程
delimiter //
drop procedure if exists get_emp_info;
create procedure get_emp_info(eid int)
begin
select * from emp where emp.eid=eid;
end //
delimiter ;
call get_emp_info(1);
drop procedure get_emp_info;
同样的 在begin里面可执行其他操作来进行值得修改与查询 Sample: begin update emp set sex='female' where eid=1; end begin truncate emp; end begin delete from emp; end out 参数的使用 delimiter //drop procedure if exists get_res;create procedure get_res(out res int)begin select department_fk from emp where eid=res; set res=5end // delimiter ; set @res=1;call get_res(@res);select @res;
mysql 存储过程 与 循环的更多相关文章
- MySql存储过程 CURSOR循环
游标 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力. 使用步骤 声明一个游标: declare 游标名称 CU ...
- mysql 存储过程、循环
CREATE PROCEDURE questionProc() BEGIN declare pgId ); declare pGuid varchar(); -- 定义游标卡尺 declare don ...
- mysql存储过程双重循环示例
BEGIN ); DECLARE done INT DEFAULT FALSE; DECLARE cursor_rule CURSOR FOR SELECT s.id FROM d_menu_type ...
- mysql存储过程之循环
链接: http://www.blogjava.net/rain1102/archive/2011/05/16/350301.html
- MySQL存储过程使用实例详解
本文介绍关于在MySQL存储过程游标使用实例,包括简单游标使用与游标循环跳出等方法 例1.一个简单存储过程游标实例 DROP PROCEDURE IF EXISTS getUserInfo $$CRE ...
- MySQL存储过程中的3种循环
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
- MySQL 存储过程循环
MySQL 存储过程循环 MySQL循环语句(包括WHILE,REPEAT和LOOP)来根据条件反复运行代码块. MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块. MySQL中有三个 ...
- MySql 存储过程 光标只循环一次
[1]MqSql 存储过程 光标只循环一次 针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析: (1)存储过程有问题(仔细检查语法.控制变量.条件等等) (2)保证存储过程正确.调用过 ...
- MySQL存储过程中的3种循环【转载】
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
随机推荐
- CSS3性能体验
如今许多新技术名词在不断的被提及中,已然向我们靠近.某篮球运动员说了:“变向过人”不是超级明星的专利,也许我也可以试着去做,现在看起来效果还不错...那么,现在我们来体验CSS3:CSS3中的动画功能 ...
- git工作操作步骤
上班开始,打开电脑,git pull:拉取git上最新的代码: 编辑代码,准备提交时,git stash:将自己编辑的代码暂存起来,防止git pull时与库中的代码起冲突,否则自己的代码就白敲了: ...
- mysql 去除字符串中前后空格
update table set field = replace(replace(replace(field,char(9),''),char(10),''),char(13),'');
- Ubuntu Spark 环境搭建(转)
在安装Spark之前,我们需要在自己的系统当中先安装上jdk和scala 可以去相应的官网上下载: JDK:http://www.oracle.com/technetwork/java/javase/ ...
- python基础学习Day11 函数名的应用、闭包、迭代器
一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...
- vue 异步请求
摘自 ECMAScript 6 简介: 大家习惯将 ECMAScript 6.0 简称为 ES6,它是 Javascript 语言的下一代标准,它的目标,是使得 Javascript 语言可以用来编写 ...
- io输出流变为输入流
java 输出流转化为输入流 new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
- Springboot 静态资源
说下默认映射的文件夹有: classpath:/META-INF/resources classpath:/resources classpath:/static classpath:/public ...
- Linq to sql 之 事务
描述:linq 是自带事物的.如果建了两个linq to sql 类,各自访问不同的数据库,事物如何保证呢. 验证:采用常用的COM+事务来验证一下是否有效. ServiceConfig config ...
- Ext.require 的作用(转)
Ext.require:用到哪些组件,然后就预先加载,多余不用加载的组件 在实际环境中我们都会用 ext-all.js, 但是在开发调试的时候,我们使用 require 的话它可以动态加载单个的 js ...