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

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

【问题讨论】:

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

标签: sql lastinsertid


【解决方案1】:

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

select Max(ID) from tableName 

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

喜欢这样

select Max(TimestampField) from tableName 

【讨论】:

  • 添加时间戳对我来说不是一个选项。我的应用不得更改表结构。
  • 序列解决方案对我有用。可能值得注意的是,如果您的序列翻转(循环结束),Max(ID) 将产生不正确的结果。就我而言,这无关紧要。谢谢。
  • 您需要确保您的隔离级别是这样的,您不会看到其他事务插入的 ID。而 max(TimeStampField) 将要求写入不要太频繁,因此没有两个写入在该字段的分辨率范围内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2023-04-01
  • 2013-05-04
  • 2019-11-17
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多