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 存储过程 与 循环的更多相关文章

  1. MySql存储过程 CURSOR循环

    游标 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力. 使用步骤 声明一个游标: declare 游标名称 CU ...

  2. mysql 存储过程、循环

    CREATE PROCEDURE questionProc() BEGIN declare pgId ); declare pGuid varchar(); -- 定义游标卡尺 declare don ...

  3. mysql存储过程双重循环示例

    BEGIN ); DECLARE done INT DEFAULT FALSE; DECLARE cursor_rule CURSOR FOR SELECT s.id FROM d_menu_type ...

  4. mysql存储过程之循环

    链接: http://www.blogjava.net/rain1102/archive/2011/05/16/350301.html

  5. MySQL存储过程使用实例详解

    本文介绍关于在MySQL存储过程游标使用实例,包括简单游标使用与游标循环跳出等方法 例1.一个简单存储过程游标实例 DROP PROCEDURE IF EXISTS getUserInfo $$CRE ...

  6. MySQL存储过程中的3种循环

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

  7. MySQL 存储过程循环

    MySQL  存储过程循环 MySQL循环语句(包括WHILE,REPEAT和LOOP)来根据条件反复运行代码块. MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块. MySQL中有三个 ...

  8. MySql 存储过程 光标只循环一次

    [1]MqSql 存储过程 光标只循环一次 针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析: (1)存储过程有问题(仔细检查语法.控制变量.条件等等) (2)保证存储过程正确.调用过 ...

  9. MySQL存储过程中的3种循环【转载】

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

随机推荐

  1. [PC]PHPCMS v9.5.6整合UEditer1.4.2

    ----------------------------------------------------------------------------------------------- 首先去U ...

  2. replace()方法解析

    search(),match(),用于查找指定字符串返回首次出现的索引值与指定的字符串.这篇我们讲找到指定字符串之后将其替换掉.直接贴: var str="Visit Microsoft!& ...

  3. deb 和 rpm 后缀文件 区别和安装

    https://blog.csdn.net/u010977122/article/details/52986217 下载一个ATOM 的deb的安装包

  4. C++ 简单实现MFC ListControl 点击列头排序

    说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...

  5. vue --轮播图

    轮播图,可以使用mint-ui中的swipe HTML: <Swipe :auto="4000"> <SwipeItem v-for="item in ...

  6. kubectl windows

    https://storage.googleapis.com/kubernetes-release/release/v1.10.3/bin/windows/amd64/kubectl.exe

  7. 1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)

    Impala使用的端口 Impala使用下表中列出的TCP端口.在部署Impala之前,请确保在每个系统上打开这些端口. Component Service Port Access Requireme ...

  8. NBU 还原LINUX ORACLE RAC数据库(CRM)

    CRM集群数据库恢复 linux centos 6.6 oracle 11.2.0.3 集群环境 1.53 oraclea 1.54 oracleb 在linux操作系统root用户下安装好NBUci ...

  9. javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

    定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...

  10. c#实现动态加载Dll(转)

    c#实现动态加载Dll 分类: .net2009-12-28 13:54 3652人阅读 评论(1) 收藏 举报 dllc#assemblynullexceptionclass 原理如下: 1.利用反 ...