Esta é uma solução sugerida pelo Manual do MySQL :
Se expr for fornecido como um argumento para LAST_INSERT_ID(), o valor do argumento será retornado pela função e será lembrado como o próximo valor a ser retornado por LAST_INSERT_ID(). Isso pode ser usado para simular sequências:
Crie uma tabela para conter o contador de sequências e inicialize-o:
mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);
Use a tabela para gerar números de sequência como este:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID();
A instrução UPDATE incrementa o contador de sequência e faz com que a próxima chamada para LAST_INSERT_ID() retorne o valor atualizado. A instrução SELECT recupera esse valor. A função da API C mysql_insert_id() também pode ser usada para obter o valor. Veja Seção 23.8.7.37,“mysql_insert_id()”.
Você pode gerar sequências sem chamar LAST_INSERT_ID(), mas a utilidade de usar a função dessa forma é que o valor do ID é mantido no servidor como o último valor gerado automaticamente. É seguro para vários usuários porque vários clientes podem emitir a instrução UPDATE e obter seu próprio valor de sequência com a instrução SELECT (ou mysql_insert_id()), sem afetar ou ser afetado por outros clientes que geram seus próprios valores de sequência.