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

duda autoincremental

Estas en el tema de duda autoincremental en el foro de Mysql en Foros del Web. hola amigos: Me surje una duda, en mi base de datos tengo un campo autoincremental en mi base de datos MySQL que utilizo como referencia ...
  #1 (permalink)  
Antiguo 29/09/2009, 11:46
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
duda autoincremental

hola amigos:

Me surje una duda,

en mi base de datos tengo un campo autoincremental en mi base de datos MySQL que utilizo como referencia unica en un programa de transacciones, pero dicho programa solo acepta la referencia hasta 999,999 (novecientos noventaynueve mil novecientosnoventa y nueve).

Existe algun "store procedure" en mysql, que al llegar a esa cifra, el contador se reinicie y empiece desde 1 de nuevo??

Muchas gracias por la ayuda de antemano!
  #2 (permalink)  
Antiguo 29/09/2009, 12:34
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, 4 meses
Puntos: 2658
Respuesta: duda autoincremental

Tu problema es la capacidad del programa que usas. Eso es lo que deberías resolver, por cuanto:

1. No es conveniente "reorganizar" un índice autoincremental porque en esencia es una tarea sin funcionalidad, carente de practicidad y consumidora innecesaria de tiempo de proceso.

2. El renumerar las PRIMARY KEY de un campo incremental no produce ninguna mejora en la optimización de consultas, por lo que hacerlo solamente resulta en tiempo de PC consumido.

3. Renumerar un campo autoincremental, genera un nuevo ordenamiento FISICO de los datos (una PK genera un índice cluster), con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla cada vez y reconstruir el índice completamente.

4. Tampoco es recomendable bajo ninguna circunstancia renumerar una PK (es el caso en MySQL donde un AUTOINCREMENT es PK por default) si se usa como FK de otras tablas, porque generará inconsistencia de datos entre registros de tablas relacionadas.

5. No se recomienza renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que ponerle a un recién nacido el número de documento de un muerto.

6. El alcance de los rangos de representación de los campos numéricos en MySQL es muy amplio. Siendo UNSIGNED, tienes:


- TINYINT: 0 a 255.
- SMALLINT: 0 a 65.535.
- MEDIUMINT: 0 a 16.777.215
- INT: 0 a 4.294.967.295.
- BIGINT: 0 a 18.446.744.073.709.551.615


Si tu autoincremental no entra en ninguna de estas consideraciones, simplemente debes ejecutar
Código sql:
Ver original
  1. ALTER TABLE tabla AUTO_INCREMENT = 1.
Recordando que la tabla debe estar vacía o simplemente de reiniciarán todos los ID que haya. Y un ID de PK no puede duplicarse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 29/09/2009 a las 12:40
  #3 (permalink)  
Antiguo 29/09/2009, 15:55
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: duda autoincremental

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Recordando que la tabla debe estar vacía o simplemente de reiniciarán todos los ID que haya. Y un ID de PK no puede duplicarse.
Gracias, pero mi numero autoincremental no se llave primaria, simplemente se utiliza en un ciclo de 999,999 para diferenciar las transacciones....
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 00:19.