Foros del Web » Programando para Internet » PHP »

Ayuda con MySQL

Estas en el tema de Ayuda con MySQL en el foro de PHP en Foros del Web. TEngo una tabla que tiene un campo id que es autoincremental, cuando borro un registro ,por ej: el id 45, y luego vuelvo a insertar ...
  #1 (permalink)  
Antiguo 08/04/2005, 09:31
Avatar de unanime  
Fecha de Ingreso: diciembre-2002
Mensajes: 46
Antigüedad: 21 años, 11 meses
Puntos: 0
Ayuda con MySQL

TEngo una tabla que tiene un campo id que es autoincremental,
cuando borro un registro ,por ej: el id 45, y luego vuelvo a insertar otro nuevo me genera el id 46, no el 45.

Como hago para resolver esta situacion?
  #2 (permalink)  
Antiguo 08/04/2005, 09:45
 
Fecha de Ingreso: febrero-2004
Ubicación: Bogotá, Colombia
Mensajes: 191
Antigüedad: 20 años, 9 meses
Puntos: 1
Creo q no se puede devolver un campo auto_increment.
  #3 (permalink)  
Antiguo 08/04/2005, 09:55
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 8 meses
Puntos: 77
com dice andresirto, hasta donde se no es posible devolver un auto_increment, lo que se me ocurre podrias hacer es no hacerlo auto_increment y para darle el valor que siga haces un select max(id) para que te traiga el mayor y luego ya haces el insert con ese valor+1
  #4 (permalink)  
Antiguo 08/04/2005, 10:12
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Se puede desactivar con sql y forzar su ingreso, pero regenerar un auto_increment, no es ni recomendable ni logico.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 08/04/2005, 11:54
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 10 meses
Puntos: 2
mysql_db_query($dbname, "ALTER TABLE `tabla` DROP `ID`") or die(mysql_error());
mysql_db_query($dbname, "ALTER TABLE `tabla` ADD `ID` TINYINT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;") or die(mysql_error());
Saludos cuidate.
Si se puede hacer y es recomendable para quien lo quiera hacer. No mucho no lo utilizo, pero cuando lo he tenido q hacer no me ha dado problemas. Al crearse el ID nuevamente se autoincrementa automáticamente hasta el último dato.
__________________
Dios dira que esto no es justo, pero lo sera...
  #6 (permalink)  
Antiguo 08/04/2005, 12:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El problema de si se puede hacer o no .. sino de ver por qué necesita hacerlo.

Si nos guiamos por las normas de "Normalización" .. no es para nada recomendable ir "ocupando" registros únicos como lo que se pretende hacer cuando se usa un "autonumérico" ..

Ejemplo:
Tengo un registro N que apunta a una noticia .. por ejemplo ID=1 .. esa noticia me gustó .. yo me guardé ese link que apunta a ese "id" tipo: nose.php?id=1 .. ahora llegas y por A o B motivo .. lo borras (OK, hay que borrarlo) .. pero yo llego a ese "ID=1" en otra ocasión y me encuentro que ese No es el contenido que esperaba sino otro .. En esos casos lo que debes hacer es mostrar un "registro no encontrado" .. simplemente. Peor se pone la cosa si ese "ID" de ese registro relaciona a otros en otras tablas (relaciones 1-N .. N-N .. etc) ahí se va al garete toda la teoría de "integridad referencial" y normalización en general.


Un saludo,

PD: esto son temas de "Base de datos" no de PHP.
  #7 (permalink)  
Antiguo 08/04/2005, 12:27
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Y si tenes otra tabla relacional a esta, relaciones...ojo!

A lo que yo me refería es a regenerar el codigo 45 como en el ejemplo, enviandolo en el insert, prévio a la ejecución, deshabilitas el chequeo de claves únicas, externas y el "autocommit":
SET UNIQUE_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET AUTOCOMMIT = 0;
Hacemos un "commit" al final o cada N cambios:
COMMIT;
Al final, volves a habilitar todo:
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
SET AUTOCOMMIT = 1;
Esto te dejará hacer un insert a id en teoría.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 13:03.