Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Reparar ID

Estas en el tema de Reparar ID en el foro de Mysql en Foros del Web. olas a todos, tengo un problemita. Resulta que tengo unos cuandots ides echos moco en una tabla rde registro de usuarios. Ids que de repente ...
  #1 (permalink)  
Antiguo 26/12/2007, 09:10
Avatar de seinkraft  
Fecha de Ingreso: diciembre-2007
Mensajes: 119
Antigüedad: 16 años, 4 meses
Puntos: 1
Reparar ID

olas a todos, tengo un problemita.

Resulta que tengo unos cuandots ides echos moco en una tabla rde registro de usuarios.

Ids que de repente saltan del 19 a 64 sin aparicion alguna de los numeros intermedios y la verdad que queda feo.

Hay alguna forma de repara todo como si se volviera a a registar cada usuarios y quede bien ordenado?

Saludos.
  #2 (permalink)  
Antiguo 26/12/2007, 10:58
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Reparar ID

Supongo que esos IDs (supongo que es eso), son auto_increment. Si te pones a buscar en internet, te vas a dar cuenta que la secuencia es administrada por MySQL y no por el usuario. Si borrar un elemento, no va a reordenar todo lo que está y por eso quedan esos "huecos".

Los campos auto-increment, se utilizan cuando estás segur@ que los datos NO se van a borrar, como por ejemplo, una tabla de artículos.

Si es para llevar otro tipo de información, por ejemplo, nombre de personas, se utiliza la cédula o carnet de identificación de la persona como llave.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 26/12/2007, 11:09
Avatar de seinkraft  
Fecha de Ingreso: diciembre-2007
Mensajes: 119
Antigüedad: 16 años, 4 meses
Puntos: 1
Re: Reparar ID

Claro, son esos mismos y son auto_increment.

el problema es que no se borro ningun usuario ni nada y por eso no me explico porque faltan IDs con los usuarios que saltan del 19 al 64 :S

Pero bueno...no interesa si no tiene solucion :S.

Gracias igualmente.
  #4 (permalink)  
Antiguo 26/12/2007, 12:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Reparar ID

Si bien es cierto que los AUTO_INCREMENT son administrados directamente por MySQL, eso no quiere decir que no se puedan ingresar manualmente. De hecho si lo intentas, lo puedes hacer, en tanto no violes la consistencia de la clave o intentes superponer una clave ya existente.
Lo que sucede en esos casos es que pueden quedar "huecos" de numeración, porque MySQL usará el siguiente número de ID dispoinible inmediatamente mayor al último ID ingresado. Si del 45 saltaste al 63, el siguiente será el 64.

La solución es un poco a fuerza bruta:
- Elimina la condición de Primamry Key de ese campo.
- Elimina el campo.
- Crealo nuevamente.
- Asignale la condición de AUTO_INCREMENT y PRIMARY KEY.

Una vez hecho esto, lista la tabla y te encontrarás con el problema resuelto.

Cita:
USE TEST;
CREATE TABLE PRUEBA1(ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
DESCRIPCION CHAR(45));
INSERT INTO PRUEBA1(ID, DESCRIPCION) VALUES(1,'UNO'),(2,'UNO'),(4,'UNO'),(10,'UNO'),(11 ,'UNO'),(12,'UNO'),(95,'UNO');

+----+-------------+
| ID | DESCRIPCION |
+----+-------------+
| 1 | UNO |
| 2 | UNO |
| 4 | UNO |
| 10 | UNO |
| 11 | UNO |
| 12 | UNO |
| 95 | UNO |
+----+-------------+
7 rows in set (0.00 sec)

mysql> INSERT INTO PRUEBA1(DESCRIPCION) VALUES('DOS');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM PRUEBA1;
+----+-------------+
| ID | DESCRIPCION |
+----+-------------+
| 1 | UNO |
| 2 | UNO |
| 4 | UNO |
| 10 | UNO |
| 11 | UNO |
| 12 | UNO |
| 95 | UNO |
| 96 | DOS |
+----+-------------+
8 rows in set (0.00 sec)

mysql> ALTER TABLE PRUEBA1 DROP COLUMN ID;
Query OK, 8 rows affected (0.24 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE PRUEBA1 ADD COLUMN ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
;
Query OK, 8 rows affected (0.14 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM PRUEBA1;
+-------------+----+
| DESCRIPCION | ID |
+-------------+----+
| UNO | 1 |
| UNO | 2 |
| UNO | 3 |
| UNO | 4 |
| UNO | 5 |
| UNO | 6 |
| UNO | 7 |
| DOS | 8 |
+-------------+----+
8 rows in set (0.00 sec)
Tip: verifica el código de la aplicación que ingresa los datos. No debe saltearse numeración en un autoincremental. ALGO está haciendo mal.

Importante adición: Esto no se puede hacer si la clave primaria de la tabla es clave foránea en otra tabla.

Última edición por gnzsoloyo; 26/12/2007 a las 12:30
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:03.