SQL - INSERT and catch the id auto-increment value

前端 未结 7 936
梦毁少年i
梦毁少年i 2020-12-05 19:26

What is the best way to get the auto-id value in the same SQL with a SELECT?

A forum said adding this \"; has Return Scope_Identity()\"
in the end

相关标签:
7条回答
  • 2020-12-05 19:49

    It depends on your database server. Using MySQL, call mysql_insert_id() immediately after your insert query. Using PostgreSQL, first query "select nextval(seq)" on the sequence and include the key in your insert query.

    Querying for "select max(id) + 1 from tbl" could fail if another request inserts a record simultaneously.

    0 讨论(0)
  • 2020-12-05 19:49

    In Microsoft Transact SQL you can use @@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
    
    0 讨论(0)
  • 2020-12-05 19:50

    In postgres the best way is to do something like:

    insert into foos(name) values ('my_foo') returning id;
    
    0 讨论(0)
  • 2020-12-05 19:52

    It depends on the database engine you are using. Some DBMS, like Firebird for example, have RETURNING clause you can add to your query. For example, if you have a table named TABLE1 with autoincrement column named ID, you can use this:

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

    And it would return the inserted ID just like a regular select statement.

    0 讨论(0)
  • 2020-12-05 19:53

    Be very careful: Apparently select nextval(seq) does not work in high concurrency - some other connection can insert between the time when you inserted and the time when you called select nextval(seq). Always test such code in high concurrency test harnesses.

    0 讨论(0)
  • 2020-12-05 19:57

    In php: mysql_insert_id() http://us3.php.net/mysql_insert_id

    or

    If you wanted to genterate the number from your mySql select query, you could use this EDIT:

    SELECT LAST_INSERT_ID(`1`) + 1 FROM table 
    
    0 讨论(0)
提交回复
热议问题