一.mysql无法识别运算符
首先要写出存储过程通用分页得先解决mysql无法识别运算符的问题
mysql虽然是企业常用的数据库但是却无法在limit后面识别运算符
例如
select * from tb_User limit 1+1,5;
是不通过的
那么我们可以通过这个来实现
limit 后面第一个数 是 (开始的位置) 第二个数是 (长度);
而不是跟oracle与sql server一样的 (开始的位置与结束的位置)
-- 1.无法使用别mysql运算符
SET @index=(7-2)*1;
SET @sql=CONCAT(' select * from tb_User limit 0,',@index);
PREPARE mysql FROM @sql;
EXECUTE mysql;
以此我们就可以知道通用的存储过程
二.存储过程通用分页
-- 2.存储过程通用分页
DELIMITER $$
CREATE
PROCEDURE `mysql`.`procpaging06`(IN pageindex INT,IN myrow INT)
BEGIN
SET @mystart=((pageindex-1)*myrow+1);
SET @sql=CONCAT(' select * from tb_User limit ',@mystart,',',myrow);
PREPARE mysql FROM @sql;
EXECUTE mysql;
END$$
DELIMITER ;
-- 调用
CALL `mysql`.`procpaging06`(1,5);
其中的
SET @sql=CONCAT(' select * from tb_User limit ',@mystart,',',myrow);
中的',@mystart,'的两个逗号相当于是oracle中的||也就是拼接的意思
而其中的$$相当于;(逗号)
是结束的意思;因为每一行都有结束;
而 为了不让最后结束时电脑误认在 begin end 时存储过程已经完全结束(delimiter定界符结束)
因此使用$$来区分,用其他符号也是可以的.
三.自定义函数判断性别
-- 3.自定义函数判断性别
DELIMITER $$
CREATE
FUNCTION `mysql`.`myfunctionpaging02`(mysex INT)
RETURNS VARCHAR(10)
BEGIN
CASE
WHEN 1 THEN RETURN '男';
WHEN 2 THEN RETURN '女';
ELSE RETURN '人妖';
END CASE;
END$$
DELIMITER ;
-- 调用
SELECT `mysql`.`myfunctionpaging02`(1);
一定要注意!
在存储过程跟自定义函数中delimiter前面是不可以有空格的;不然mysql识别不出来
要报代码错误,并且在自定义函数的参数不可以是
FUNCTION `mysql`.`myfunctionpaging02`(in mysex INT)
自定义函数中是不可以在参数中加 in ;
在mysql中的性别可以定义为enum这个数据类型,在长度中添加你给他命名的数据例如我这里添加了
男 女 跟 保密,当然最好在设置个默认值
可获得如下效果
四.limit优化+注释
因为在企业中所运用的数据都是数以亿记的,数据太多会使得电脑运行慢,
而用一般的方法会使得电脑本身配置慢的卡的惨不忍睹
这个时候我们需要使用优化的方法让电脑运行快一点;
我们可以用子查询一条一条的查询获得五条数据,如下
-- 4.优化limit
SELECT * FROM tb_User WHERE id >=(
SELECT id FROM tb_User LIMIT 10000,1)
LIMIT 5;
-- 单行注释
/*多行注释*/
#单行注释
欢迎各路大神指正哦!