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,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
随机推荐
- .NETMVC小笔记
.NETMVC如何不引用_Layout.chtml view文件夹里面有个_ViewStart.cshtml文件,打开可以看到 @{ Layout = "~/Views/Shared/_La ...
- SQL Server--存在则更新问题
在博客园看到一篇讨论特别多的文章“探讨SQL Server并发处理存在就更新七种解决方案”,这种业务需求很常见:如果记录存在就更新,不存在就插入. 最常见的做法: BEGIN TRANSACTION ...
- 源码编译安装Python3及问题解决
https://chowyi.com/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85Python3%E5%8F%8A%E9%97%AE%E ...
- Kotlin系列之序列(Sequences)源码完全解析
Kotlin系列之序列(Sequences)源码完全解析 2018年06月05日 22:04:50 mikyou 阅读数:179 标签: Kotlin序列(sequence)源码解析Androidja ...
- 辅助测试工具xip.io
http://xip.io/ https://github.com/basecamp/xip-pdns
- .html() 与.text() 获取值、取值 区别
1.html代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- Displacement Mapping
[Displacement Mapping] Displacement Mapping(移位贴图). Normal maps的另一个应用是displacement mapping,在这个应用中,细节的 ...
- Bootstrap 轮播
[Bootstrap 轮播] 1.要设置一个轮播界面,需要注意以下几点: 1)根div 必须为 class="carousel slide" 2)根div下含有三块子div a)& ...
- Multiple APK Support
[Multiple APK Support] Multiple APK support is a feature on Google Play that allows you to publish d ...
- SVN基本页面