I'm writing an application in C# that basically consists of two threads. Thread 1 gets data and puts it into a database, thread 2 takes that data does some additional operations. Will I run into problems with last_insert_id, like getting an insert id in the first thread from an insert that was done in the second thread? I am using the connector .net and primarily use the MySqlHelper with the connection string as a parameter.
Is last_insert_id safe to use in this case or would I be better off rethinking my approach, like creating two separate applications for these to tasks?
Also, I can't do everything in one thread. Each thread runs periodically and takes a different amount to complete. The first thread has to be able to insert data while the second thread performs its operations.
It is because last_insert_id() is multi-thread safe that it does not provide you with the last insert id created, tablewide, on connection.
With no argument, LAST_INSERT_ID() returns a 64-bit value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.
Definition and Usage The LAST_INSERT_ID() function returns the AUTO_INCREMENT id of the last row that has been inserted or updated in a table.
last_insert_id() is reliable on a PER CONNECTION basis. If your threads are sharing the same MySQL connection and doing inserts, then it's undefined as to what ID you'll be retrieving.
If you're not running too many threads, you might be better off having the individual threads open their own MySQL connections, and then you'd be able to use last_insert_id() without issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With