Resetear autoincremento en MySQL

La posibilidad de generar valores automáticos para nuestras claves primarias gracias a la propiedad: AUTO_INCREMENT presente en muchos sistemas gestores de bases de datos modernos, es además de cómodo, seguro para quien lo implementa.

Sin embargo, en caso de borrar todos los datos de una tabla y volver a introducirlos, el valor del campo con AUTO_INCREMENT activado, en lugar de empezar desde 1, seguirá con la cuenta anterior. Esto es un detalle sin mucha importancia en algunos casos, pero que en algunas implementaciones puede dar problemas. Imaginemos una tabla con 10 registros con valores para su clave primaria numérica comprendidos entre 65 y 74. Sería por lo menos raro.

¿Cómo solucionarlo en MySQL? Simplemente deberemos ejecutar:

ALTER TABLE nombre_tabla AUTO_INCREMENT = 1

Y este problema habrá desaparecido. Si queréis optar por rellenar los valores “a mano” siempre os quedará la posibilidad de indicar el valor del campo de forma explícita, aunque sea un valor que se auto incremente.

Author Description

F. Javier Carazo Gil

Casi Ingeniero Informático, co-fundador y administrador de Linux Hispano, además de desarrollar software y mantener sistemas en el CSIC, hace poco he fundado junto con Alberto Hornero una start-up: CODECTION donde trabajamos con software libre. Puedes saber más sobre mí, mi vida laboral, mis libros, mis artículos y mi día a día en @fjcarazo y en mi perfil público de LinkedIn.

  • http://ushcompu.com.ar totoloco

    Interesante tip.
    Pero si vas a borrar todos los datos y querés resetear el autoinc se puede usar la sentencia TRUNCATE.
    salU

  • http://www.jcarazo.com carazo

    #totoloco: Borrando uno a uno los registros sufría estos problemas, ¿con TRUNCATE seguro que se pone a 1 el auto_incr?

  • Rodro

    Exactamente, como dice @totoloco, si haces un TRUNCATE el auto_increment se resetea también, si borras los datos a mano, es más efectivo el TRUNCATE…

  • http://www.jcarazo.com carazo

    @Rodro: En realidad no lo borraba a mano, pero hacía DELETE con condiciones que hacían lo que pensaba que era un TRUNCATE, pero veo que es diferente, gracias por comentarnos la diferencia.

  • Pingback: Diferencia entre DELETE, TRUNCATE y DROP en SQL | Linux Hispano

  • Pingback: Diferencia entre DELETE, TRUNCATE y DROP en SQL