Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pergunta fácil do mysql sobre chaves primárias e uma inserção


Seu comentário de esclarecimento diz que você está interessado em garantir que LAST_INSERT_ID() não dê o resultado errado se ocorrer outro INSERT simultâneo. Tenha certeza de que é seguro usar LAST_INSERT_ID() independentemente de outras atividades simultâneas. LAST_INSERT_ID() retorna apenas o ID mais recente gerado durante a sessão atual.

Você pode tentar você mesmo:
  1. Abra duas janelas de shell, execute mysqlclient em cada uma e conecte-se ao banco de dados.
  2. Shell 1:INSERT em uma tabela com uma chave AUTO_INCREMENT.
  3. Shell 1:SELECT LAST_INSERT_ID(), veja o resultado.
  4. Shell 2:INSERT na mesma tabela.
  5. Shell 2:SELECT LAST_INSERT_ID(), veja o resultado diferente do shell 1.
  6. Shell 1:SELECT LAST_INSERT_ID() novamente, veja uma repetição do resultado anterior.

Se você pensar sobre isso, esta é a única maneira que faz sentido. Todos os bancos de dados que suportam mecanismos de chave de incremento automático devem agir dessa maneira. Se o resultado depender de uma condição de corrida com outros clientes possivelmente fazendo INSERT simultaneamente, não haverá uma maneira confiável de obter o último valor de ID inserido em sua sessão atual.