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

es posible hacer que autoincrement solo incremente si se inserta realmente el campo?

Estas en el tema de es posible hacer que autoincrement solo incremente si se inserta realmente el campo? en el foro de Bases de Datos General en Foros del Web. Estoy desarrollando una especie de tienda en mysql, el caso es que tengo algunas tablas que contienen algún campo auto increment. Me funciona perfecta mente ...
  #1 (permalink)  
Antiguo 27/01/2010, 16:34
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 8
es posible hacer que autoincrement solo incremente si se inserta realmente el campo?

Estoy desarrollando una especie de tienda en mysql, el caso es que tengo algunas tablas que contienen algún campo auto increment. Me funciona perfecta mente per haciendo pruevas me doy cuenta que si intento repetir un registro (para que no me deje insertar) el numerador de auto_increment se incrementa sin haber insertado ningún registro, por lo que cuando voy a insertar un registro bueno el auto_incrementa esta 2 números por encima del ultimo registro insertado... ( si envio 10 consultas erroneas para que no se ejecuten, son 10 números los que se incrementa )
Como podría evitar esto?

Una tablla cualquiera (para ilustrar un poco el ejemplo)
Código PHP:
Create table categories (
codi integer not null auto_increment,
nom varchar(30not null,
descripcio varchar(30not null,
primary key(codi,nom),
unique restnom(nom)
Engine=Innodb
luego ejecuto

Código PHP:
Insert into categories (nom,descripciovalues ('pescado','primer registro, tendra codi=1');
Insert into categories (nom,descripciovalues ('pescado','este no se inserta, salta como duplicado');
Insert into categories (nom,descripciovalues ('carne','este si que se inserta, pero el auto_increment le asigna codi=3'); 
lo que quiero es que si no se inserta no se aumente el numero de las categorias existentes.

Gracias de antemano
Un saludo
  #2 (permalink)  
Antiguo 28/01/2010, 06:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: es posible hacer que autoincrement solo incremente si se inserta realmente

Tienes un error conceptual:

la clave autoincremental NO debe ser usada como contador de registros.

Te preguntarás,

¿Por que? Si seria muy práctico.

Pues por que es una clave, un identificador, podriamos admitir que no se "auto"incremente cuando la inserción es errónea como nos as explicado, muy bien.

Pero preguntate nos podríamos permitir que se recalcule si lo que hacemos es eliminar el registro 3 de una tabla de 10 registros. Es decir que el registro con identificador=4 pasase a ser 3 y así hasta el último...

Que pasaría con las relaciones con otras tablas...

Que pasaría cuando la tabla tuviera millones de registros...

Si quieres saber el numero de registro cuéntalos no uses el valor del ultimo identificador...

Si quieres listar con un numerador correlativo genera ese numerador con el lenguaje externo que te va a imprimir el listado (sea en papel o por pantalla).

Te he convencido?

Quim
  #3 (permalink)  
Antiguo 31/01/2010, 07:19
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 8
Respuesta: es posible hacer que autoincrement solo incremente si se inserta realmente

Quimfv gracias por tu respuesta,

En principio entiendo lo que me quieres decir, para contar registros mejor con u count(*), veras el ciclo es que se permitan añadir pero nunca borrar registros, de forma que lo que me gustaría controlar es justamente que no se salte posiciones al hacer consultas fallidas.

por otra parte, cuando inserte registros en tablas dependientes, siempre consultare antes a que categoría pertenece.

Estoy usando MySQL Query Browser por lo que es todo en consola... con esto no estoy usando ningún lenguaje de programación.

igual no tiene mucho sentido, pero me gustaría saber si esto es posible. Los dos coincidimos que con un lenguaje de programación podríamos consultar antes si existe y si no, insertarlo.

Se te ocurre algo ?

...igual alguien tendría que trasladarlo al foro mysql

Última edición por harryp; 31/01/2010 a las 07:31 Razón: faltas de ortografia :-P
  #4 (permalink)  
Antiguo 31/01/2010, 07:42
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: es posible hacer que autoincrement solo incremente si se inserta realmente

Volvamos al problema inicial:
Cita:
si intento repetir un registro (para que no me deje insertar) el numerador de auto_increment se incrementa sin haber insertado ningún registro, por lo que cuando voy a insertar un registro bueno el auto_incrementa esta 2 números por encima del ultimo registro insertado... ( si envio 10 consultas erroneas para que no se ejecuten, son 10 números los que se incrementa )
SI lo que quieres es evitar que un auto_increment se incremente ante una inserción fallida, lo más simple es usar transacciones. Como el COMMIT se hace sólo al terminar la inserción exitosa, solamente quedan fijos aquellos efectivamente usados.

La segunda parte del planteo parece hacer referencia a los números de subitem de un documento en especial. ¿Es así?
__________________
¿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 02/02/2010, 05:20
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: es posible hacer que autoincrement solo incremente si se inserta realmente

Creo que deberías ponerle a la tabla un campo ID autonumerico, pero que no tenga significado en los datos que estás modelando. Este campo debería ser la pK de esa tabla y el campo por el que establezcas las relaciones con otras.

De esta manera, te da igual si se incrementa o no. Si a pesar de todo no queires que se incremente utiliza transacciones como han comentado más arriba.
  #6 (permalink)  
Antiguo 04/02/2010, 05:16
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 8
Respuesta: es posible hacer que autoincrement solo incremente si se inserta realmente

Gracias a todos por el interes no conocia las transacciones.

Un saludo

Etiquetas: inserta, posible, realmente, 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 14:15.