Interesante script que permite dados dos estructuras del MySQL, obtenidas por ejemplo usando un mysqldump, ver que diferencias hay entre ambos y devuelve las queries necesarias para igualar las dos estrucuras.
Por ejemplo, si tenemos la estructura siguiente:
CREATE TABLE IF NOT EXISTS `archive` (
`id` int(11) NOT NULL auto_increment,
`topFile` varchar(255) NOT NULL default '',
`msgId` int(11) NOT NULL default '0',
`time` timestamp NOT NULL default CURRENT_TIMESTAMP,
`topTpl` varchar(255) NOT NULL default '',
`file` varchar(255) NOT NULL default '',
`template` varchar(255) NOT NULL default '',
`instanceKey` varchar(255) NOT NULL default '',
`orderby` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;
Y este otro:
CREATE TABLE IF NOT EXISTS `archive` (
`id` int(11) NOT NULL auto_increment,
`topFile` varchar(255) NOT NULL default '',
`msgId` int(11) NOT NULL default '0',
`time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`topTpl` varchar(255) NOT NULL default '',
`file` varchar(255) NOT NULL default '',
`template` varchar(255) NOT NULL default '',
`instanceKey` varchar(255) NOT NULL default '',
`encoding` varchar(50) NOT NULL default '',
`orderby` varchar(255) NOT NULL default '',
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;
Nos devolvería las siguientes sentencias:
ALTER TABLE `archive` ADD `encoding` varchar(50) NOT NULL;
ALTER TABLE `archive` MODIFY `orderby` varchar(255) NOT NULL;
ALTER TABLE `archive` MODIFY `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
ALTER TABLE `archive` DROP PRIMARY KEY;
Un script bastante útil cuando, debido al despiste, tenemos diferencias entre la base de datos de desarrollo y la de producción y no sabemos qué cambios hemos realizado.
Database structure synchronizer
Buenas,
La verdad que es una utilidad muy buena, en su momento la utilicé mucho, pero si me permites recomendarte, serÃa mejor que te acostumbraras con otra sentencia, debido a que INSERT IGNORE es sólo permitido para MySQL y el dÃa que utilices Oracle o SQLServer tendrás que buscarte la vida con otra sentencia. Sólo es para que lo tengas en cuenta (a mi me paso)
No comparto ocultar los errores de esta forma. Creo que es mejor que falle y solucionarlo, ya que el error podrÃa tener otras consecuencias.
Por otro lado, si de forma controlada se quiere hacer un insert/update sin tener claro si antes ya existÃa el registro (incluso teniendo diferentes valores en caso de ser update) me gusta la opción “ON DUPLICATE KEY UPDATE”.
Saludos!
Tecnico, estoy totalmente de acuerdo contigo en intentar usar SQL estándar, yo también he sufrido lo de migrar de una BD a MySQL y es un infierno.
Armando, realmente, me va a venir de perlas para hacer una migración de una tabla a otra, que a veces me sale error de ids duplicados porque para ahorrar tiempo mando procesos concurrentes, pero claro, pierdo más tiempo en depurar el proceso que en meterle esta pequeña chapu, total, es una tarea puntual para una migración que quiero hacer.
Saludos a ambos