I’ve got a number of tables that “share” a single auto-incrementing primary key – this is accomplished via a trigger on insert which looks like this:
FOR EACH ROW
BEGIN
INSERT INTO master (time) VALUES (NOW());
SET NEW.id = LAST_INSERT_ID();
END
This produces the PK for the just inserted row. This does, however, create the problem that I can’t seem to figure out what that ID was. last_insert_id obviously returns nothing as the above statement wasn’t executed on what’s considered “the current connection”.
Is there a way to access the most recently inserted row on a connection without an auto-incrementing primary key?
Update: As a temporary(?) measure I’ve removed the trigger and now generate the ID by making the insert to master within my model. Just seems like it would be nicer if I could somehow return the value that the trigger set.
The doc does say, “For stored functions and triggers that change the [LAST_INSERT_ID] value, the value is restored when the function or trigger ends, so following statements do not see a changed value.”
Try a stored procedure, which can do your two INSERTS and return the assigned ID.
Or, give up on doing things the “Oracle way”, drink the MySql Kool-Aid, and just use an auto-incrementing id on the table.