存储过程

存储过程
存储过程(mysql)

  1. 什么是存储过程:(stored procedure)
    是在大型数据库的系统中是在大型数据库的系统中,为了完成特殊的功能而编写的一组sql语句集,存储过程在数据库中编译,用户通过指定的存储过程名,调用存储过程,如果存储过程带参数,在调用存储过程时传递参数.
  2. 跟一般的sql语句相比,使用存储过程有哪些优点,哪些缺点
    存储过程的优点:
    —减少了脚本的执行环节,缩短了获取数据时间
    —存储过程只在创建时编译,在调用使用时直接执行,不需要编译
    —一般的sql语句每条需要编译(执行计划)一次,所以存储过程效率高些
    —减少网络传输量,提高了传输速度
    —存储过程编译后存储在数据库服务器上
    ----使用的时候只需要指定存储过程的名称,如果有,并给出参数
    —而一般的sql语句需要执行语句字符串传输到数据库服务器上
    —相比于存储过程而言,向数据库服务端传送字符串长度比较大
    —安全性较高,为存储过程参数赋值只能用?号占位符,避免sql注入

存储过程的缺点:
—如果一个程序系统中大量的使用存储过程,当程序交付使用的时候,
—随客户端的需求增加会导致数据结构复杂,存储过程修改的代价会越来越大
—应用程序对于数据库特性依赖过高,存储过程就是属于数据库特性范畴

存储过程的语法:
create procedure 存储过程的名称([[in|out|inout]参数名 参数类型…])
begin
存储过程的sql语句块

end

案例:

/没有任何输入和输出参数的存储过程/
DELIMITER $$
CREATE

PROCEDURE `testdb`.`proc_noparam`()
BEGIN
select
      id ,username userName,userpassword userPassword,age,address
    from t_user;
END$$

DELIMITER ;

/只有两个输入参数的存储过程/
DELIMITER $$
CREATE

PROCEDURE `testdb`.`proc_intwoparams`(in uname varchar(20),in uaddress varchar(20))
BEGIN
select *
    from t_user
    where 
       username like concat('%',uname,'%') and
       address like concat('%',uaddress,'%');
END$$

DELIMITER ;

/只有两个输出参数/
DELIMITER $$
CREATE

PROCEDURE `testdb`.`proc_outtwoparams`(out uname varchar(20),out uaddress varchar(20))
BEGIN
select username into uname from t_user where id=1;
    select address into uaddress from t_user where id=11;
    /*不能上面的两个语句合并成一条语句
    select username into uname,address into uaddress from t_user where id=1;
    */
END$$

DELIMITER ;
/输入参数一个,输出参数一个/
DELIMITER $$

CREATE

PROCEDURE `testdb`.`proc_inoneparamandoutoneparam`(in uname varchar(20),out uid int)
BEGIN
  select
     id
  from t_user
  where username=uname
  into uid;
  /*
     select id into uid from t_user where username=uname
  */ 
END$$

DELIMITER ;
/输入参数即输出参数/
DELIMITER $$

CREATE

PROCEDURE `testdb`.`proc_inoutparam`(inout uname varchar(20))

BEGIN
  select username into uname from t_user
  where username like concat('%',uname,'%')
  order by username  desc
  limit 1;
  /*上面的语句可以替换成下面的写法
  select username  from t_user
  where username like concat('%',uname,'%')
  order by username  desc
  limit 1
  into uname;
  */
END$$

DELIMITER ;
/存储过程中有两个结果集/
DELIMITER $$

CREATE

PROCEDURE `testdb`.`proc_tworesultset`()

BEGIN
 select id,username from t_user;
     select id,age,address from t_user;
END$$

DELIMITER ;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值