在mysql的查询语句中,limit关键字的作用是对查询返回的结果集进行数量限制,既可以只返回前几条符合条件的记录,也可以结合偏移量跳过指定数量的记录后返回后续内容,是日常开发中实现数据分页、控制返回数据量的核心工具。

limit的基础语法
limit的使用有两种常见形式,第一种是只指定返回记录的数量,第二种是指定偏移量和返回数量,具体语法如下:
-- 只返回前n条记录,n为正整数 SELECT 列名 FROM 表名 LIMIT n; -- 跳过前m条记录,返回接下来的n条记录,m和n均为正整数 SELECT 列名 FROM 表名 LIMIT m, n;
需要注意的是,偏移量m的起始值是0,也就是说如果要跳过第一条记录,m的值应该设为1而不是0。
limit的常见使用场景
1. 限制查询结果数量
当我们只需要获取表中符合条件的前几条记录时,可以直接使用limit指定数量。比如要获取用户表中注册时间最新的3个用户,代码示例如下:
SELECT user_id, user_name, register_time FROM user ORDER BY register_time DESC LIMIT 3;
2. 实现分页查询
分页是limit最典型的使用场景,通常前端会传递页码和每页条数两个参数,我们需要把这两个参数转换为limit需要的偏移量和返回数量。假设每页显示10条数据,要获取第3页的内容,偏移量就是(3-1)*10=20,返回数量为10,代码示例:
-- 假设page为页码,page_size为每页条数,这里以第3页、每页10条为例 SET @page = 3; SET @page_size = 10; SET @offset = (@page - 1) * @page_size; SELECT article_id, title, create_time FROM article ORDER BY create_time DESC LIMIT @offset, @page_size;
使用limit的注意事项
- 如果查询语句中没有
ORDER BY子句,limit返回的记录顺序是不确定的,因为mysql没有默认的排序规则,每次查询的返回顺序可能不同。 - 当偏移量m非常大的时候,limit m, n的查询效率会明显下降,因为mysql需要先扫描到m位置才能返回后续n条记录,此时可以考虑通过索引优化,比如用上次查询的最大id作为条件替代偏移量。
- limit后面的参数必须是非负整数,如果传入负数或者非数字类型,mysql会直接报错。
- 如果查询的结果总数小于指定的返回数量n,那么limit会返回所有符合条件的记录,不会报错也不会补空数据。
offset和limit分开的写法
除了LIMIT m, n的写法,mysql还支持LIMIT n OFFSET m的语法,两种写法的效果完全一致,后者语义更清晰,适合阅读代码时快速理解偏移量和返回数量的含义,示例:
-- 和LIMIT 20, 10效果相同,跳过20条,返回10条 SELECT * FROM product LIMIT 10 OFFSET 20;
在实际开发中,建议优先使用LIMIT n OFFSET m的写法,尤其是分页逻辑中,能让代码可读性更高,减少参数顺序写反的问题。