A função LAST_INSERT_ID() retorna o último id ou linha mais recentemetne inserida/atualizada em uma tabela. Esse id não pode ter sido inserido manualmente, tem que ter sido de forma automática, isto é, usando AUTO-INCREMENT.
MariaDB [nation]> select last_insert_id(); +------------------+ | last_insert_id() | +------------------+ | 114 | +------------------+
O valor de LAST_INSERT_ID() permanece inalterado se nenhuma nova linha for inserida com sucesso.
Se nenhuma linha foi inserida com sucesso, LAST_INSERT_ID() retorna 0.
Se alguém fornecer um argumento para LAST_INSERT_ID(), ele retornará o valor da expressão e a próxima chamada para LAST_INSERT_ID() retornará o mesmo valor.
também podemos usar LAST_INSERT_ID() para excluir a última linha inserida:
DELETE FROM guests WHERE id = LAST_INSERT_ID();
A instrução atualmente em execução não afeta o valor de LAST_INSERT_ID(). Exemplo: Suponha que você gere um valor AUTO_INCREMENT e, em seguida, consulte use LAST_INSERT_ID() em um INSERT inserindo várias linhas que em uma tabela com sua própria coluna AUTO_INCREMENT. O valor de LAST_INSERT_ID() permanecerá estável na segunda instrução; seu valor para a segunda linha e as posteriores não é afetado pelas inserções de linha anteriores. (No entanto, se você misturar referências a LAST_INSERT_ID() e LAST_INSERT_ID(expr), o efeito será indefinido.)
Exemplos de Uso do LAST_INSERT_ID()
#1 Crie uma tabela de testes
CREATE TABLE teste ( id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(50)) ENGINE = InnoDB;
#2 insira um valor qualquer
INSERT INTO teste(nome) VALUES('maria');
#3 pesquise pelo último id criado
SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+
#4 insira outro valor e use a função last_insert_id()
INSERT INTO teste(nome) VALUES('joana');
SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+
#5 insira dois valores de uma só vez
INSERT INTO teste(nome) VALUES('marta'),('Bruna');
veja abaixo que o id pego deveria ser o 5 mas retornou o 4 conforme mencionamos acima:
SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 4 | +------------------+
#6 podemos colocar um valor dentro da função last_insert_id() e o valor retornado sempre será esse
SELECT LAST_INSERT_ID(12); +--------------------+ | LAST_INSERT_ID(12) | +--------------------+ | 12 | +--------------------+
mesmo após retirar o valor o retorno será 12
SELECT LAST_INSERT_ID(); +--------------------+ | LAST_INSERT_ID(12) | +--------------------+ | 12 | +--------------------+