Tengo una tabla MySQL simple y el índice primario (id) no está numerado uno por uno (1, 31, 35, 100, etc.). Quiero que se numeren como (1, 2, 3, 4). Por favor, dime cómo hacerlo. También me gustaría señalar que soy consciente de las posibles consecuencias de la operación, pero solo quiero ordenar la mesa.Cómo volver a numerar el índice primario
Respuesta
Estoy de acuerdo en que otros métodos funcionarán, pero solo estoy dando una idea diferente. Esto va a hacer sin ningún tipo de requisitos de creación de tabla temporal ::
SET @i=0;
UPDATE table_name SET column_name=(@i:[email protected]+1);
tiene que definir el incremento automático de la clave principal (si se trata de una clave principal)
Aquí hay un enlace:
-1: Esto no responde la pregunta. Si elimina, por ejemplo, la fila con el valor 2 autoincrementado, entonces tiene un agujero en los identificadores. Eso es lo que quiere cambiar. – dbemerlin
Pero no puede evitar todo al permitir la eliminación de sus registros. Por lo tanto, crear una nueva tabla te ayudará temporalmente –
CREATE TABLE newtable
LIKE oldtable
SELECT NULL, col1, col2, col3, etc FROM oldtable;
Sin incluir la columna de clave primaria en la selección, pero todas las otras columnas.
Y la columna de la clave principal debe ser la primera en la tabla, o deberá configurar el NULL
en la posición de la columna de la clave principal. Y la columna debe tener una configuración "NOT NULL". De lo contrario, se establecerá como nulo, y eso es algo sin sentido.
La razón por la que esto funciona es porque a MySQL le gusta ignorar las inserciones NULL en auto_increments, y en cambio crea un nuevo número para ella (siempre que null no sea un valor válido en esa columna).
- Elimina la columna "id".
- Crear una identificación con nombre de columna con incremento automático activado (y no permitir valores nulos), tendrá los nuevos valores que desee.
- Asigne esta nueva columna "id" como PK.
editado más tarde gracias a los comentarios.
, solo puedes tener una columna de incremento automático a la vez, así que si quieres seguir esta receta, puedes hacer un atajo: 1. elimina la columna anterior. 2. hacer uno nuevo. –
sí, me olvidé de eso. – Numenor
La solución más sencilla es:
- Cambiar nombre de la tabla a tablename_temp
- crear una nueva tabla con el nombre de edad y la misma estructura
- INSERT INTO nombre de tabla (id, campo1, campo2, field3) SELECCIONE NULL, field1, field2, field3, ... DESDE tablename_temp;
- DROP tablename_temp
Esto destruirá todos sus datos si está utilizando claves externas y le recomiendo encarecidamente que sale de los identificadores como son. Una base de datos no está desordenada porque las claves primarias no están en secuencia, una base de datos está desordenada si su integridad referencial (valores de id que apuntan a la fila incorrecta o inexistente en otras tablas) está rota.
darle una oportunidad para volver a numerar método de dalmp (DALMP Database Abstraction Layer for MySQL using PHP.)
$db->renumber('table','uid');
básicamente se hace esto:
SET @var_name = 0;
UPDATE Tablename SET ID = (@var_name := @var_name +1);
ALTER TABLE tablename AUTO_INCREMENT = 1
Fantástico @tareco, esto es perfecto para un problema diferente pero similar cuando quieres importar registros de un volcado sql en una tabla y encontrar valores clave primarios conflictivos. Ejecuté su comando sql en mi tabla de destino antes de la importación y funcionó perfectamente. – AdamJones
Usted don no lo quiero La clave principal no es un número. Es solo una secuencia única sin sentido.
- 1. cómo prevenir array_merge volver a numerar las teclas numéricas
- 2. Cómo obtener el índice de un elemento primario en jQuery
- 3. ¿Por qué MySQL Query Optimizer elige el índice secundario sobre el índice primario agrupado?
- 4. oráculo varchar para numerar
- 5. Determinación del índice secundario en su elemento primario
- 6. ¿Cómo uso plyr para numerar filas?
- 7. Regla de validación para un índice único compuesto (no primario)
- 8. ¿Debo definir el índice (A) y el índice (B), o el índice (A, B) o ambos?
- 9. ¿Cómo volver a instalar el paquete rpm?
- 10. cómo volver a montar el segmento tcp?
- 11. numerar varias ecuaciones con un solo número
- 12. ¿Cómo volver a colocar MediaController?
- 13. ¿Cómo volver a cargar gdbinit?
- 14. El índice de texto completo requiere dejar caer y volver a crear, ¿por qué?
- 15. PHP quitar el primer índice de un array y volver a indexar
- 16. ¿Cómo volver a cargar TreeStore?
- 17. Cómo volver a habilitar event.preventDefault?
- 18. Numerar cómo iterar sobre las columnas de la matriz?
- 19. HtmlElement.Parent devuelve el elemento primario incorrecto
- 20. Mootools obtiene el índice hijo de un elemento de su elemento primario
- 21. crear ejes d3.js sin numerar
- 22. Volver a cargar la ventana primaria desde la ventana secundaria
- 23. ¿Cómo forzar a un script a volver a cargar y volver a ejecutar?
- 24. ¿Cómo cambio el carácter que Vim usa para numerar las líneas en blanco en el búfer?
- 25. Cómo descartar y volver a crear y el índice de clave principal utilizando SMO con SQL Server?
- 26. Volver StreamReader a Inicio
- 27. Detectar cuando el proceso primario finaliza
- 28. Establecer el elemento primario de un formulario
- 29. C# - Obtiene el elemento primario de ToolStripMenuItem
- 30. Volver a muestrear Filtro de WEKA - Cómo interpretar el resultado
No restablecerá el valor de auto_increment, por lo que si tu auto_increment fue 1344 y después de actualizar solo obtienes 100 id, la siguiente fila tendrá el id 1344, creando un agujero nuevamente. Es posible configurar auto_increment manualmente después de la actualización. – dbemerlin
o Por supuesto, debe actualizar el incremento automático; Me perdí de especificar eso. ALTER TABLE TABLENAME auto_increment =; –
Yah, esto es genial, pero hay una cosa a tener en cuenta: id duplicado –