簡體   English   中英

SQL - 插入並捕獲 id 自動增量值

[英]SQL - INSERT and catch the id auto-increment value

在具有 SELECT 的同一 SQL 中獲取自動 ID 值的最佳方法是什么?

一個論壇說添加這個“ ; has Return Scope_Identity()
在 SQL 在 ASP 中工作的末尾。

PHP中有對應的方式嗎?

這取決於您的數據庫服務器。 使用 MySQL,在插入查詢后立即調用mysql_insert_id() 使用 PostgreSQL,首先在序列上查詢“ select nextval(seq) ”,並在插入查詢中包含鍵。

如果另一個請求同時插入記錄,則查詢“ select max(id) + 1 from tbl ”可能會失敗。

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

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

這取決於您使用的數據庫引擎。 某些 DBMS,例如Firebird ,具有 RETURNING 子句,您可以將其添加到查詢中。 例如,如果您有一個名為 TABLE1 的表,其自動增量列名為 ID,則可以使用以下命令:

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

它會像常規的 select 語句一樣返回插入的 ID。

在 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

要非常小心:顯然 select nextval(seq) 在高並發下不起作用 - 在您插入的時間和調用 select nextval(seq) 的時間之間可以插入一些其他連接。 始終在高並發測試工具中測試此類代碼。

在 SQL 服務器中,使用 select 語句的插入可以具有 output 子句,該子句將返回標識值以及您可能需要識別哪個標識的任何其他列。 如果您使用 values 子句,則在插入后立即使用 select scope_identity()。

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

或者

如果你想從你的 mySql select 查詢中生成數字,你可以使用這個編輯:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM