Pergunta

Estou correto em entender que a função do MySQL LAST_INSERT_ID () não repõe entre as tentativas de inserção (como @@ identidade faz em sql-server) ... que se a operação de inserção imediatamente anterior falhar, LAST_INSERT_ID () irá retornar o pk de qualquer que seja o pk da última inserção que de conexão com qualquer tabela com uma chave primária auto-incremento foi. E se eu estiver correto neste, isso não parece ser apenas sobre o comportamento mais retardado para esta função que se pode chegar a? Não há nenhuma função mysql que se comporta de forma semelhante ao @@ identidade de sql-server? Uma que vai retornar NULL se o imediatamente anterior Inserir tentativa não cria nenhum novo recorde? Alternativamente, como se sabe com certeza a chave primária da operação mais recente inserção?

Foi útil?

Solução

@@ identidade é normalmente errado no sql server também. Você deve estar usando scope_identity() na maioria dos casos, em vez.

No MySQL, LAST_INSERT_ID () deve ser seguro de usar porque a única maneira você pode chamar esta função depois de um erro de inserção é que você já corretamente capturados e representaram o erro de inserção. Caso contrário, você ainda estaria processando comandos. Em outras palavras, LAST_INSERT_ID () não é o seu mecanismo de tratamento de erros.

Outras dicas

Você tem que verificar para ver se a inserção foi bem sucedida em primeiro lugar. Se a inserção foi bem sucedido, então você pode contar com LAST_INSERT_ID ().

edit: em PHP:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top