In dieser kurzen Lektion werden wir uns ein SQL-Skript schreiben und den mysql-Client auffordern, dieses auszuführen.
Ich möchte Dich jetzt bitten, Dir ein „sql“-Verzeichnis anzulegen und diesen Text
/* Staff Skript proggen.org SQL-Tutorial */ # Datenbank leeren DROP DATABASE IF EXISTS proggenorg; CREATE DATABASE proggenorg; USE proggenorg; # Tabellen erstellen CREATE TABLE Staff ( Department SMALLINT UNSIGNED, Salary DECIMAL(7,2) NOT NULL, FamilyName CHAR(100), GivenName CHAR(100), Sex CHAR(1), DateOfJoining DATE )
dort in eine Datei 'createstaff.sql' zu speichern.
Ab hier ist SQL nun auch nicht mehr eine Aneinanderreihung von einzelnen Befehlen in einer Konsole, sondern wir haben ein echtes SQL-Skript. Mit solchen Skripten werden wir in Zukunft auch arbeiten.
Skripte können auch Kommentare Enthalten. Hierzu gibt es drei Möglichkeiten.
Es gibt zwei Möglichkeiten Kommentare bis zum Zeilenende zu kennzeichnen:
# Kommentar bis Zeilenende
-- Kommentar bis Zeilenende
Vor den Kommentaren können dabei auch SQL-Befehle stehen:
USE proggenorg; # Übungsdatenbank benutzen
Mehrzeilige Kommentare werden wie in C gewohnt mit /* begonnen und mit */ abgeschlossen.
/* Staff Skript
proggen.org SQL-Tutorial
*/
und wie in C gewohnt lassen sich solche Kommentare auch zwischen Anweisungen positionieren.
CREATE TABLE Staff ( Department SMALLINT UNSIGNED, Salary DECIMAL(7,2) NOT NULL, FamilyName CHAR(100), GivenName CHAR(100), Sex /* um die Frauenquote im Vorstand auszurechnen */ CHAR(1), DateOfJoining DATE )
Nun möchte ich, dass Du mit der Konsole in das entsprechende Verzeichnis wechselst (ggfs. vorher den mysql-client mit exit
verlassen) und dort den Client wieder mit root-Rechten startest. Anschließend rufen wir mit dem Befehl SOURCE
die Datei auf:
C:\Users\Xin\Desktop\proggen.org\sql>dir Volume in Laufwerk C: hat keine Bezeichnung. Volumeseriennummer: B22D-CD02 Verzeichnis von C:\Users\Xin\Desktop\proggen.org\sql 23.03.2013 11:22 <DIR> . 23.03.2013 11:22 <DIR> .. 23.03.2013 11:22 325 createstaff.sql 1 Datei(en), 325 Bytes 2 Verzeichnis(se), 22.970.908.672 Bytes frei C:\Users\Xin\Desktop\proggen.org\sql>mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.10 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> source createstaff.sql Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Database changed Query OK, 0 rows affected (0.01 sec) mysql> show tables; +----------------------+ | Tables_in_proggenorg | +----------------------+ | staff | +----------------------+ 1 row in set (0.00 sec)
Fertig.
Wem der Source
-Befehl zu lang ist, der kann auch einfach \.
schreiben:
mysql> \. createstaff.sql Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Database changed Query OK, 0 rows affected (0.01 sec)
Man kann MySQL-Skripte auch über die Standardeingabe dem Client zuführen. So lassen sich SQL-Skripte auch über die Konsole an den Client leiten:
mysql -u root -p < createstaff.sql
Leider haben wir hier die Rückfrage nach dem Passwort. Hätten der Account ein Passwort, zum Beispiel 'abcde' so könnte man es mit
mysql -u root -passwort=abcde < createstaff.sql
übergeben und die Frage würde ausbleiben.
Wie so oft ist es üblich, in einer neuen Programmiersprache ein „Hello World“-Skript zu schreiben: Hier das Hello World in SQL:
SELECT "Hello World" AS "";
Führen wir das über die Konsole aus, erhalten wir:
C:\Users\Xin\Desktop\proggen.org\sql>mysql -u root -p < hworld.sql Enter password: Hello World
Die Leerzeile lässt sich so leider nicht vermeiden, aber wir wollen ja nicht kleinlich sein: SQL ist schließlich keine Sprache, die mit uns reden soll, sondern mit dem Datenbank-Server. Trotzdem kann diese Zeile hilfreich sein, wenn man bei langen Skripten wissen möchte, womit der Client gerade beschäftigt ist.
Du solltest nun in der Lage sein, Skripte aus Dateien im Client auszuführen und von der Konsole aus zu starten, ohne den Client selbst bedienen zu müssen. Das werden wir in den kommenden Übungen häufiger brauchen, in dem wir die Vorbereitungen im Editor beschreiben und anschließend ein weitere Skript nutzen, um Daten zu erfragen.
In der nächsten Lektion werden wir beginnen Daten in die Datenbank zu spielen und wieder abzufragen.