学习之痛(数据库->存储过程和函数)

时间:2022-08-08 04:57:10

存储过程和函数作为数据库的一部分,为什么是学习之痛。

项目实际开发,考虑性能和代码维护,绝对不用存储过程。

如果单纯自己写个小程序糊弄人玩,还可以写写。

【学习】

在数据库中定义一些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!!!

好了到此为止了!学的知识实际应用不上!!!