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. 【剑指offer】将字符串中的空格替换成"%20"

    #include <iostream> #include <string> using namespace std; char *ReplaceSpace(char *str, ...

  2. [namespace]PHP命名空间的使用基础

    -------------------------------------------------------------------------------------------------- 一 ...

  3. IIS 7配置需要注意的地方,RTX SDK运行必须Enable 32-bit Applications为True

    简单说一下IIS 7的配置里那些需要注意的 首先每个网站都必须运行在特定得程序池上,程序池的配置中,关键的几个如下图: 1. .Net Framework Version : 这个设置的是你项目用到的 ...

  4. 三,APIView、GenericAPIView、Mixins总结

    概述 APIView是DRF的视图层中最基本的类,它相当于Django中的View类,其他视图类都是通过继承APIView实现的. GenericAPIView继承于APIView,在其父类的基础上为 ...

  5. python基础学习Day11 函数名的应用、闭包、迭代器

    一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...

  6. 修改php.ini 的timezone

    php运行模式有apache 和 cli模式 这里讲cli 模式的php.ini设置 1.查找php.ini位置 php -i | grep php.ini 这样是表示 要改的文件 在/etc/php ...

  7. JMeter学习(三十七)Jmeter录制手机app脚本(转载)

    转载自 http://www.cnblogs.com/yangxia-test 环境准备: 1.手机 2.wifi 3.Jmeter   具体步骤: 1.启动Jmeter: 2.“测试计划”中添加“线 ...

  8. 每月IT摘录201810

    技术 1.Redis.对于单机实例,我们采用原生主从(Master-Slave)模式实现高可用,常规模式下对外仅暴露 Master 节点.由于使用原生 Redis,所以单机实例支持所有 Redis 指 ...

  9. 复杂链表的复制(python)

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  10. poj1308(并查集)

    题目链接:http://poj.org/problem;jsessionid=436A34AE4BE856FB2DF9B264DCA9AA4E?id=1308 题意:给定一些边让你判断是否构成数. 思 ...