16

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

一个论坛说 在 ASP 中的 SQL 代码末尾添加这个“ ; has Return Scope_Identity()” 。

PHP中有对应的方法吗?

4

7 回答 7

16

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

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

于 2009-03-07T05:38:58.230 回答
7

在 postgres 中,最好的方法是执行以下操作:

insert into foos(name) values ('my_foo') returning id;
于 2009-09-20T22:04:50.527 回答
3

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

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

它会像常规的选择语句一样返回插入的 ID。

于 2009-03-07T17:03:13.873 回答
2

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

例如

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
于 2009-07-10T13:47:46.113 回答
0

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

或者

如果你想从你的 mySql 选择查询中生成数字,你可以使用这个 编辑:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 
于 2009-03-07T05:32:52.597 回答
0

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

于 2009-07-10T13:44:55.353 回答
0

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

于 2009-07-10T13:51:44.517 回答