We\'re using MySQL with InnoDB storage engine and transactions a lot, and we\'ve run into a problem: we need a nice way to emulate Oracle\'s SEQUENCEs in MySQL. The requirem
Won't the MySQL Identity column on the table handle this?
CREATE TABLE table_name ( id INTEGER AUTO_INCREMENT PRIMARY KEY )
Or are you looking to use it for something other than just inserting into another table?
If you're writing using a procedural language as well (instead of just SQL) then the other option would be to create a table containing a single integer (or long integer) value and a stored procedure which locked it, selected from it, incremented it and unlocked it before returning the value.
(Note - always increment before you return the value - it maximise the chance of not getting duplicates if there are errors - or wrap the whole thing in a transaction.)
You would then call this independently of your main insert / update (so it doesn't get caught in any transactions automatically created by the calling mechanism) and then pass it as a parameter to wherever you want to use it.
Because it's independent of the rest of the stuff you're doing it should be quick and avoid locking issues. Even if you did see an error caused by locking (unlikely unless you're overloading the database) you could just call it a second / third time.