PHP Postgres: 获取最后插入的ID

15

我在这个主题上找到了一些其他的问题。 这一个...

mysql_insert_id alternative for postgresql

...以及手册似乎表明,您可以随时调用lastval()并且它将按预期工作。 但是这一个...

Postgresql and PHP: is the currval a efficent way to retrieve the last row inserted id, in a multiuser application?

...则表示它必须在事务内部。 那么我的问题是:我是否可以在查询lastval()之前等待任意长时间(不使用事务)?在许多并发连接的情况下,这是否可靠?


序列取决于会话而不是事务。但是在等待和执行其他查询期间,这并不好,因为您可能会收到其他查询的lastval。 - jordani
2个回答

32

在PostgreSQL中,INSERT、UPDATE和DELETE操作都有RETURNING子句,这意味着你可以执行如下操作:

INSERT INTO ....
RETURNING id;

然后查询将为每个插入的行返回其所插入的id值。这样可以避免向服务器发送额外的查询请求,节省时间。


非常感谢您的回答!正是我所需要的,可以减少我在某些操作中需要进行的查询次数。 - PROGRAM_IX
3
谢谢!顺便提一句,如果需要,您可以返回多个值 - RETURNING * 将返回整个插入的行。 - SamGoody
如果您不知道id字段的名称呢? - JoeTidee
@JoePrivett,在普通应用程序中,这并不是非常现实的。你有具体的案例吗?如果有的话,最好发布你自己的问题,详细解释你的问题。 - Eelke

6

是的,序列函数提供了从序列对象获取连续序列值的多用户安全方法。


1
我很高兴看到序列现在是 ANSI 标准了 - 自增/身份识别过于局限。 - OMG Ponies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接