mysql prepare存储过程

近来用了下存储过程,简单的记录总结一下。

使用存储过程,可以对数据库进行更复杂写的逻辑处理。比如说,我要将一个表subscriber的最大id获取到,然后复制给另外一张表usage的auto_increment,就可以这样做。

1. 获取最大id

SET @m = (SELECT MAX(id) + 10000 FROM subscriber);

如果表是空的,那么获取的最大id就是null,这个可能导致后续语句执行出错,可以加一个判断,改为

SET @m = (SELECT ifnull(MAX(id),0) + 10000 FROM subscriber);

ifnull(par1,par2)的意思是,如果par1不是空,那就返回par1,否则返回par2

@m为所要使用的参数

2. 准备赋值AUTO_INCREMENT的sql语句,此处用到了concat函数

SET @s = CONCAT('ALTER TABLE usage AUTO_INCREMENT=', @m);

3. prepare并执行

PREPARE stmt1 FROM @s;

EXECUTE stmt1;

4. 释放资源

DEALLOCATE PREPARE stmt1;

此处第二步也可以通过别的方法进行参数传递,比如:

SET @m = (SELECT min(id) FROM subscriber);
PREPARE stmt1 FROM "select * from subscriber where id=?";
EXECUTE stmt1 using @m;
DEALLOCATE PREPARE stmt1;

但是这种传参方法对于alter table auto_increment不起作用, update语句是可以的,亲测有效。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值