对 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 有啥区别?

在 EXISTS 查询中使用 LIMIT 有啥意义吗?

有啥办法可以防止 input type="number" 得到负值?

数据库limit(1,5)用法

MySQL - 使用 LIMIT 有效地将两个 select 语句组合成一个结果

css中负值(px)的问题有啥?