MySQL Table Structure Synchronization Tool

Result

MySQL structure synchronization tool

The input could be taken from the phpMyAdmin structure dump, or mysqldump command:
mysqldump -h localhost -u root -p --no-data db_name [table_name]
to get database structure table by table.
The output is sql statements suitable for executions right from phpMyAdmin SQL page.
The resulting sql may contain queries that aim to:
Create missing table (CREATE TABLE query)
Delete table which should not longer exist (DROP TABLE query)
Update, drop or add table field or index definition (ALTER TABLE query)

Some features:

  • AUTO_INCREMENT value is ommited during the comparison and in resulting CREATE TABLE sql
  • fields with definitions like "(var)char (255) NOT NULL default ''" and "(var)char (255) NOT NULL" are treated as equal, the same for (big|tiny)int NOT NULL default 0;
  • IF NOT EXISTS is automatically added to the resulting sql CREATE TABLE statement
  • fields updating queries always come before key modification ones for each table
Not implemented:
  • Insert or re-order fields in the same order as in the original table.
  • IMPORTANT!!! Synchronizer will not handle a case when the field was renamed. It will generate 2 queries - one to drop the column with the old name and one to create column with the new name, so if there is a data in the dropped column, it will be lost.

Nástroj pro synchronizaci struktury MySQL databází

Dump struktury svých tabulek můžete získat pomocí phpMyQdmina nebo příkazem mysqldump:
mysqldump -h localhost -u root -p --no-data název_databáze [název_tabulky]
Výstupem jsou sql příkazy vhodné pro spuštění přímo v phpMyAdmin na strance SQL.
Výsledné sql může obsahovat dotazy pro:
Vytvoření chybějících tabulek (CREATE TABLE query)
Smazání tabulek, které více neexistují (DROP TABLE query)
Update, drop nebo add sloupců tabulky nebo indexů (ALTER TABLE query)

Vlastnosti:

  • Hodnota AUTO_INCREMENT je vypuštěna z porovnání tabulek
  • Pole, které jsou definovány jako "(var)char (255) NOT NULL default ''" a "(var)char (255) NOT NULL" jsou považována za stejná, to samé platí pro" (big|tiny)int NOT NULL default 0;
  • IF NOT EXISTS je automaticky přidáno do výsledného sql CREATE TABLE dotazu
  • Modifikace polí je provedena vždy před modifikací klíče pro toto pole
Není implementováno:
  • Vkládání nebo řazení polí ve stejném pořadí jako zdrojová tabulka.
  • DŮLEŽITÉ!!! synchronizátor nemůže rozeznat případ, kdy bylo pole přejmenováno. V tomto případě budou vygenerovány 2 sql dotazy - jeden na smazání pole a jeden na vytvoření pole s novým jménem. Pokud pole (sloupec) tabulky, který je mazán obsahuje data, tyto data budou ztracena.