Restaurar contador de AUTO-INCREMENT

Aunque los expertos reniegan de utilizar como clave campos de AUTO_INCREMENT, lo cierto es que demasiadas veces caemos en la tentación y los usamos. A veces de forma correcta, otras no, pero casi siempre, necesitamos restaurar su contador o renumerar nuestra tabla.Cuando utilizamos campos con la característica de AUTO-INCREMENT, cada vez que añadimos un registro, nuestro contador suma uno, pero cuando borramos, se van quedando los huecos de forma inevitable.

Ese comportamiento que nos va muy bien para trabajar, nos molesta cuando, por ejemplo, terminamos las pruebas y queremos entregar una base de datos limpia. Para dejar todos los números consecutivos, o hacer que el contador empiece en un numero determinado tenemos un comando SQL, pero antes de ponerlo, pensemos una vez mas lo que vamos a hacer; si el campo de auto incremento lo hemos utilizado como clave primaria y hay otras tablas que apuntan con el, cuando hagamos la recompactación, todo eso fallará.

Si nuestro campo de auto incremento se utiliza como clave de acceso, para su recompactación, deberíamos hacer un proceso, en que:

  1. duplicar la tabla actual
  2. vaciar la original
  3. leemos desde la duplicada
    1. grabamos la original
    2. recorremos las enlazadas modificando el indice antiguo por el nuevo
  4. Borrar la tabla duplicada.

Pero si no tenemos esa problemática, con solo un comando solucionamos nuestro problema.

En MySQL:

ALTER TABLE cl_post AUTO_INCREMENT=1

En MSSQL:

DBCC CHECKIDENT (cl_post, RESEED, 1)

Esto nos reordenará la columna de AUTO-INCREMENT y dejara el contador al numero que le indiquemos,siempre que sea mayor al ultimo utilizado, si no, el contador quedará ajustado al último.

Eso significa que si queremos que nuestro contador se inicie en 2000,solo deberíamos hacer:

En MySQL:

ALTER TABLE cl_post AUTO_INCREMENT=1999

En MSSQL:

DBCC CHECKIDENT (cl_post, RESEED, 1999)

Espero que os haya sido útil

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.

Esta entrada fue publicada en Formacion y etiquetada , , , , , . Guarda el enlace permanente.

Deja un comentario