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. 前后台联调,突然所有的接口请求状态为200,但response什么都没有只有一句灰色的英文

    问题解决了,图就下次遇到截图补上: 解决问题的方法,是让后台查看数据库是否锁库,或者更改什么配置文件例如.xml文件,还有就是ip错误:

  2. MySQL 服务无法启动

    拷贝的mysql数据库配置文件的路径网络更改

  3. opencv 学习笔记

    Opencv 笔记 路径问题: 路径输入:Opencv载Qt中不能出现汉字,路径也不能出现汉字在vs中可以出现. (”D:/QTopencv/.1jpg”)=(”D:\\QTopencv\\.1jpg ...

  4. spring 代理注解 <aop:aspectj-autoproxy />

    spring默认使用jdk的代理方式,使用jdk的代理方式我们知道,代理的类需要实现一个接口,若果没有就会报,java.lang.NoSuchMethodException: com.sun.prox ...

  5. 百度地图API自动定位和3种导航

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. javascript sourcemap

    [javascript sourcemap] 暂时只有Chrome浏览器支持这个功能.在Developer Tools的Setting设置中,确认选中"Enable JavaScript s ...

  7. linus jsch文件下载

    package com.osplat.util;import java.io.File;import java.io.FileNotFoundException;import java.io.File ...

  8. Shader基础(固定管线着色器)

    在Shader的编码中,要养成不加空格的习惯,否则会有时候出现一些错误 固定管线着色器: 优点:实现简单 缺点:处理的效果比较差 //设置Shader的路径 Shader "MyFixedS ...

  9. mysql里max_allowed_packet的作用

    MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置: 代码如下: show VAR ...

  10. python 函数的定义及传参

    函数是一个通用的程序结构部件,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 定义一个简单的函数: >>> def test(a): #创建一个函数,函数名是test ...