I think this is true, but I haven\'t found anything on the web to confirm it. I can get the first id generated for the autoincrement field using last_insert_id(), but can I
A multi-row insert is just a bulk-operation that performs the same operation over and over again. When an insert statement is fired, it fires a trigger that generates the ID.
So if the database engine used, performs all of its work in a sequential way (queue like - first-in first-out) then yes, sequential id's will be one increment higher than the previous id; if the data is inserted in a multi-threaded way where statements are fired in parallel, then no, id's will be given at "random".
I am not aware of any mysql engine that guarantees this, but then again I haven't made much research in this specific subject.
It depends on the storage engine used.
innodb_autoinc_lock_mode
is set to interleaved (2), the inserted rows will have sequential ID's. By default InnoDB runs in consecutive
mode since 5.1 and traditional
mode prior.For more on the innodb_autoinc_lock_mode
option, see 13.6.4.3. AUTO_INCREMENT Handling in InnoDB
If you use LOCK TABLES, the batches should grab sequential id's.
Example:
LOCK TABLES users WRITE;
<BULK INSERT HERE>
UNLOCK TABLES;
This will prevent multiple threads from writing to the table at the same time.