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

Quando eu INSERT várias linhas em uma tabela MySQL, os ids serão incrementados em 1 todas as vezes?


A resposta é:bem, depende.

No caso do myisam, a resposta é um sim definitivo, pois as sequências do myisam inserem solicitações.

No caso do innodb, entretanto, o comportamento é configurável desde o mysql v5.1. antes da v5.1, a resposta para InnoDB também é sim, depois depende do innodb_autoinc_lock_mode contexto. Consulte a documentação do mysql em configuração do InnoDB auto_increment para obter detalhes .

Para lhe dar os destaques, existem 3 innodb_autoinc_lock_mode definições:
  1. tradicional (0)
  2. consequente (1) - padrão
  3. intercalado (2)

Outras lacunas podem ocorrer no valor auto_increment, se uma transação tiver sido revertida. Uma inserção em massa só pode ser revertida como um todo.

ATUALIZAÇÃO: Conforme descrito acima, você terá o cenário 1) ou 2) , se você usar
  • mecanismo de tabela myisam
  • ou innodb pré mysql v5.1
  • ou innodb com mysql v5.1 ou mais recente e o innodb_autoinc_lock_mode é 0 ou 1

Não há como dizer qual é inserido primeiro.

Você pode obter cenário 3) ou 4) se você usar
  • innodb com innodb_autoinc_lock_mode 2

Novamente, não há como dizer como e por que o mysql mistura a ordem dos registros.

Então, se sua pergunta está relacionada ao fato de você inserir 3 registros com inserção em massa e last_insert_id() retorna o valor de auto_increment apenas do primeiro registro inserido, e você deseja obter os ids dos outros 2 registros por simples adição é que você pode ser necessário verificar a configuração do mysql com base no mecanismo de tabela e na versão do mysql usada.