用于检索插入的最后一行的通用 SQL 构造

Posted

技术标签:

【中文标题】用于检索插入的最后一行的通用 SQL 构造【英文标题】:Universal SQL construct to retrieve the last row inserted 【发布时间】:2009-08-25 08:45:27 【问题描述】:

插入最后一行(或主键)的正确通用 SQL 构造是什么。 ID 可能由序列自动生成,但我根本不想处理序列!我需要通过查询表来获取 ID。或者,INSERT 可能会以某种方式扩展以返回 ID。假设我总是插入一行。该解决方案应该适用于大多数 RDBMS!

【问题讨论】:

没有万能的解决办法,除了加个时间戳 我很高兴有一个与 hsqldb、postgresql、sql server 2005、oracle、mysql 和 DB2 一起使用的解决方案 【参考方案1】:

最好的方法是依赖于这样的序列:

select Max(ID) from tableName 

但如果您不想处理它,您可以在表中添加新的时间戳列,然后从该列中选择最大值。

喜欢这样

select Max(TimestampField) from tableName 

【讨论】:

添加时间戳对我来说不是一个选项。我的应用不得更改表结构。 序列解决方案对我有用。可能值得注意的是,如果您的序列翻转(循环结束),Max(ID) 将产生不正确的结果。就我而言,这无关紧要。谢谢。 您需要确保您的隔离级别是这样的,您不会看到其他事务插入的 ID。而 max(TimeStampField) 将要求写入不要太频繁,因此没有两个写入在该字段的分辨率范围内。

以上是关于用于检索插入的最后一行的通用 SQL 构造的主要内容,如果未能解决你的问题,请参考以下文章

通用的sql语句

Search SQL:用于全文检索的SQL扩展

技术Search SQL:用于全文检索的SQL扩展

如何从表中检索我的最后一个插入行?

mybatis-plus一些通用方法

MyBatis 动态 SQL 之通用 where