一.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的两种注释
/*多行注释*/
#单行注释
今天的分享就到这里啦!