Tengo una tabla MySQL con una clave primaria de incremento automático. Eliminé algunas filas en el medio de la tabla. Ahora tengo, por ejemplo, algo como esto en la columna ID: 12, 13, 14, 19, 20. Eliminé las filas 15, 16, 17 y 18.
Quiero reasignar / restablecer / reordenar la clave principal para tener continuidad, es decir, hacer 19 a 15, 20 a 16, y así sucesivamente.
¿Cómo puedo hacerlo?
Aunque esta pregunta parece ser bastante antigua, publicará una respuesta para alguien que busque aquí.
Si la columna se usa como clave externa en otras tablas, asegúrese de usarla en
ON UPDATE CASCADE
lugar de la predeterminadaON UPDATE NO ACTION
para la relación de clave externa en esas tablas.Además, para restablecer el
AUTO_INCREMENT
recuento, puede emitir inmediatamente la siguiente declaración.Para MySQL restablecerá el valor a
MAX(id) + 1
.fuente
.
id de usuario` = @count: = @count + 1`. De la documentación: "El valor en el lado derecho puede ser un valor literal, otra variable que almacene un valor o cualquier expresión legal que produzca un valor escalar"Para restablecer los ID de mi tabla de usuario, utilizo la siguiente consulta SQL. Se ha dicho anteriormente que esto arruinará cualquier relación que pueda tener con cualquier otra tabla.
fuente
Simplemente puede usar esta consulta
fuente
Creo que esto lo hará
fuente
O, desde PhpMyAdmin, elimine el indicador "AutoIncrement", guárdelo, configúrelo nuevamente y guárdelo. Esto lo restablece.
fuente
si quieres
order by
fuente
en phpmyadmin
pase a su tabla-> haga clic en el menú de operaciones-> vaya a opciones de tabla-> cambie AUTO_INCREMENT a ese no desde donde desea comenzar.
su tabla de autoincremento comienza desde ese no.
intentalo.
fuente
Puede eliminar la funcionalidad de incremento automático de la clave primaria de esa columna, luego, cada vez que actualice esa columna, ejecute una consulta de antemano que contará todas las filas de la tabla, luego ejecute un bucle que recorre ese recuento de filas insertando cada valor en el fila respectiva, y finalmente ejecute una consulta insertando una nueva fila con el valor de esa columna como el recuento total de filas más uno. Esto funcionará perfectamente y es la solución más absoluta para alguien que intenta lograr lo que eres. Aquí hay un ejemplo de código que puede usar para la función:
Aquí creé una matriz asociativa que había agregado en una columna de rango con la consulta dentro de una consulta de selección, que le dio a cada fila un valor de rango que comienza con 1. Luego recorrí la matriz asociativa.
Otra opción hubiera sido obtener el recuento de filas, ejecutar una consulta de selección básica, obtener la matriz asociativa e iterarla de la misma manera pero con una variable adicional que se actualiza a través de cada iteración. Esto es menos flexible pero logrará lo mismo.
fuente
para InnoDB, haga esto (esto eliminará todos los registros de una tabla, primero haga un bakcup):
fuente
Tenía las mismas dudas, pero no pude hacer ningún cambio en la tabla, decidí hacer lo siguiente al ver que mi ID no excedía el número máximo establecido en la variable @count:
La solución toma, pero es segura y era necesaria porque mi tabla poseía claves externas con datos en otra tabla.
fuente
La mejor opción es alterar la columna y eliminar el atributo auto_increment. Luego emita otra instrucción alter y vuelva a colocar auto_increment en la columna. Esto restablecerá el recuento al máximo + 1 de las filas actuales y, por lo tanto, conservará las referencias de clave externa a esta tabla, desde otras tablas de su base de datos o cualquier otro uso de clave para esa columna.
fuente
Mi opinión es crear una nueva columna llamada row_order. luego reordenar esa columna. No acepto los cambios a la clave primaria. Como ejemplo, si la columna de orden es banner_position, he hecho algo como esto: Esto es para eliminar, actualizar, crear una columna de posición de banner. Llame a esta función reordenarlos respectivamente.
fuente
Esto funciona: https ://stackoverflow.com/a/5437720/10219008..... pero si se encuentra con un problema 'Código de error: 1265. Datos truncados para la columna' id 'en la fila 1' ... Luego ejecute el seguimiento. Agregar ignorar en la consulta de actualización.
fuente
También puede evitar simplemente usar ID numéricos como clave principal. Puede usar códigos de país como identificación principal si la tabla contiene información de países, o puede usar enlaces permanentes, por ejemplo, si contiene artículos.
También podría simplemente usar un valor aleatorio o MD5. Todas estas opciones tienen sus propios beneficios, especialmente en TI sec. Las identificaciones numéricas son fáciles de enumerar.
fuente