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 ‘[email protected]‘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;

原文地址:https://www.cnblogs.com/yanxiatingyu/p/9368134.html

时间: 2024-10-11 20:43:10

mysql 存储过程 与 循环的相关文章

mysql存储过程之循环遍历查询结果集

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除DROP PROCEDURE IF EXISTS init_reportUrl; -- 创建存储过程CREATE PROCEDURE init_reportUrl()BEGIN -- 定义变量 DECLARE s int DEFAULT 0; DECLARE report_id varchar(255); DECLARE report_url varchar(256); -- 定义游标,并将sql结果集赋值到游标中 DECLARE r

MySQL存储过程中的3种循环

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了. 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO 下面首先使用第一种循环编写一个例子. mysql> create procedure pro10() -> begin ->

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

当PHP遇到MySQL存储过程

1.MySQL存储过程 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编

mysql存储过程笔记

mysql  存储过程: 用变量做表名: 简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mysql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,然后用sp_executesql调用该语句. 这在mysql5.0之前是不行的,5.0之后引入了一个全新的语句,可以达到类似sp_executesql的功能(仅对procedure有效,function不支持动态查询),比如在用游标循环遍历多个表

Mysql存储过程中使用cursor

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

mysql存储过程详解

1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以