====== 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.