存储过程
*存储过程是sql语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理
存储过程优点
1.增强sql语句的灵活性
2.实现较快的执行速度 第一次和一般一样,第二次不用语法分析,编译,直接从内存执行
3.减少网络流量 客户端通过http请求发sql字节多,只需调用存储过程名字,和要操作的id,如删除操作
创建存储过程
in表示该参数的值必须在调用存储过程时指定,在存储过程中,不能返回
out表示该参数的值可以被存储过程改变,并可以返回
inout表示该参数的值必须在调用存储过程时指定,可以被改变,返回
简单的存储过程
create procedure sp1() select version();
call sp1; //调用存储过程
IN 存储过程 id = id 会将表里的数据全部删除,in里的参数不能与字段起名一样
create procedure removeUserId(in id int unsigned)
begin
delete from tdb_goods_cates where id = id;
end
call removeUserId(3)
IN OUT 删除一行,返回剩余行数
delimiter $;
create procedure removebrandAndReturnNums(in p_id int unsigned, out nums int unsigned)
begin
delete from tdb_goods_brands where p_id = brand_id;
select count(brand_id) from tdb_goods_brands into nums;
end
delimiter ;
call removebrandAndReturnNums(4,@nums);
select @nums //用户变量
三个参数 存储过程
delimiter $
create procedure removeGoodsAndReturn(in p_brand smallint unsigned,out deleteGoods smallint unsigned,out goodsCount smallint unsigned)
begin
delete from tdb_goods where brand_id = p_brand;
select row_count() into deleteGoods;
select count(goods_id) from tdb_goods into goodsCount;
end
delimiter ;
call removeGoodsAndReturn(7,@a,@b);
select @a;