存储过程和函数作为数据库的一部分,为什么是学习之痛。
项目实际开发,考虑性能和代码维护,绝对不用存储过程。
如果单纯自己写个小程序糊弄人玩,还可以写写。
【学习】
在数据库中定义一些SQL语句集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。
避免开发人员重复编写相同的SQL语句。
在MySql服务器中存储和执行,可以减少客户端和服务端的数据传输。
delimiter && create procedure pro_book(in bT int,out count_num int) reads sql data begin select count(*) from t_book where bookTypeId=bT; end && delimiter ; call pro_book(1,@total);
函数
delimiter && create function func_book(bookId int) returns varchar(20) begin return( select bookName from t_book where id=bookId); end && delimiter ; select func_book(1);
●变量的使用
delimiter &&
create procedure pro_user()
begin
declare a,b varchar(20);
insert into t_user values(NULL,a,b);
end
&&
delimiter ;
call pro_user();
●为变量赋值
delimiter &&
create procedure pro_user2()
begin
declare a,b varchar(20);
set a='jjj',b='888';
insert into t_user values(NULL,a,b);
end
&&
delimiter ;
call pro_user2();
delimiter &&
create procedure pro_user3()
begin
declare a,b varchar(20);
select name,pass into a,b from t_user2 where id=1;
insert into t_user values(NULL,a,b);
end
&&
delimiter ;
call pro_user3();
●游标的使用
delimiter &&
create procedure pro_user4()
begin
declare a,b varchar(20);
declare cur_t_user2 cursor for select name,pass from t_user2;
open cur_t_user2;
fetch cur_t_user2 into a,b;
insert into t_user values(NULL,a,b);
close cur_t_user2;
end
&&
delimiter ;
call pro_user4();
●流程控制的使用
存储过程和函数中可以使用流程控制。MySql使用if、case、loop、leave、iterate、repeat、while来控制。
●if语句
delimiter &&
create procedure pro_user5(in n int)
begin
select count(*) into @num from t_user2 where id=n;
if @num>0 then update t_user2 set name='yyy',pass='555' where id=n;
else insert into t_user2 values(NULL,'java','1234');
end if;
end
&&
delimiter ;
call pro_user5(1);
call pro_user5(3);
●case语句
STOP!!!
STOP!!!
STOP!!!
好了到此为止了!学的知识实际应用不上!!!