Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

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?

share|improve this question
    
There is no problem with multiple rows inserted in one statement. You get back the id of the first inserted row. –  ypercube Jan 3 '13 at 10:51
    
Thanks for pointing that out. Edited now –  Tush Jan 3 '13 at 11:32
add comment

1 Answer 1

up vote 6 down vote accepted

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.