【问题标题】:PHP Postgres: Get Last Insert IDPHP Postgres:获取最后插入 ID
【发布时间】:2011-09-23 01:37:56
【问题描述】:

我发现了有关此主题的其他几个问题。这个……

mysql_insert_id alternative for postgresql

...和the manual 似乎表明您可以随时致电lastval(),它会按预期工作。但是这个……

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

...似乎表明它必须在事务中。所以我的问题是:在查询lastval()(没有交易)之前,我可以等多久就等多久?面对许多并发连接,这是否可靠?

【问题讨论】:

  • 序列取决于会话而不是事务。但同时等待并执行其他查询是不好的,您可能会收到其他查询的lastval。

标签: php sql postgresql sequence last-insert-id


【解决方案1】:

PostgreSQL 中的 INSERT、UPDATE 和 DELETE 有一个 RETURNING 子句,这意味着你可以这样做:

INSERT INTO ....
RETURNING id;

然后查询将为插入的每一行返回它为 id 插入的值。保存到服务器的往返。

【讨论】:

  • 非常感谢您的回答!正是我需要的,将某些操作所需的查询数量减半。
  • 谢谢!顺便说一句,如果需要,您可以返回多个值 - RETURNING * 将返回整个插入的行。
  • 不知道id字段名称怎么办?
  • @JoePrivett,在不太现实的普通应用程序中。你有具体案例吗?如果是,最好发布您自己的问题,并在其中更详细地解释您的问题。
【解决方案2】:

是的,the sequence functions 提供 多用户安全 方法,用于从序列对象中获取连续序列值。

【讨论】:

  • 我很高兴看到序列现在是 ANSI —— AUTOINCREMENT/IDENTITY 限制太多了。
猜你喜欢
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2023-03-16
相关资源
最近更新 更多