Återställ databasen (del 2)
Vi skall återställa databasen till det läget som gäller efter denna delen av guiden.
Spara din kod i filen reset_part2.bash
.
Vi vill återställa databasen genom att köra ett kommando, så här.
$ bash reset_part2.bash
#Vilka filer behövs köras?
Vi utgår från filen som återskapar databasen efter första delen av guiden, reset_part1.bash
. Jag tar en kopia av den och modifierar så att den fungerar för både del 1 del och del 2 av guiden.
Det gäller nu att hålla ordning på vilka filer som jag gjort DDL i under denna delen.
Här är filerna som behövs, och ordningen de körs i. Ordningen är viktig. Man behöver ha koll på sin datamängd och vad som gör vad.
Fil | Vad gör den? |
---|---|
setup.sql |
Kör som root för att skapa om databasen och skapa användaren user:pass. |
ddl.sql |
Skapa tabellen för lärare. |
dml_insert.sql |
Lägg till rader i tabellen lärare. |
ddl_migrate.sql |
Alter table lärare och lägg till kompetensen. |
dml_update.sql |
Förbered lönerevisionen, alla lärare har grundlön. |
ddl_copy.sql |
Kopiera till larare_pre innan lönerevisionen. |
dml_update_lonerevision.sql |
Utför lönerevisionen. |
dml_view.sql |
Skapa vyerna v_namn_alder och v_larare. |
dml_join.sql |
Skapa vyn v_lonerevision. |
Därefter kan vi testa datamängden, till exempel genom att dubbelkolla lönesumman och kompetensen i tabellerna larare och larare_pre.
När du har modifierat ditt skript så kan du testköra det.
När vi ändå håller på så kan vi träna lite på att skriva mer bash-skript.
#Komplett skript för att återställa databasen del 2
Jag valde att göra skriptet lite annorlunda, med en funktion som tar argumenten och sedan utför kommandot mot databasen.
Du kan hålla fast i ditt gamla skript, eller så prövar du min nya konstruktion som kan vara mer lämpad när det blir allt fler filer att ha koll på.
Följande bash-skript innehåller allt som återställer databasen till och med del 2 i guiden.
#!/usr/bin/env bash # shellcheck disable=SC2181 # # Load a SQL file into skolan # function loadSqlIntoSkolan { echo ">>> $4 ($3)" mysql "-u$1" "-p$2" skolan < "$3" > /dev/null if [ $? -ne 0 ]; then echo "The command failed, you may have issues with your SQL code." echo "Verify that all SQL commands can be exeucted in sequence in the file:" echo " '$3'" exit 1 fi } # # Recreate and reset the database to be as after part II. # echo ">>> Reset skolan to after part 2" loadSqlIntoSkolan "root" "" "setup.sql" "Initiera database och användare" loadSqlIntoSkolan "user" "pass" "ddl.sql" "Create tables" loadSqlIntoSkolan "user" "pass" "dml_insert.sql" "Insert into larare" loadSqlIntoSkolan "user" "pass" "ddl_migrate.sql" "Alter table larare" loadSqlIntoSkolan "user" "pass" "dml_update.sql" "Grundlön larare" loadSqlIntoSkolan "user" "pass" "ddl_copy.sql" "Kopiera till larare_pre" loadSqlIntoSkolan "user" "pass" "dml_update_lonerevision.sql" "Utför lönerevision" loadSqlIntoSkolan "user" "pass" "dml_view.sql" "Skapa vyer för larare" loadSqlIntoSkolan "user" "pass" "dml_join.sql" "Skapa vy för lönerevisionen" echo ">>> Check larare_pre: Lönesumman = 305000, Kompetens = 8." mysql -uuser -ppass skolan -e "SELECT SUM(lon) AS 'Lönesumma', SUM(kompetens) AS Kompetens FROM larare_pre;" echo ">>> Check larare: Lönesumman = 330242, Kompetens = 19." mysql -uuser -ppass skolan -e "SELECT SUM(lon) AS 'Lönesumma', SUM(kompetens) AS Kompetens FROM larare;"
När jag kör mitt program får jag följande utskrift, du bör få motsvarande.
$ bash reset_part2.bash >>> Reset skolan to after part 2 >>> Initiera database och användare (setup.sql) Enter password: >>> Create tables (ddl.sql) >>> Insert into larare (dml_insert.sql) >>> Alter table larare (ddl_migrate.sql) >>> Grundlön larare (dml_update.sql) >>> Kopiera till larare_pre (ddl_copy.sql) >>> Utför lönerevision (dml_update_lonerevision.sql) >>> Skapa vyer för larare (dml_view.sql) >>> Skapa vy för lönerevisionen (dml_join.sql) >>> Check larare_pre: Lönesumman = 305000, Kompetens = 8. +------------+-----------+ | Lönesumma | Kompetens | +------------+-----------+ | 305000 | 8 | +------------+-----------+ >>> Check larare: Lönesumman = 330242, Kompetens = 19. +------------+-----------+ | Lönesumma | Kompetens | +------------+-----------+ | 330242 | 19 | +------------+-----------+
Du får gärna modifiera och vidarutveckla ditt bash-skript. Men det räcker om det fungerar som jag visar ovan och återställer databasen så här långt i guiden.
Om du får varningen så kan du se hur du löste det tidigare.
“Warning: Using a password on the command line interface can be insecure.”
#Revision history
- 2019-02-12: (E, mos) Felstavad ddl_copy.sql.
- 2019-01-29: (D, mos) Rättade valideringsfel i reset_part2.bash.
- 2019-01-15: (C, mos) Genomgången och uppdaterad med felutskrifter och saknad v_lon.
- 2018-03-27: (B, mos) Add function to bash reset.
- 2018-02-09: (A, mos) Tillagd för att fokusera på hur man återställer databasen efter andra delen.