3
respostas

last_insert_id()

Olá! Minha dúvida é a seguinte: Tenho que inserir vários dados em tabelas diferentes ao mesmo tempo — até aqui eu sei —, o que eu gostaria de saber é se posso usar o "last_insert_id()" para cadastrar vários dados ao mesmo tempo. Por exemplo, se houver 2 mil cadastros ao mesmo tempo no sistema, ele (last_insert_id()) vai inserir o id correto na outra tabela?

3 respostas

Vamos dizer que é 2 entidades que se relacionam e que você precisa fazer um insert de 2 mil registros. As entidades é classe e aluno.

Você faz o insert da Classe, e na hora de fazer o insert do primeiro aluno, o campo classe_id você usar o last_insert_id(), só que você não pode inserir uma nova classe até fechar todos os alunos dessa primeira classe cadastrada, conseguiu sacar Sergio ?

abraço

entendi. E no caso de uma loja virtual? Se meu site ou sistema está tendo no momento mais de mil visualizações e todas essas pessoas em seus computadores resolvem se cadastrar no sistema e a seguinte query é executada: "insert into usuario (id, nome, email ...) values ('', '$nome', '$email' ...); insert into usuario_local (usuario_id, local) values (last_insert_id(), '$local')"; O id inserido pela 'last_insert_id()' será o id correto para cada usuário?

O last_insert_id vai retornar o último id inserido por aquele cliente(conexão), então esse problema não vai acontecer. Esse problema poderia ocorrer se você tentasse retornar o id de outra forma, como por exemplo fazendo um select max. Aqui tem uma explicação melhor:

https://dev.mysql.com/doc/refman/5.6/en/getting-unique-id.html

Agora, num cenário onde você pode ter centenas de conexões ao mesmo tempo, o que você pode ter é um problema diferente, o que pode acontecer é ter erros de conexão, já que existe um limite de conexões simultâneas, que por padrão, pode variar de 100 a 150 conexões. O link abaixo explica isso:

https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html