MySql-存储过程(理解为预处理多返回值函数)

  存储过程(预处理)
  1. 1.语法结构:create [definer = {user | current_user}] 

procedure sp_name ([proc_parameter[,...]])  [characteristic...] routine_body

  proc_parameter: [in | out | inout] param_name type

in:该参数的值必须在调用存储过程时指定

       out:该参数的值可以被存储过程改变,并且可以返回

 inout:表示该参数在调用时指定,并且可以被改变和返回给调用者

过程体:由合法的sql语句构成,对于记录的增删改查及多表连接的sql语句,过程体如果超过两个语句,必须使用begin...end,复合语句内可以声明变量,循环,控制语句。
2. 
创建不带参数的存储过程:create procedure sp1() select version();  //创建一个名为sp1的存储过程 功能是返回版本
3. 
带有in类型参数的存储过程:create procedure removeUserById(in myId int unsigned)

 -> begin

     -> delete from users where id = myId; //标准语句 参数赋值 参数名字不能和字段名相同

     -> end

     -> //
4. 
调用存储过程:call sp_name([parameter[,...]]) //若存储过程有参数,则()不能省略

   call sp_name[()]

示例:call sp1; call sp1();

     call removeUserById(3);
5. 
修改存储过程:alter procedure sp_name [characteristic...] comment ‘string’

| {contains sql | no sql | reads sql data | modifies sql data}

| sql security {definer | invoker}
6. 
删除存储过程:drop procedure [if exists] sp_name

示例:drop procedure removeUserById;

7.带有in和out类型参数的存储过程:

create procedure removeUserAndReturnUserNums(in p_id int unsigned,out userNums int unsigned)

    -> begin

    -> delete from test where id = p_id;

    -> select count(id) from test into userNums; //userNums代表接收表test的id总数

    -> end

    -> //

调用:call removeUserAndReturnUserNums(2,@nums); //@nums代表变量

查看:select @nums;

8.带有多个out类型参数的存储过程

create procedure removeUserByAgeAndReturnInfos(in p_age smallint unsigned,out deleteUsers smallint unsigned,out userCountssmallint unsigned)

 -> begin 

-> delete from users where age=p_age;  根据p_age参数删除表的记录

-> select row_count() into deleteUsers;  返回改变字段的数量并赋给deleteUsers

    -> select count(id) from users into userCounts; 返回id数量并赋给userCounts

    -> end

    -> //

in即为输入的变量    out是输出的变量

  row_count():返回改变的字段的数量

调用: call removeUserByAgeAndReturnInfos(20,@a,@b);

调用,删除age为20的所有记录,并返回改变字段的总数给a,返回剩余id数量给b。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limaning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值