20
回答
mysql的limit存在BUG?
华为云4核8G,高性能云服务器,免费试用   

使用mysql的查询语句:select * from picture limit 0,10;虽然看结果只有10条数据,但是把*换成count(*)就会发现,结果是所有记录的结果……

看这张图:


这到底是mysql的一个BUG,还是我做法有错误,求朋友给我讲一下。

举报
十月阳光
发帖于5年前 20回/2K+阅
共有20个答案 最后回答: 5年前

你理解 错误 ,你的第二sql 就是统计 picture表 总共有多少条记录 ,它只返回 一个结果 ,一个记录总数。

你这样查 是想 干什么。

--- 共有 1 条评论 ---
傅小黑他是想比如总共有count = 100个结果,limit 10的count = 10,limit 20的count = 20,limit 95,10的count = 100-95 = 5 5年前 回复
楼主你搞清楚 count(*) 是什么意思了么?
--- 共有 4 条评论 ---
mark35回复 @只是过路人 : 都limit 10了最多10条记录,怎么可能会是“所有”结果呢? 难不成这“所有”结果就不超过10条? 5年前 回复
十月阳光回复 @mark35 : 我在java代码中用select * from picture limit 0,10;查询,查询结果我想要的是10个对象,结果是该表的所有结果,应该怎样改进该语句? 5年前 回复
mark35回复 @只是过路人 : 这是最基本的SQL语法,如果这个都不清楚,建议你先了解下SQL的SELECT, UPDATE, INSERT, DELETE这几个最基本操作的语法 5年前 回复
十月阳光我学得潜,真心不能深刻理解每个概念。 5年前 回复

你使用错误,你这种用法属于想当然.

你那种用法应该相当于:

SELECT * FROM (SELECT COUNT(*) FROM user) a LIMIT 0,10

或者参考如下代码:

@Override

    protected String buildPageSql(String sql, int from, int pageSize) {

        sql = removeSelect(sql);

        return "select SQL_CALC_FOUND_ROWS " + sql + " limit " + from + ", " + pageSize;

    }

    /** Returns FOUND_ROWS() sql to determine total count of founded rows.

    */

    @Override

    protected String buildCountSql(String sql) {

        return "SELECT FOUND_ROWS()";

    }

--- 共有 1 条评论 ---
十月阳光 我在java代码中用select * from picture limit 0,10;查询,查询结果我想要的是10个对象,结果是该表的所有结果,应该怎样改进该语句? 5年前 回复

这个结果并没有问题,例如你第一条sql,limit 0,10这是取的是10条记录.

但是你第二条sql是针对count之后的结果进行limit,很显然这条数据也是正确的啊,你按照sql执行逻辑是针对你count之后的结果进行limit操作,而并非对picture表的数据进行limit之后再count

--- 共有 1 条评论 ---
十月阳光 我在java代码中用select * from picture limit 0,10;查询,查询结果我想要的是10个对象,结果是该表的所有结果。 5年前 回复
顶部