Credo che la risposta a questa domanda sia affrontata in MySQL documenti :
Se una tabella contiene un AUTO_INCREMENT colonna e INSERT ... UPDATE inserisce una riga, il LAST_INSERT_ID() la funzione restituisce il AUTO_INCREMENT valore. Se invece l'istruzione aggiorna una riga, LAST_INSERT_ID() non è significativo. Tuttavia, puoi aggirare il problema utilizzando LAST_INSERT_ID(expr) . Supponiamo che id sia il AUTO_INCREMENT colonna. Per creare LAST_INSERT_ID() significativo per gli aggiornamenti, inserire le righe come segue:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;