LAST_INSERT_ID()
tem escopo de sessão. Ele retornará o valor de identidade inserido na sessão atual.
Se você não inserir nenhuma linha entre
INSERT
e LAST_INSERT_ID
, então ele vai funcionar bem. Observe que, para inserções de vários valores, ele retornará a identidade da primeira linha inserida, não a última:
INSERT
INTO mytable (identity_column)
VALUES (NULL)
SELECT LAST_INSERT_ID()
--
1
INSERT
INTO mytable (identity_column)
VALUES (NULL), (NULL)
/* This inserts rows 2 and 3 */
SELECT LAST_INSERT_ID()
--
2
/* But this returns 2, not 3 */