对 MySQL LIMIT 使用负值有啥作用?
Posted
技术标签:
【中文标题】对 MySQL LIMIT 使用负值有啥作用?【英文标题】:What does using a negative value for MySQL LIMIT do?对 MySQL LIMIT 使用负值有什么作用? 【发布时间】:2012-04-08 19:48:03 【问题描述】:那么当您在 LIMIT 子句中使用负值时会发生什么?会不会产生负面影响(有点双关语)?
我没有看到任何关于此的文档,我记得 mysql 论坛是 sux。
背景: 我正在使用 MySQL CE 5.5.20。我编写了一个带有 int 参数的存储过程,并将其用于 LIMIT 子句。如果我愿意,我需要一种方法来返回所有行,所以我尝试在我的存储过程/例程中为 limit 参数传入 -1,这很有效。
【问题讨论】:
如果你真的想设置一个限制子句,为什么不使用一个非常大的整数而不是 -1 呢? @DenysSéguret 因为使用 -1 或 0 很常见(或者至少是编程世界中一种熟悉的做法来表示“无限制”。这就是我首先尝试它的原因。否则我的选择将是随机的。 【参考方案1】:在其他版本的 MySQL 上使用它时,可能会产生错误。
【讨论】:
好的,我刚刚检查过,如果您在正常查询中使用负限制,则会出错。但是当您在过程中将limit作为参数传递并在limit中使用该参数时,参数的负值将返回所有行。【参考方案2】:根据documentation,必须是非负整数
LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。
听起来你遇到的是一个未记录的错误,如果参数不符合文档要求,mysql应该抛出错误。
我的建议是在存储过程中使用语法更正的 SQL。您仍然可以使用负整数作为标志来显示所有内容。像这样的
IF myparam >= 0 THEN
SELECT * FROM `mytable` LIMIT myparam;
ELSE
SELECT * FROM `mytable`;
END IF;
【讨论】:
我接受这个答案,因为这是正确的。我希望有人指出这只是一个未记录的功能或早期版本的错误。以上是关于对 MySQL LIMIT 使用负值有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL LIMIT 范围 0,500 和 1, 500 有啥区别?
有啥办法可以防止 input type="number" 得到负值?