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

Error en campo autoincrement en phpmyadmin

Estas en el tema de Error en campo autoincrement en phpmyadmin en el foro de Mysql en Foros del Web. Hola, tengo un campo autoincremet en una tabla en mi base de datos y el problema es que cuando ingeso datos alguna veces la numeración ...
  #1 (permalink)  
Antiguo 14/01/2013, 03:47
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Error en campo autoincrement en phpmyadmin

Hola, tengo un campo autoincremet en una tabla en mi base de datos y el problema es que cuando ingeso datos alguna veces la numeración no es correlativa. Es decir el campo automaticamente empieza por el 1,2,3 y luego se pasa al 5,6,7 etc...
Porque puede ser?
Gracias
  #2 (permalink)  
Antiguo 14/01/2013, 04:39
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: Error en campo autoincrement en phpmyadmin

No es un error. Es muy probable que sean INSERTs fallidos, ya que esa propiedad del campo impacta aunque no se logre la inserción.
El otro error posible es que se hayan borrado registros, especialmente los últimos, porque la propiedad tampoco retrocede.
En el fondo es un problema irrelevante, porque no te generará ningún tipo de efectos nocivos en el sistema. Si te preocupa porque no queda con la secuencia completa, o "bonito", te cuento que hay otros modos de numerar sin necesidad de recurrir a alterar la estructura de la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/01/2013, 07:40
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No es un error. Es muy probable que sean INSERTs fallidos, ya que esa propiedad del campo impacta aunque no se logre la inserción.
El otro error posible es que se hayan borrado registros, especialmente los últimos, porque la propiedad tampoco retrocede.
En el fondo es un problema irrelevante, porque no te generará ningún tipo de efectos nocivos en el sistema. Si te preocupa porque no queda con la secuencia completa, o "bonito", te cuento que hay otros modos de numerar sin necesidad de recurrir a alterar la estructura de la tabla.
Gracias, creo que son insert fallidos. Pero el problema es grave porque son números de facturas y claro por ley tienen que ir correlativas. Como lo puedo hacer para que no me pase?
Un saludo
  #4 (permalink)  
Antiguo 14/01/2013, 07:47
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: Error en campo autoincrement en phpmyadmin

Por lo pronto, si son numeros de facturas no los pongas como AUTO_INCREMENT. es una muy mala idea, porque los números de facturas no se producen en forma automática. Nadie lo hace en un sistema contable. La numeración debe ser controlable por el sistema, y no por la base de datos.
En todo caso deberías usar algunos otros medios para generarlos, como por ejemplo consultar cuál es el último generado (es lo que se suele hacer), antes de realizar el alta.
Además, si vas a crear un sistema de facturación, te conviene también trabajar con transacciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/01/2013, 08:18
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo pronto, si son numeros de facturas no los pongas como AUTO_INCREMENT. es una muy mala idea, porque los números de facturas no se producen en forma automática. Nadie lo hace en un sistema contable. La numeración debe ser controlable por el sistema, y no por la base de datos.
En todo caso deberías usar algunos otros medios para generarlos, como por ejemplo consultar cuál es el último generado (es lo que se suele hacer), antes de realizar el alta.
Además, si vas a crear un sistema de facturación, te conviene también trabajar con transacciones.
Por favor puedes darme algún ejemplo de como hacerlo. Ya sabes que estoy un poco verde en estos temas.
  #6 (permalink)  
Antiguo 14/01/2013, 09:58
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
te cuento que hay otros modos de numerar sin necesidad de recurrir a alterar la estructura de la tabla.
Me refirero a esto.
  #7 (permalink)  
Antiguo 14/01/2013, 10:05
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: Error en campo autoincrement en phpmyadmin

Está en las FAQs de MySQL: Cómo numerar secuencialmente una consulta
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 14/01/2013, 15:47
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

gnzsoloyo, he hecho el select para recuperar la última factura:

Código MySQL:
Ver original
  1. select id_factura from facturas order by id_factura

Como hago el INSERT para que me ingrese un número de factura mas del número recuperado?

Código MySQL:
Ver original
  1. INSERT INTO facturas  (id_factura)
  2. VALUES ('$id_factura')

Última edición por gnzsoloyo; 14/01/2013 a las 17:21 Razón: Codigo de programación no permitido en Bases de Datos.
  #9 (permalink)  
Antiguo 14/01/2013, 16:21
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

Lo he hecho así:
Código MySQL:
Ver original
  1. select id_factura from facturas order by id_factura

Que te parece?

Última edición por gnzsoloyo; 14/01/2013 a las 17:22 Razón: Codigo de programación no permitido en Bases de Datos.
  #10 (permalink)  
Antiguo 14/01/2013, 17:24
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: Error en campo autoincrement en phpmyadmin

Lo siento, pero el desarrollo en este foro no puede incluir código de programación. Es norma en el Foro.

Yendo a tu planteo, es básicamente correcto, aunque yo lo implementaría de un modo más directo:
Código MySQL:
Ver original
  1. SELECT (MAX(id_factura) +1)  id_factura
  2. FROM facturas;

Ahora bien, ten en cuenta algunas cosas:
1) Un sistema de facturación requiere dos tablas: Factura y DetalleFactura. La primera tiene sólo los datos únicos de la factura: Numero, fecha, id_Cliente, descuentos aplicados, etc. La segunda tiene el detalle de cada producto que está en la factura con: id_factura, id_item, IdProducto, cantidad.
2) Se requieren dos grupos de INSERT para dar el alta a una sola facura: El primero da de alta el encabezado y el segundo es un INSERT múltiple con un conjunto de datos (incluyendo el id_factura en cada item) por cada línea de la factura.
3) Es posible que se necesiten tablas adicionales y relaciones adicionales para Ordenes de pedido, Remitos, Cliente, CuentaCliente, Caja, FormaDePago, Recibo, etc., dependiendo de las características del sistema.

Un esquema básico sería mas o menos:


__________________
¿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; 14/01/2013 a las 17:31
  #11 (permalink)  
Antiguo 14/01/2013, 17:59
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

gnzsoloyo, muchas gracias por tus explicaciones. Aprendo mucho en este foro. El problema que tengo es que la 1ª factura al no existir el SELECT me la recoge la variable id_factura en blanco. Hay alguna forma de hacerlo o tendría que crear la 1ª factura?
Gracias y un saludo
  #12 (permalink)  
Antiguo 15/01/2013, 03:33
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Error en campo autoincrement en phpmyadmin

Gracias gnzsoloyo, lo he resuelto poniendo una condición de que si el campo esta vacio numerar la primera factura de forma manual. Es decir poner un 1.
  #13 (permalink)  
Antiguo 15/01/2013, 04:35
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: Error en campo autoincrement en phpmyadmin

Es una solución práctica...
En general ese tipo de etapas se suele resolver manejando las bases de datos por medio de stored procedures, donde se implementan esos detalles.
Pero los SP requieren algo de experiencia en BBDD, para ser una buena opción en este momento. Más adelante probablemente sí, cuando hayas tenido más experiencia en estos temas.

__________________
¿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: phpmyadmin, tabla, campos, 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:31.