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?
| ||||
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 |
| ||||
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 |
| |||
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... |
| |||
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. |
| ||||
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 |