Pergunta

No MySQL, como faço para obter a chave primária utilizada para uma operação de inserção, quando é autoincrementável.

Basicamente, eu quero o novo valor autoincremented a ser devolvido quando da conclusão do comunicado.

Obrigado!

Foi útil?

Solução

O seu comentário esclarecimento diz que você está interessado em se certificar que LAST_INSERT_ID () não dá o resultado errado se outro inserção concorrente acontece. Tenha certeza de que é seguro usar LAST_INSERT_ID () independentemente de outra atividade concorrente. LAST_INSERT_ID () retorna apenas o ID mais recente gerado durante a sessão atual.

Você pode experimentar por si mesmo:

  1. Abrir duas janelas do escudo, mysql executar cliente em cada e se conectar a banco de dados.
  2. Shell 1: INSERT em uma tabela com uma AUTO_INCREMENT chave.
  3. Shell 1: Selecionar LAST_INSERT_ID (), ver o resultado.
  4. Shell. 2: inserir na mesma mesa
  5. Shell 2: Selecione LAST_INSERT_ID (), veja resultado diferente do shell 1.
  6. Shell 1: Selecionar LAST_INSERT_ID () mais uma vez, ver uma repetição do anterior resultado.

Se você pensar sobre isso, esta é a única maneira que faz sentido. Todos os bancos de dados que suporte auto-incrementar mecanismos chave deve agir desta forma. Se o resultado depende de uma condição de corrida com outros clientes, possivelmente, inserindo concomitantemente, então não haveria nenhuma maneira confiável para obter o último valor ID inserido na sua sessão atual.

Outras dicas

Os Docs MySQL descrever a função: LAST_INSERT_ID ()

[select max (primary_key_column_name) from table_name] Ahhh não nessecarily. Eu não sou um cara de MySQL, mas há uma maneira específica para obter o último id inserido pela última ação completa que são um pouco mais robusto do que isso. E se uma inserção que aconteceu entre você escrever para a mesa e consultando-lo? Eu sei sobre porque me picou há muitas luas (então sim ele faz acontecer). Se tudo mais falhar, leia o manual: http: // dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top