Mysql – does last_insert_id() returns correct result when writes from multiple sessions

auto-incrementMySQLprimary-key

I have a table in which there is a combination of 4 columns that will act as a unique key.

Instead of using a composite primary key, I want to keep an id column as the primary key. This field is on auto_increment. The insert to the database are done through a C interface. When a row is inserted, I want to know the id it was assigned. LAST_INSERT_ID() can be used to retrieve that, but there will be multiple sessions inserting in the table. Will LAST_INSERT_ID() return the correct value in that case?

I have gone through this post: Is MySql's LAST_INSERT_ID() function guaranteed to be correct?
It says that id of first inserted row is returned when multiple rows are inserted.

When multiple sessions write to the same table but a single session writes only one row at a time, is it possible to retrieve the correct value of the id generated? Will the Isolation Level also matter?

Best Answer

Here's what the MySQL 5.5 documentation says:

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

Unless you fall into the other caveats noted in the question you link to, the last_insert_id() function will return what you expect, and will not be affected by other sessions.