有没有任何方法可以在不使用自动递增字段或时间戳的情况下从MySQL表中获取最后N行



stackerflow本身有许多解决方案,其目标是使用自动递增字段或时间戳读取表的最后n行:例如,以下查询从名为tab的表中按id字段值的降序提取最后十条记录,id字段值是表中的自动递增字段:

Select * from tab order by id desc limit 10

我的问题是:有没有其他方法可以在不必获得自动递增字段或时间戳的情况下完成任务以获得相同的输出?

提示:问这个问题的动机来自于这样一个事实:当我们将记录存储到表中时,以及当使用简单的查询来查询数据库时,不指定任何条件,如:

Select * from tab

然后输出的顺序与插入到表中的记录的顺序相同。那么,有没有什么方法可以按照与输入数据库的记录相反的顺序获取记录呢?

mysql中的数据没有排序-除非您在查询中指定order by,否则您无法保证将获得的记录的顺序。

因此,不,除非您按时间戳、id或任何其他字段排序,否则您无法获得最后一行,因为没有顺序就没有"最后一行"

在SQL世界中,顺序不是一组数据的固有属性。因此,您的RDBMS无法保证您的数据会到来按照一定的顺序——甚至是一致的顺序——除非使用ORDERBY子句查询数据。

因此,如果没有按某个id或某个列对数据进行排序,则无法根据数据的排序来跟踪数据。因此,不能保证MYSQL将如何存储数据,因此您无法获得最后n条记录。

你也可以查看这篇文章:

注意事项

行的排序

如果没有ORDER BY,记录可能会以不同的方式返回顺序。

这不是一个bug。任何依赖特定订单的应用程序ORDER BY子句可能会传递意外的结果。特定订单没有ORDER BY是存储引擎和查询的副作用优化器实现,该实现可能并且将在次要MySQL之间发生变化发布。

相关内容

最新更新