【发布时间】:2011-02-19 03:12:13
【问题描述】:
获取最后插入的 id 的 sql 标准是什么?如果有这样的事情。
mysql: LAST_INSERT_ID()
postgresql: ... 返回 f_id
mssql: SCOPE_IDENTITY()
...这里有更多示例...
我的意思是,所有数据库对此都有不同的实现,这种常见任务没有标准吗?
【问题讨论】:
-
我有一个.. 如果 ID 列是 int 并且自动递增。最后一行是 b max(ID).. 你是这个意思吗?
-
@william 天真,但有道理:P
-
@william: 在你获取 MAX(id) 之前发生另一个 INSERT 会发生什么?
-
@mu: 我认为插入的行将被检索.. 插入表值(.).. 然后 select * from table where id=max(id).. 你插入的行将 b取回。这是我的假设。
-
MAX(id)是错误的。SELECTing 最后插入值的 ID 的标准方法是使用插入所有值的条件查询。因此,如果您执行INSERT INTO table (a,b,c) VALUES (A,B,C),您将获得带有SELECT id FRM table WHERE a = A AND b = B AND c = C的ID。如果可能存在重复值(例如记录 A、B、C 不是唯一的),这当然不能依赖。
标签: sql mysql sql-server postgresql standards