使用SELECT在同一SQL中获取auto-id值的最佳方法是什么?

一个论坛说添加了这个“;有返回Scope_Identity()"
在SQL的最后工作在ASP。

PHP中有相应的方法吗?

有帮助吗?

解决方案

这取决于您的数据库服务器。使用MySQL,在插入查询后立即调用 mysql_insert_id() 。使用PostgreSQL,首先查询“ select nextval(seq) "在序列上并在插入查询中包含键。

查询“从tbl选择max(id)+ 1 ”如果另一个请求同时插入记录,则可能失败。

其他提示

在postgres中,最好的方法是做一些事情:

insert into foos(name) values ('my_foo') returning id;

这取决于您使用的数据库引擎。某些DBMS(例如 Firebird )具有RETURNING子句,您可以将其添加到查询中。例如,如果您有一个名为TABLE1的表,其中autoincrement列名为ID,则可以使用:

insert into TABLE1(columns...) values (values...) returning ID;

它将返回插入的ID,就像常规的select语句一样。

在Microsoft Transact SQL中,您可以使用@@ IDENTITY。

e.g。

DECLARE @Table TABLE ( col0 INT IDENTITY, col1 VARCHAR(255), col2 VARCHAR(255))

INSERT INTO @Table (col1, col2) VALUES ('Hello','World!')

SELECT @@Identity

SELECT * FROM @Table

在php中:mysql_insert_id() http://us3.php.net/mysql_insert_id

如果你想从mySql select查询中输入数字,你可以使用它 修改

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

要非常小心:显然选择nextval(seq)在高并发性中不起作用 - 在插入的时间和调用select nextval(seq)的时间之间可以插入一些其他连接。始终在高并发性测试工具中测试此类代码。

在SQL Server中,使用select语句的插入可以有一个输出子句,该子句将返回标识值以及您可能需要识别哪个标识转到哪个记录的任何其他列。如果您正在使用values子句,则在插入后立即使用select scope_identity()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top