====== SQL-Dateien ausführen ======= In dieser kurzen Lektion werden wir uns ein SQL-Skript schreiben und den mysql-Client auffordern, dieses auszuführen. ===== Das SQL-Skript ===== 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. ===== Kommentare ===== Skripte können auch Kommentare Enthalten. Hierzu gibt es drei Möglichkeiten. ==== Einzeilige Kommentare ==== 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 und Einschübe ==== 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 ) ===== Eine SQL-Datei ausführen ===== 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 . 23.03.2013 11:22 .. 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) ===== MySQL-Skripte aus Skripten starten ===== 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. ===== MySQL "Hello World" ===== 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. ======= Ziel der Lektion ====== 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 [[insert|nächsten Lektion]] werden wir beginnen Daten in die Datenbank zu spielen und wieder abzufragen.