在SQL中检索插入的行ID

cha*_*uka 10 sql

如何在SQL中检索插入行的ID?

用户表:

Column  | Type
--------|--------------------------------
ID      | * Auto-incrementing primary key
Name    | 
Age     | 
Run Code Online (Sandbox Code Playgroud)

查询示例:

insert into users (Name, Age) values ('charuka',12)
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 37

在MySQL中:

SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

在SQL Server中:

SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

在Oracle中:

SELECT SEQNAME.CURRVAL FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中:

SELECT lastval();
Run Code Online (Sandbox Code Playgroud)

(编辑:lastval是any,currval需要命名序列) 注意:lastval()返回会话分配的最新序列值,与其他会话中发生的事件无关.

  • @FreshCode scope_identity()是特定于会话的,正如currval()适用于PostgreSQL,我也相信Oracle.对于last_insert_id()也是如此 (2认同)

mar*_*c_s 11

在SQL Server中,您可以(除了已经存在的其他解决方案):

INSERT INTO dbo.Users(Name, Age) 
OUTPUT INSERTED.ID AS 'New User ID'
VALUES('charuka', 12)
Run Code Online (Sandbox Code Playgroud)

OUTPUT在执行插入,更新,删除时,该子句非常方便,您可以返回任何列 - 而不仅仅是自动递增的ID列.

阅读SQL Server联机丛书中有关OUTPUT子句的更多信息.


小智 3

在 Oracle 和 PostgreSQL 中,您可以执行以下操作:

INSERT INTO some_table(姓名,年龄)
价值观
(“查鲁卡”,12)
返回ID

通过 JDBC 执行此操作时,您还可以通过在运行 INSERT 后调用 getGenerateKeys() 以跨 DBMS 的方式执行此操作(无需 RETURNING)