sql >> Database teknologi >  >> RDS >> Mysql

Kun mysqldump-skema, skemaopdatering uden drop

Hvordan ville MySQL vide, hvad der skal opdateres? Den kan ikke vide, hvilken tilstand en andens database vil være i, så den kan ikke vide, hvilke opdateringer den skal anvende. Desuden kræver opdateringer ofte mere end blot at ændre skemaet; de kan kræve ændringer af data, der allerede eksisterer, eller måske skal data flyttes fra det gamle skema til det nye. Du vil aldrig få noget, der automatisk registrerer alt dette.

Den rigtige løsning er at skrive migrationer. Hver gang du ændrer databasen, i stedet for blot at ændre skemaet for din udviklingskopi selv, skriver du et script for at opdatere fra det forrige skema til det nye (og normalt et script til at nedgradere tilbage til det tidligere skema, så du kan gøre det at hvis du skal rulle en opdatering tilbage). Det script gør alt hvad du behøver for at ændre skemaet, flytte data rundt og lignende.

De fleste moderne web-frameworks, såsom Ruby on Rails , har understøttelse af migreringer for at gøre det nemmere at holde styr på, hvilke migreringer du allerede har kørt. Hvis du ikke bruger en ramme, der understøtter migreringer, ville det ikke være for hårdt at skrive dine egne scripts til at anvende migreringer. Du skal blot nummerere hver migrering, eller indsætte en dato i den, og beholde en tabel i din database, der kun gemmer den aktuelle version af det skema, du er på. Når du kører dit migreringsscript, hvis der er migreringer, der er nyere end den aktuelle version, skal du anvende disse scripts i rækkefølge og derefter opdatere nummeret i databasen, der siger, hvilken version du er på.




  1. Understøtter MySQL tabelarv?

  2. MySQL returnerer første række i en sammenføjet tabel

  3. Sådan læser du MySQL binære logfiler (BinLog) med mysqlbinlog

  4. SQL Where-klausul med flere værdier