標籤:while 執行 email 開始 通過 info rgs code 員工
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_code
else
mysql_code
end if;
if mysql_condtion then;
mysql_code
end if;
Sample_1:while
while mysql_condtion do
mysql_code
end while;
Sample_2:loop
loop_name:loop
mysql_code
end loop;
Sample_3:repeat
repeat mysql_codeuntil mysql_condtionend 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=5
end //
delimiter ;
set @res=1;
call get_res(@res);
select @res;
mysql 預存程序 與 迴圈