如何SELECT
在MySQL表中最后一行?
我正在INSERT
读取数据,我需要从上一行中检索列值。
auto_increment
桌子上有一个。
auto_increment
。我想要最近添加的一个。
如何SELECT
在MySQL表中最后一行?
我正在INSERT
读取数据,我需要从上一行中检索列值。
auto_increment
桌子上有一个。
auto_increment
。我想要最近添加的一个。
Answers:
是的,里面有一个auto_increment
如果您想要表中所有行的最后一行,那么最后MAX(id)
就是正确答案的时候了!有点儿:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
已索引。
请记住,关系数据库中的表只是行的集合。数学中的集合是无序集合。没有第一行或最后一行;没有上一行或下一行。
您必须首先按某个字段对一组无序行进行排序,然后才能按照定义的顺序释放结果集中的迭代。
由于您具有自动递增字段,因此我假设您希望将其作为排序字段。在这种情况下,您可能需要执行以下操作:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
看看我们如何首先your_auto_increment_field
按照降序(或您所称的名称)对无序行的集合进行排序。然后,将结果集限制为的第一行LIMIT 1
。
您可以将@spacepille建议的两个查询合并为一个看起来像这样的查询:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
它应该工作得很快,但是在INNODB表上,它比ORDER + LIMIT慢了几分之一毫秒。
answered Jun 14 at 9:41
多数民众赞成在大约1年零6个月之前:)
几乎每个数据库表都有一个auto_increment列(通常为id)
如果您想要表格中所有行的最后一行,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
要么
您可以将两个查询组合成一个看起来像这样的查询:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
如果您有一个自动索引的列,那么这里的许多答案都说相同(按自动递增的顺序),这是可以的。
附带说明一下,如果您有这样的字段并且它是主键,那么使用order by
vs 不会对性能造成任何影响select max(id)
。主键是如何在数据库文件中对数据进行排序(至少对于InnoDB是这样),RDBMS知道数据的结束位置,并且可以优化order by id + limit 1
使其与到达数据库相同。max(id)
现在,当您没有自动递增的主键时,人迹罕至的地方。也许主键是一个自然键,它是3个字段的组合...但是,并不是全部都丢失了。从编程语言中,您可以首先获取行数
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
然后在LIMIT
子句中使用获得的数字
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
不幸的是,MySQL不允许在LIMIT
子句中使用子查询或用户变量