sql >> Database >  >> RDS >> Mysql

alleen mysqldump-schema, schema-update zonder drop

Hoe zou MySQL weten wat te updaten? Het kan niet weten in welke staat de database van iemand anders zich bevindt, dus het kan ook niet weten welke updates moeten worden toegepast. Updates vereisen ook vaak meer dan alleen het wijzigen van het schema; ze kunnen wijzigingen vereisen in gegevens die al bestaan, of gegevens moeten mogelijk worden verplaatst van het oude schema naar het nieuwe. Je krijgt nooit iets dat dat allemaal automatisch detecteert.

De juiste oplossing is om migraties te schrijven. Elke keer dat u de database wijzigt, in plaats van alleen het schema van uw ontwikkelkopie zelf te wijzigen, schrijft u een script om het vorige schema bij te werken naar het nieuwe (en meestal een script om terug te downgraden naar het vorige schema, zodat u dat als u een update moet terugdraaien). Dat script doet alles wat je nodig hebt om het schema te wijzigen, gegevens te verplaatsen en dergelijke.

De meeste moderne webframeworks, zoals Ruby on Rails , hebben ondersteuning voor migraties om het gemakkelijker te maken om bij te houden welke migraties u al heeft uitgevoerd. Als u geen raamwerk gebruikt dat migraties ondersteunt, zou het niet al te moeilijk zijn om uw eigen scripts te schrijven voor het toepassen van migraties. Nummer elke migratie of zet er een datum in en houd een tabel in uw database waarin alleen de huidige versie van het schema waarin u zich bevindt, wordt opgeslagen. Als u uw migratiescript uitvoert en er zijn nieuwere migraties dan die huidige versie, pas die scripts dan op volgorde toe en werk vervolgens het nummer in de database bij dat aangeeft welke versie u gebruikt.




  1. Verticale randen toevoegen aan uw SQL*Plus / SQLcl-uitvoerraster

  2. Mysql-kolom converteren van INT naar TIMESTAMP

  3. Foutwaarde bestaat niet - probleem postgresql INSERT INTO

  4. SQL-query om de primaire sleutel van een tabel te vinden?