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

MysqlDump + auto_incremente

Estas en el tema de MysqlDump + auto_incremente en el foro de Mysql en Foros del Web. Hola como va? El problema es que cuando hago un mysqldump con tablas que tienen un campo auto_increment me devuelve (en algunos casos) esto Código: ...
  #1 (permalink)  
Antiguo 29/02/2012, 08:06
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
MysqlDump + auto_incremente

Hola como va?
El problema es que cuando hago un mysqldump con tablas que tienen un campo auto_increment me devuelve (en algunos casos) esto

Código:

DROP TABLE IF EXISTS `maquinas`;
CREATE TABLE `maquinas` (
  `codmaquina` int(10) unsigned zerofill NOT NULL auto_increment,
  `descripcion` varchar(30) NOT NULL,
  `estado` varchar(4) default 'ALTA',
  PRIMARY KEY  (`codmaquina`),
  UNIQUE KEY `codmaquina` (`codmaquina`),
  KEY `codmaquina_2` (`codmaquina`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

Es decir esta linea "ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1"

lo que indica que el auto_increment arranca desde 4.

Me gustaría que arranque siempre desde 1, busque sobre truncate pero por lo que lei eso debo hacerlo tabla por tabla.

Hay alguna forma de que mysqldump no traiga esa opcion?
Y por que en algunas tablas lo trae y en otras no?
Gracias
  #2 (permalink)  
Antiguo 29/02/2012, 08: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: MysqlDump + auto_incremente

No se trata de un error, sino de una prevención de consistencia.
El mysqldump recupera las tablas en el estado que en ese momento tienen en la base que se respalda, y pone el valor inicial de los AI en un valor mayor a 1 cuando existen registros en la tabla, o la misma ha sido usada previamente y sus registros borrados.
El objetivo de esto es permitir que cualquier restauración de la estructura no pise valores de AI usadas comop PK en otros respaldos; si te permitiera resetear en el backup, podría suceder que usases valores de PK que ya están presentes en otra parte, o en otros respaldos, y que pertenecen a registros distitos. Eso produciría una inconsistencia y fallas de integridad referencial si en un momento dado necesitas consolidar los datos nuevos con los de las copias de respaldo.
¿Se entiende la idea?
Ahora bien, si lo que quieres es recuperar la estructura sin datos, y con los AI iniciados a cero, tendrás que borrar manualmente esa clausula en el script generado, porque hasta lo que yo se no hay parámetro que permita el reinicio de los autoincrementales en un backup con mysqldump.
La otra posibilidad es eliminar tabla protabla los registros usando TRUNCATE, para luego realizar el backup. Esto funcionará si y sólo si las tablas son InnoDB; en las MyISAM hay que resetear el AI manualmente.
__________________
¿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 29/02/2012, 08:37
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: MysqlDump + auto_incremente

excelente, muchas gracias
  #4 (permalink)  
Antiguo 29/02/2012, 18:05
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 6 meses
Puntos: 42
Respuesta: MysqlDump + auto_incremente

Hola mgd/gnzsoloyo,

Como aporte al tema, en el siguiente enlace mysqldump always includes AUTO_INCREMENT se plantea una alternativa sencilla de implementar.

Otra alternativa, por ejemplo, puede ser dentro de un procedimiento almacenado generar sentencias "ALTER TABLE" o "TRUNCATE" dinámicas sobre aquellas tablas con AUTO_INCREMENT.

Etiquetas: mysqldump, sql, tabla, campos
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 09:46.