MySQL 数据库并没有像 Oracle 那样内置的 rownum 或 rowid 功能,若想实现行号效果,需要借助用户变量来手动模拟。这是许多从 Oracle 转向 MySQL 的开发者初学时容易遇到的坑——但解决方法其实很直接。

在 MySQL 中定义变量可使用 set @var = 0 或 set @var := 0,两种语法都支持。不过,当变量出现在 select 语句内时,必须使用 := 进行赋值——因为此时 = 会被解析为比较运算符而非赋值操作,导致结果出错。
一个典型的实现示例如下:
select @rownum:=@rownum + 1 as rownum, b.*
from (select @rownum:=0) a, b
这种技巧在需要获取排名或分批查询数据时非常实用,例如快速定位第几名到第几名之间的记录,依靠变量模拟行号即可轻松实现。
