Reserving mySQL auto-incremented IDs?

做~自己de王妃 提交于 2019-12-04 04:55:42

The only way to generate an auto-increment value is to attempt the insert. But you can roll back that transaction, and still read the id generated. In MySQL 5.1 and later, the default behavior is that auto-increment values aren't "returned" to the stack when you roll back.

START TRANSACTION;
INSERT INTO mytable () VALUES ();
ROLLBACK;
SELECT LAST_INSERT_ID() INTO @my_ai_value;

Now you can be sure that no other transaction will try to use that value, so you can use it in your external processes, and then finally insert a value manually that uses that id value (when you insert a specific id value, MySQL does not generate a new value).

Have you considred using mysql tranactions?

The essense of it, you start a transaction, if all sql statements are correct and can be complteted, then you commit your transaction. If not, then you rollback as if nothing happened.

More details can be read in this link: http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-transactions.html

you can use temporary table along with transaction

if transaction complete temp table will be gone and move data to real table

http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!