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
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.
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
In postgres the best way is to do something like:
insert into foos(name) values ('my_foo') returning id;
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.
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.
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