Uważam, że odpowiedź na to jest zawarta w MySQL dokumenty :
Jeśli tabela zawiera AUTO_INCREMENT kolumna i INSERT ... UPDATE wstawia wiersz, LAST_INSERT_ID() funkcja zwraca AUTO_INCREMENT wartość. Jeśli zamiast tego instrukcja aktualizuje wiersz, LAST_INSERT_ID() nie ma znaczenia. Możesz jednak obejść ten problem, używając LAST_INSERT_ID(expr) . Załóżmy, że identyfikator to AUTO_INCREMENT kolumna. Aby wykonać LAST_INSERT_ID() istotne dla aktualizacji, wstaw wiersze w następujący sposób:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;