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

Como garantir que não haja lacunas nos números de auto_increment?


Em primeiro lugar, está completamente bem ter essas lacunas. Não há não há problema . É apenas o seu TOC que o força a pensar que esses números precisam seguir um padrão - eles NÃO.
  • auto_increment não é um recurso PHP, é um recurso MySQL
  • auto_increment garante que cada linha tenha um único número. Não lida com números sequenciais
  • auto_increment funciona com segurança em ambiente simultâneo - isso significa que há muitos usuários se conectando ao MySQL e fazendo coisas, e todos eles precisam lidar com o banco de dados e não obter o mesmo id para identificar uma linha. Isso é feito através de um processo bastante complexo e esta é uma das razões pelas quais auto_increment produz lacunas
  • auto_increment é usado pelo InnoDB para organização física de registros em disco - usa o recurso de auto_increment e esse está produzindo um número maior que o anterior (é isso que ele faz, maior que o anterior, não sequencial). Usando isso, uma b-tree é construída e os registros são gravados em sequência no disco rígido. Violação de auto_increment faz InnoDB reequilibrar a árvore. Isso significa que ele passa pelos registros e recria o índice se você mexer nele - isso é algo que você não deseja. Sempre

Quando você pensa sobre isso, o que você consegue com números sequenciais? Nada realmente, exceto que seu cérebro provavelmente dói menos porque há alguma ordem imaginária.

Para números sequenciais, use gatilhos para criá-los. auto_increment tem um trabalho e apenas um trabalho - para produzir único números.