Seitenleiste

Community

SQL

Grundlagen

Datenbanksysteme

Client/Server

Eingebettet

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    <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)

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 nächsten Lektion werden wir beginnen Daten in die Datenbank zu spielen und wieder abzufragen.