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

problemas con autoincrement

Estas en el tema de problemas con autoincrement en el foro de Mysql en Foros del Web. Buen dia no se si sea el foro correcto, pero tengo un problemita al generar los folios de unos archivos. La situacion comenzo cuando la ...
  #1 (permalink)  
Antiguo 15/01/2013, 10:52
Avatar de jandrogdz  
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 12 años, 4 meses
Puntos: 12
Pregunta problemas con autoincrement

Buen dia

no se si sea el foro correcto, pero tengo un problemita al generar los folios de unos archivos. La situacion comenzo cuando la persona encargada de generar estos archivos duplico uno por tanto en la base de datos los folios continuaron por ejemplo se hizo el 44 y 45 cuando solo debio haber quedado el 44 y ahora al momento de hacer cada insercion me arroja el folio siguiente es decir el 46 debe ser el 45 y asi como puedo soluionar eso.

gracias de antemano
__________________
Lo imposible solo cuesta un poco mas
  #2 (permalink)  
Antiguo 15/01/2013, 10:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: problemas con autoincrement

Pues es un problema de base de datos, ciertamente no va aquí.

Vas a tener que reparar a mano los datos de tu tabla, no hay magia para eso.

Aunque puedes establecer el valor del auto incremento con una consulta, investiga al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 15/01/2013, 11:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con autoincrement

En ese tipo de documentación no te conviene usar auto_increment, precisamente por esas situaciones. Es el mismo problema que en los sistemas de facturación
Mi sugerencia es que modifiques la estructura de la tabla y la lógica de generación de ese ID. EL ID tiene que generarse al momento del alta del folio, dentro de una transaction, de modo que sólo se registre si el alta de todo fue exitosa.
Pero la numeración debe obtenerse en una consulta previa.

O sea... es algo más complejo.

El problema que tienes ahora es que si renumeras para mantener la continuidad numérica puedes generar problemas de integridad referencia, si ese numero de folio se usa en otros sitios como FK. Además se puede producir también una inconsistencia de continuidad histórica, si ya hay nuevos folios ingresados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/01/2013, 11:33
Avatar de jandrogdz  
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 12 años, 4 meses
Puntos: 12
Respuesta: problemas con autoincrement

Entonces lo recomendable es kitar el autoincrement y generar los folios desde una consulta de por ejemplo

sacar el ultimo folio +1 y ese mostrarlo en el campo folio o como seria?
__________________
Lo imposible solo cuesta un poco mas
  #5 (permalink)  
Antiguo 15/01/2013, 11:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problemas con autoincrement

Exactamente.
Por allí sería conveniente crear una función en MySQL que te devuelva ese valor, para evitar problemas con los casos donde la tabla está vacía, pero de lo contrario sería algo como:
Código MySQL:
Ver original
  1. SELECT (MAX(id_folio) +1)  id_folio
  2. FROM folios;
No es completamente funcional así, si la tabla está vacía, porque devolvería NULL, cosa que hay que tener en cuenta al momento de realizar la consulta.
Pero eso también lo puedes controlar en la programación de la aplicación...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 15/01/2013, 11:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problemas con autoincrement

Este sería un ejemplo de stored function para obtener ese dato:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS MaxIdFolio;
  3.  
  4. $$CREATE FUNCTION MaxIdFolio() RETURNS INT
  5.     DECLARE max_id INT;
  6.     DECLARE count_id INT;
  7.     SELECT COUNT(*) INTO count_id
  8.     FROM folios;
  9.     IF count_id = 0 THEN
  10.         RETURN 1;
  11.     END IF;
  12.     SELECT MAX(id_folio) INTO max_id
  13.     FROM folios;
  14.     RETURN max_id;
  15. END$$
  16. DELIMTER ;
Y el uso sería:
Código MySQL:
Ver original
  1. SELECT MaxIdFolio()  id_folio
;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, autoincrementable
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 10:58.