如何选择MySQL表中的最后一行?
我正在插入数据,我需要从前一行检索一个列值。
表中有一个auto_increment。
如何选择MySQL表中的最后一行?
我正在插入数据,我需要从前一行检索一个列值。
表中有一个auto_increment。
当前回答
几乎每个数据库表都有一个auto_increment列(通常是id)
如果你想要表中的最后一行,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
OR
你可以将两个查询组合成一个查询,就像这样:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
其他回答
这里的许多答案都是相同的(根据自动增量排序),这是可以的,前提是您有一个索引的自递增列。
另一方面,如果您有这样的字段并且它是主键,那么使用order by与select max(id)相比没有性能损失。主键是数据在数据库文件中的排序方式(至少对于InnoDB), RDBMS知道数据的结束位置,它可以通过id + limit 1优化顺序,使其与达到最大值(id)相同。
现在较少有人走过的路是当你没有自增主键时。也许主键是一个自然键,它是3个字段的组合…… 不过,也不是一切都完了。从编程语言中,您可以首先使用
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
然后在LIMIT子句中使用得到的数字
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
不幸的是,MySQL不允许在LIMIT子句中使用子查询或用户变量
你可以在LIMIT命令中使用OFFSET:
SELECT * FROM aTable LIMIT 1 OFFSET 99
如果您的表有100行,则返回最后一行而不依赖于主键
SELECT * FROM adds where id=(select max(id) from adds);
此查询用于获取表中的最后一条记录。
请记住,关系数据库中的表只是行的集合。集合在数学中是无序集合。没有第一行或最后一行;没有上一行或下一行。
您必须首先根据某些字段对您的无序行集进行排序,然后才可以按照您定义的顺序对结果集进行迭代。
既然你有一个自动递增字段,我假设你想要它作为排序字段。在这种情况下,你可能需要做以下事情:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
看看我们是如何首先根据your_auto_increment_field(或任何你叫它的名字)对无序行集进行降序排序的。然后我们将结果集限制为limit 1的第一行。
在一个查询中没有ID:
SELECT * FROM table_name LIMIT 1 OFFSET (SELECT COUNT(*) - 1 FROM table_name)