mysql存储过程通用分页+自定义函数+优化limit

本文介绍了如何解决MySQL中无法识别运算符的问题,以实现存储过程的通用分页。通过调整LIMIT语法,结合自定义函数,创建了一个实用的分页存储过程。同时,文章还提到了在大规模数据下对LIMIT进行优化的方法,以及MySQL的注释方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.mysql无法识别运算符

如果要实现存储过程分页得先解决mysql无法识别运算符的问题

mysql虽然是企业常用的数据库但是也有一定的缺陷

例如 

select *  from  person limit  1+1,5;

是不通过的

所以我们可以通过以下的代码来实现

#1 解决sql语句无法识别运算符
SET @t=13-10;
SET @sql=CONCAT('select * from person limit 0,',@t);
PREPARE sql1 FROM @sql;
EXECUTE sql1;

limit 后面第一个数 是  (开始的位置)  第二个数是 (长度);

二.存储过程通用分页

 # 2 通用的分页存储过程
 DECLARE &&
CREATE 
PROCEDURE 'test'.'persona'(IN X INT,IN Y INT)
BEGIN
SET@ x1=CONCAT('select * from person limit',(X-1)*Y,',',Y,'');
PREPARE Y FROM @x1;
EXECUTE Y:
END &&
DELIMITER:
#调用存储过程
CALL 'test','persona'(1,5); 

其中的

SET@ x1=CONCAT('select * from person limit',(X-1)*Y,',',Y,'');

',@mystart,'的两个逗号是拼接的意思

而其中的&&相当于;(分号)

是结束的意思,因为每一行都有结束,

为了不让最后结束时电脑误认为在 begin end 时存储过程已经完全结束(delimiter定界符结束)

因此使用&&来区分,用其他符号也是可以的.

三.自定义函数判断性别

 # 3 自定义函数:传入值(0显示值为女,1显示值为男)
   DELIMITER::
   CREATE FUNCTION gender(num INT);
   RETURN VARCHAR(2)
   BEGIN
   CASE num
   WHEN 1 THEN RETURN '男':
   WHEN 2 THEN RETURN '女':
   END CASE;
   END::
   DELIMITER;
   SELECT gender;

注意在存储过程跟自定义函数中delimiter前面不可以有空格,不然mysql识别不出来

四.limit优化+注释

在企业中所运用的数据都是数以亿记的,数据太多会使得电脑运行很慢

我们可以用子查询一条一条的查询获得五条数据,如下

SELECT * FROM  person WHERE id>=
  (SELECT id FROM person LIMIT 1000,1)
  LIMIT 5;

然后介绍一下mysql的两种注释

/*多行注释*/
  
#单行注释
  
今天的分享就到这里啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值