stackoverflow本身有许多解决方案,其目标是使用自动增量字段或时间戳读取表的最后n行:例如,以下查询以降序从名为tab的表中获取最后10个记录名为id的字段值,它是表中的自动增量字段:
Select * from tab order by id desc limit 10
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有任何替代方法,而无需获得自动增量字段或时间戳来完成任务以获得相同的输出?
提示:提出这个问题的动机来自以下事实:我们将记录存储到表中,并在使用简单查询查询数据库时未指定任何标准,例如:
Select * from tab
Run Code Online (Sandbox Code Playgroud)
然后输出的顺序与插入表中的记录顺序相同.那么有没有办法按照与输入数据库相反的顺序获取记录?
mysql中的数据不是订购的 - 除非您order by在查询中指定,否则您对所获得的记录顺序没有任何保证.
所以不,除非你按时间戳,身份证或任何其他字段订购,否则你无法得到最后一行,只是因为没有订单就没有"最后一行"
在 SQL 世界中,顺序并不是一组数据的固有属性。因此,您的 RDBMS 无法保证您的数据将以特定顺序返回,甚至以一致的顺序返回,除非您使用 ORDER BY 子句查询数据。
因此,如果您没有按某个 id 或某个列对数据进行排序,那么您就无法根据其排序来跟踪数据。因此不能保证 MYSQL 将如何存储数据,因此您无法获取最后 n 条记录。
您还可以查看这篇文章:
注意事项
行的排序
如果没有 ORDER BY,记录返回的顺序可能与之前的 MEMORY 实现不同。
这不是一个错误。任何依赖于没有 ORDER BY 子句的特定订单的应用程序都可能会产生意外的结果。没有 ORDER BY 的特定顺序是存储引擎和查询优化器实现的副作用,它可能会在 MySQL 的次要版本之间发生变化。