- RobertKrah.de

Werbung
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
MYSQL ist ein leistungsfähiges, relationales Client-Server-Datenbanksystem. Es wird vor
allem für Internet-Datenbanken viel verwendet und bietet für den Anwender eine Reihe von
Vorteilen, z. B. die, dass es im Rahmen der nicht-kommerziellen Verwendung frei verfügbar
ist (GPL=GNU Public License im Sinne der Open Source-Idee wie bei Linux). GPL-Software
ist frei verfügbar, aber daraus entwickelte Programme müssen ebenfalls wieder der Öffentlichkeit frei zugänglich gemacht werden. Für kommerzielle Anwendungen ist das ein wenig
komplizierter (vgl. dazu. http://www.gnu.org/copyleft/gpl.html).
Die Befehlseingabe am MYSQL-Prompt (Bereitschaftszeichen) ist „SQL pur“ und lässt sich
deshalb besonders gut zum Üben von SQL-Befehlen verwenden1. Sie gelangen zum
MYSQL-Prompt, indem Sie entweder
a) Im Windows-Explorer im Ordner C:\Apache\MYSQL\Bin die Datei mysql.exe per Doppelklick aktivieren, oder
b) Sie wählen über Start, Programme, MSDOS-Eingabeaufforderung mit Dos-Befehlen zum
gewünschten Ordner:
C:\WINDOWS>cd\apache\mysql\bin
MS-DOS zeigt durch den Wechsel des Bereitschaftszeichens an, dass man sich im gewünschten Ordner befindet. Tippen Sie dann mysql ein!
C:\apache\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.32-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql>
Das ist das MYSQL-Promptzeichen:
Drücken Sie
Alt Return,
um von der Fensterdarstellung zu
Vollbild zu wechseln!
MySQL verlassen Sie mit dem Befehl:
mysql> exit;
MYSQL verabschiedet sich
Bye
1 SQL-Befehle: Datenbanken und Tabellen anlegen
Am Mysql-Prompt werden Befehle eingegeben. Sie können (müssen aber nicht) die ReturnTaste drücken, um die Eingabe auf mehrere Zeilen zu verteilen. Der Befehl wird mit einem ;
(Semikolon) abgeschlossen – zwar funktionieren einige Befehle auch ohne Semikolon, aber
besser ist es, sich generell daran zu gewöhnen.
1.1 Datenbank anlegen:
Datenbanken werden mit dem Befehl CREATE DATABASE Datenbankname angelegt.
Aufgabe: Legen Sie die Datenbank mit dem Namen UEBUNG an!
1
Bei der Beispieltabelle Sammlung und den beschriebenen Übungen orientiere ich mich zum Teil an:
SQL in 21 Tagen, ISBN: 3-8272-2020-3
-1-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Geben Sie anschließend am Prompt-Zeichen den Befehl
mysql> show databases;
Sie sehen zum Beispiel folgendes Ergebnis:
+-----------+
| Database |
+-----------+
| uebung
|
| mysql
|
MYSQL zeigt an, welche Datenbanken existieren
| test
|
| waren
|
+-----------+
6 rows in set (0.05 sec)
1.2 Datenbank wechseln
Mit dem Befehl use Datenbankname wird die aktuelle Datenbank gewechselt.
Aufgabe: Geben Sie ein:
mysql>use mysql;
Database changed
Aufgabe: Lassen Sie die Tabellen anzeigen:
mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
In MYSQL gibt es eine Systemdatenbank mit dem
| columns_priv
|
Namen mysql. Sie enthält alle Einstellungen ein| db
|
schließlich der Zugriffsrechte.
| host
|
| tables_priv
|
| user
|
+-----------------+
5 rows in set (0.00 sec)
Aufgabe: Wechseln Sie wieder zur Datenbank UEBUNG.
1.3 Tabelle erstellen (create table)
In der Datenbank UEBUNG soll jetzt die erste Tabelle angelegt werden. Der Name der Tabelle soll Sammlung sein. (Beispiel aus: SQL in 21 Tagen, Kap. 8)
mysql> create table sammlung(
-> stueck varchar(30) NOT NULL,
-> wert double,
-> text varchar(50)
-> );
Query OK, 0 rows affected (0.06 sec)
Diese Tabelle wird eingerichtet:
Aufgabe: Geben Sie jetzt den Befehl:
mysql> show tables;
+----------------+
| Tables_in_it05 |
+----------------+
| sammlung
|
+----------------+
1 row in set (0.05 sec)
MYSQL zeigt an, dass die Tabelle existiert
2 Daten eingeben, ändern und löschen
Daten über SQL-Befehle einzugeben ist zugegebenermaßen etwas mühselig. Niemand wird
in der Praxis Tausende Datensätze über den Befehl insert into einfügen. Dennoch ist im
sinnvoll für das verständnis von SQL, wenn man diese Befehlseingabe beherrscht. Sie werden später Möglichkeiten kennenlernen, auch im Rahmen von MYSQL mit sogenannten
-2-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Frontends zu arbeiten, also Benutzeroberflächen, die „an vordester Front“ stehen. Es ist
zum Beispiel auch möglich, Access als Eingabehilfe für MYSQL zu nutzen, indem ein ODBCTreiber eingerichtet wird.
2.1 Daten eingeben (insert into)
Jetzt sollen Daten in die Tabelle eingegeben werden. Dies geschieht mit dem Befehl
insert into. Die Syntax der Anweisung lautet:
INSERT INTO Tabellenname
(Spalte1, Spalte2...)
VALUES (Wert1, Wert2...)
Aufgabe: Geben Sie ein:
mysql> insert into sammlung(
-> stueck,wert,text)
-> values(
-> 'Wegweiser',300,'fehlt jetzt in Koeln'
-> );
Query OK, 1 row affected (0.06 sec)
Aufgabe: Lassen Sie jetzt die Tabelle anzeigen:
mysql> select * from sammlung;
+-----------+------+----------------------+
| stueck
| wert | text
|
+-----------+------+----------------------+
| Wegweiser | 300 | fehlt jetzt in Koeln |
+-----------+------+----------------------+
Man kann mit dem insert-Befehl auch Daten einfügen, ohne die Spalten dabei anzugeben.
Dabei werden die Daten in der Reihenfolge, wie man sie schreibt, in die Spalten eingefügt:
Aufgabe: Nehmen Sie den Datensatz auf:
mysql> insert into sammlung
-> values ('Kronleuchter',2000.00,'antikes Stück');
Query OK, 1 row affected (0.11 sec)
Aufgabe: Schauen Sie nach, ob das Ergebnis stimmt:
mysql> select * from sammlung;
+--------------+------+----------------------+
| stueck
| wert | text
|
+--------------+------+----------------------+
| Kronleuchter | 2000 | antikes Stück
|
| Wegweiser
| 300 | fehlt jetzt in Koeln |
+--------------+------+----------------------+
2 rows in set (0.05 sec)
Aufgabe: Nehmen Sie zwei weitere Datensätze auf. Die Syntax ist wie vorher beschrieben.
Das Ergebnis soll hinterher sein:
mysql> select * from sammlung;
+--------------+------+----------------------+
| stueck
| wert | text
|
+--------------+------+----------------------+
| Kronleuchter | 2000 | antikes Stück
|
| Wegweiser
| 300 | fehlt jetzt in Koeln |
| Kette
| 200 | Erbstueck
|
| Barbie
| 250 | Geschenk von Susi
|
+--------------+------+----------------------+
4 rows in set (0.00 sec)
-3-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
2.1.1 Einzelne Felder eingeben
Es ist auch möglich, einzelne Werte in einzelne Felder einzugeben, z. B. dann, wenn noch
nicht alle Informationen vorliegen. Angenommen, in die Tabelle Sammlung soll ein Armband
aufgenommen werden, es wird also zunächst nur die Spalte stueck mit Inhalt gefüllt:
mysql> insert into sammlung
-> (stueck)
-> values('Armband');
Query OK, 1 row affected (0.17 sec)
MYSQL zeigt dann an:
mysql> select * from sammlung;
+--------------+------+----------------------+
| stueck
| wert | text
|
+--------------+------+----------------------+
| Kronleuchter | 2000 | antikes Stück
|
....
| Armband
| NULL | NULL
|
+--------------+------+----------------------+
Aufgabe: Fügen Sie noch einen Datensatz an. Der Eintrag in die Spalte stueck soll nur
‚Uhr’ betragen’.
Wenn später die anderen Felder eingegeben werden, dann muss mit dem update-Befehl und
einer Where-Klausel gearbeitet werden, denn der Datenbank muss ja mitgeteilt werden, um
welchen Datensatz es sich bei der Eingabe handelt.
2.2 Werte in Feldern ändern (update)
Um Änderungen an den Daten vorzunehmen, brauchen Sie den Befehl update. Die Syntax
lautet:
UPDATE Tabellenname
SET Spaltenname1 = Wert1
[, Spaltenname2 = Wert2]...
WHERE Suchbedingung
Beispiel:
In der Tabelle Sammlung wird der
Wert der Kette auf 900 erhöht
UPDATE SAMMLUNG
SET WERT = 900
WHERE STUECK = 'KETTE';
Aufgabe: Führen Sie diese Änderung durch!
Vorsicht: ohne where-Klausel werden alle Werte ersetzt:
UPDATE SAMMLUNG
SET WERT = 555;
alle Spalten hätten dann den Wert 555
Aufgabe: 1) Ändern Sie den Wert der Barbie auf 350
2) Ändern Sie den Text (drittes Feld) im Datensatz, der die Kette beschreibt, auf:
Kauf in Lissabonn
3) Ändern Sie die Bezeichnung im Feld Stueck von Wegweiser auf
Verkehrszeichen
Aufgabe: Lassen Sie die Daten wieder anzeigen.
mysql> select * from sammlung;
+----------------+------+----------------------+
| stueck
| wert | text
|
+----------------+------+----------------------+
| Kronleuchter
| 2000 | antikes Stück
|
| Verkehrszeichen| 300 | fehlt jetzt in Koeln |
| Kette
| 900 | Kauf in Lissabonn
|
| Barbie
| 350 | Geschenk von Susi
|
-4-
b. w.!
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
| Armband
|
| NULL
|
| Uhr
|
| NULL
|
+--------------+------+----------------------+
5 rows in set (0.00 sec)
NULL steht bekanntlich nicht für den Zahlenwert 0, sondern für „Nicht vorhanden“. Wenn die
Eintragung NULL als störend empfunden wird, dann kann man die Felder stattdessen mit
einem Leerzeichen füllen.
Jetzt sollen auch die fehlenden Einträge beim Armband und der Kette ersetzt werden.
Aufgabe: Setzen Sie mit dem folgenden Befehl den Wert des Armbands auf 1000 fest.
mysql> update sammlung
-> set wert=1000
-> where stueck='Armband';
Query OK, 1 row affected (0.00 sec)
Aufgabe: Beim Datensatz ‚Armband’ soll der text als ‚Gold mit Halbedelsteinen’ eingetragen werden.
2.2.1 Mehrere Felder mit einem SQL-Befehl eintragen:
Im Datensatz, der Informationen zur Uhr aufnehmen sollte, sind noch Felder unausgefüllt.
Diese sollen mit dem folgenden Befehl gefüllt werden:
mysql> update sammlung
-> set wert=600,text='geerbt von Onkel Heinz'
-> where stueck='Uhr';
Query OK, 1 row affected (0.00 sec)
Die zweite Zeile -> set wert=600,text='geerbt von Onkel Heinz' zeigt, wie die Felder
nacheinander, getrennt durch Kommas, gefüllt werden können.
2.3 Daten in andere Tabellen schreiben
Die Syntax, um alle Daten von einer Originaltabelle z. B. in eine Sicherungstabelle zu schreben, lautet:
insert into sicherungstabelle
select * from originaltabelle;
Wenn also alle Felder der Tabelle Sammlung in die Tabelle Sicherung geschrieben werden
sollen, lautet der Befehl also:
insert into sicherung
select * from sammlung;
Dazu muss allerdings die Tabelle Sicherung erst angelegt worden sein. Sie soll dieselben
Felder mit denselben Datentypen wie die Originaltabelle bekommen.
Aufgabe: Legen Sie zunächst die Tabelle Sicherung an:
mysql> create table sicherung(
-> stueck varchar(30) not null,
-> wert double,
-> text varchar(50)
-> );
Query OK, 0 rows affected (0.06 sec)
Aufgabe: Lassen Sie jetzt die Daten in die Tabelle schreiben:
mysql> insert into sicherung
-> select * from sammlung;
Query OK, 6 row affected (0.06 sec)
-5-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Aufgabe: Sehen Sie jetzt nach, ob sich die Daten in der Tabelle Sicherung befinden:
mysql> select * from sicherung;
+--------------+------+--------------------------+
| stueck
| wert | text
|
+--------------+------+--------------------------+
| Kronleuchter | 2000 | antikes Stück
|
| Wegweiser
| 300 | fehlt jetzt in Koeln
|
| Kette
| 900 | Kauf in Lissabonn
|
| Barbie
| 350 | Geschenk von Susi
|
| Armband
| 1000 | Gold mit Halbedelsteinen |
| Uhr
| 600 | geerbt von Onkel Heinz
|
+--------------+------+--------------------------+
2.4 Löschen von Datensätzen
Die Syntax des Befehls, mit dem Sie Datensätze aus einer Tabelle löschen können, lautet:
DELETE FROM Tabellenname
WHERE Bedingung
Aufgabe: Löschen Sie mit dem folgenden Befehl den Kronleuchter aus der Tabelle
Sammlung:
delete from sammlung
where stueck=’Kronleuchter’;
Aufgabe: Löschen Sie außerdem alle Daten, deren Wert unter 500 liegt:
delete from uebung
where wert<500;
Jetzt ist das Ergebnis:
mysql> select * from sammlung;
+--------------+------+--------------------------+
| stueck
| wert | text
|
+--------------+------+--------------------------+
| Kette
| 900 | Kauf in Lissabonn
|
| Armband
| 1000 | Gold mit Halbedelsteinen |
| Uhr
| 600 | geerbt von Onkel Heinz
|
+--------------+------+--------------------------+
Damit die Daten wieder vorliegen, sollen sie nun aus der Sicherungstabelle zurückgeschrieben werden. Dabei würden allerdings Duplikate angelegt, also die zwei Datensätze, die noch
vorhanden sind, wären anschließend doppelt vorhanden. Der Einfachheit halber löschen wir
die beiden Datensätze und schreiben dann die Sicherungstabelle zurück.
Aufgabe: Geben Sie zunächst ein:
mysql> delete from sammlung;
Query OK, 0 rows affected (0.05 sec)
Sie sehen, dass ohne Angabe von where-Kriterien alles gelöscht wird.
Aufgabe: Testen Sie:
mysql> select * from sammlung;
Empty set (0.00 sec)
Aufgabe: Geben Sie zum „Zurückschreiben“ den Befehl ein:
mysql> insert into sammlung
-l> select * from sicherung;
Aufgabe: Sehen Sie dann mit dem select-Befehl nach, ob alle Daten in der Tabelle Sammlung und in der Tabelle Sicherung wieder da sind (5 Datensätze)
-6-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
2.5 Löschen von Datenbanken und Tabellen
Mit dem Befehl
drop database <name>
löschen Sie eine komplette Datenbank.
Aufgabe: Erzeugen Sie eine Datenbank mit dem Namen IT_Test.
create database IT_Test
Schauen Sie jetzt nach, ob die
Datenbank existiert:
show databases;
+-----------+
| Database |
+-----------+
| IT_Test
|
| uebung
|
| mysql
|
| test
|
| waren
|
+--------------------+
Aufgabe: Löschen Sie die Datenbank wieder:
drop database IT_Test;
Wenn Sie anschließend wieder
nachsehen, ist die Datenbank gelöscht:
show databases
+-----------+
| Database |
+-----------+
| uebung
|
| mysql
|
| test
|
| waren
|
+-----------+
Generell ist hier zu beachten, dass manche Datenbanksysteme kein Löschen einer kompletten Datenbank zulassen. Z. B. kann man in Access keine Datenbank löschen, man löscht
einfach die Datei auf der Windows-Ebene.
Wenn mysql bei einem Provider eingesetzt wird, um eine Internet-Datenbank aufzubauen
und zu pflegen, dann ist es in der Regel nicht möglich, mehrere Datenbanken zu erstellen,
sondern man bekommt genau eine Datenbank, deren Name oft aus dem Nutzernamen abgeleitet wird. Beispielsweise bei Lycos-Tripod (kostenlose MySQL-Datenbank, wenn der Benutzername rokr lautet, dann heißt automatisch die Datenbank rokr_de_db. Diese Datenbank kann nicht gelöscht werden. Innerhalb der Datenbank können Tabellen erstellt und gelöscht werden.
2.5.1 Löschen von Tabellen
Eine Tabelle innerhalb der Datenbank kann gelöscht werden, wenn man sich in der Datenbank befindet, wenn also vorher mit use <Datenbank> die Datenbank ausgewählt wurde.
Der Befehl ist ähnlich wie der zum Löschen einer Datenbank
drop table <Name>;
löscht die Datenbanktabelle.
Die Tabelle Sicherung ist gewissermaßen doppelt vorhanden, kann also gelöscht und wieder neu erstellt werden.
Aufgabe: Geben Sie ein
drop table sicherung;
und anschließend:
show tables;
um zu sehen, dass die Tabelle nicht mehr existiert.
-7-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Bevor jetzt die Daten wieder in die Sicherungstabelle geschrieben werden, muss sie erst
wieder mit create table erstellt werden:
mysql> create table sicherung(
-> stueck varchar(30) not null,
-> wert double,
-> text varchar(50)
-> );
Query OK, 0 rows affected (0.06 sec)
Aufgabe: Lassen Sie jetzt wieder die Daten in die Tabelle schreiben:
mysql> insert into sicherung
-> select * from sammlung;
Query OK, 1 row affected (0.06 sec)
2.6 Tabellen ändern: alter table
Mit dem Befehl alter table ist es möglich, die Struktur einer Tabelle im Nachhinein zu
ändern. Die Syntax des Befehls lautet:
ALTER TABLE Tabellenname
<ADD Spaltenname Datentyp; |
MODIFY Spaltenname Datentyp;>
Man kann mit diesem Befehl also Spalten zu einer Tabelle hinzufügen oder verändern.
Aufgabe: Zur Tabelle Sammlung soll eine Spalte Kaufdatum (Typ: Date) hinzugefügt werden:
mysql> alter table sammlung
-> add Kaufdatum date;
Query OK, 5 rows affected (0.11 sec)
Es ist klar, dass die Felder zunächst natürlich noch leer sind:
mysql> select * from sammlung;
+--------------+------+--------------------------+-----------+
| stueck
| wert | text
| Kaufdatum |
+--------------+------+--------------------------+-----------+
| Kronleuchter | 2000 | antikes Stück
| NULL
|
| Kette
| 200 | Erbstueck
| NULL
|
|......
...
...
...
|
+--------------+------+--------------------------+-----------+
5 rows in set (0.05 sec)
Aufgabe: Der Datensatz, in dem die Informationen über die Kette gespeichert sind, soll
jetzt mit einem Datum, und zwar dem 12. Januar 2003,gefüllt werden. Das Datum muss in der Form Jahr-Monat-Tag eingegeben werden.
mysql> update sammlung
-> set kaufdatum='2003-01-12'
-> where stueck='Kette';
Query OK, 1 row affected (0.00 sec)
Schauen Sie nach:
mysql> select * from sammlung;
+--------------+------+--------------------------+----+------------+
| stueck
| wert | text
| ID | Kaufdatum |
+--------------+------+--------------------------+----+------------+
| Kronleuchter | 2000 | antikes Stück
| 1 | NULL
|
| Kette
| 200 | Erbstueck
| 2 | 2003-01-12 |
| Barbie
| 250 | Geschenk von Susi
| 3 | NULL
|
| Armband
| 1000 | Gold mit Halbedelsteinen | 4 | NULL
|
| Uhr
| 600 | geerbt von Onkel Heinz
| 5 | NULL
|
+--------------+------+--------------------------+----+------------+
-8-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Aufgabe: Setzen Sie jetzt noch folgende Datumsangaben ein:
Kronleuchter
20.03.2002
Armband
30.12.1998
Bisher ist zu der Tabelle Sammlung noch kein ID-Feld vorhanden. Mit dem folgenden Befehl
soll eine Spalte namens ID erstellt werden, Typ: Smallint, das Feld soll ein Autowert-Feld
sein (=Auto-Increment). Diese Auto-Increment-Spalten müssen außerdem indiziert sein.
Aufgabe: Nehmen Sie diese Änderung vor:
mysql> alter table sammlung
add ID smallint NOT NULL Auto_Increment,
-> add index (ID);
Query OK, 5 rows affected (0.11 sec)
Sie sehen jetzt in der Tabelle:
mysql> select * from sammlung;
+--------------+------+--------------------------+------------+----+
| stueck
| wert | text
| Kaufdatum | ID |
+--------------+------+--------------------------+------------+----+
| Kronleuchter | 2000 | antikes Stück
| 0000-00-00 | 1 |
| Kette
| 200 | Erbstueck
| 2003-01-12 | 2 |
| Barbie
| 250 | Geschenk von Susi
| NULL
| 3 |
| Armband
| 1000 | Gold mit Halbedelsteinen | 0000-00-00 | 4 |
| Uhr
| 600 | geerbt von Onkel Heinz
| NULL
| 5 |
+--------------+------+--------------------------+------------+----+
5 rows in set (0.11 sec)
Anschließend fällt auf, dass wir das neue ID-Feld nicht als Primärschlüssel gesetzt haben.
Dies wird auch wieder mit alter table gemacht. Geben Sie dazu den Befehl ein:
mysql> alter table sammlung
-> add primary key (ID);
Query OK, 5 rows affected (0.00 sec)
2.7 Umbenennen
Mit dem Befehl alter table ist es möglich, den Namen von Tabellen zu ändern. Der folgende Befehl benennt die Tabelle Sammlung in Sachen um:
mysql> alter table sammlung rename Sachen;
Query OK, 0 rows affected (0.06 sec)
Anschließend sehen Sie:
mysql> show tables;
+----------------+
| Tables_in_it05 |
+----------------+
| sachen
|
| sicherung
|
+----------------+
2 rows in set (0.05 sec)
Sie können mit alter table aber auch Spalten umbenennen. Der folgende Befehl benennt die Spalte stueck in bezeichnung um. Zu beachten ist, dass man dabei den Datentyp angeben muss, denn er könnte auch geändert werden.
mysql> alter table sachen change stueck bezeichnung varchar(30);
Genauso könnte man die Feldlänge des Feldes von 30 auf 40 ändern:
mysql> alter table sachen change bezeichnung bezeichnung varchar(40);
Aufgabe: Nehmen Sie diese Änderungen vor!
-9-
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Lösung zum Einsetzen des Datums:
mysql> update sachen
-> set kaufdatum=2002-03-30
-> where bezeichnung='Kronleuchter';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> update sachen
-> set kaufdatum=1998-12-30
-> where bezeichnung='Armband';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 1
Aufgabe: Erzeugen Sie an der MySQL-Eingabeaufforderung eine Datenbank namens
PC_Artikel. In der Datenbank sollen dann drei Tabellen mit den abgebildeten
Datensätzen angelegt werden. Der Primärschlüssel wird jeweils auf das links
stehende Feld gesetzt. Überlegen Sie, welche Datentypen sinnvoll sind!
Tabelle: Produkte
Produkt Nr
1
2
3
Bezeichnung
Monitor 19 Zoll
Maus mit Scrollrad
Mauspad
Gewicht
12,3
0,07
0,01
Menge
30
100
500
Tabelle: Verkaeufer
VNR
10
20
30
3 Name
Kasub
Moltke
Trieneken
Vorname
Jaromir
Annegret
Hans
Tabelle: Verkauf
VK Nr
1
2
3
4
5
VNR
10
10
20
20
30
Produkt Nr
2
3
2
3
1
Datum
16.06.2003
17.06.2003
16.06.2003
18.06.2003
18.06.2003
Fragen Sie folgende Daten ab:
1. Wieviele Artikel (Datensätze) sind gespeichert?
2. Wie heißt der Verkäufer mit der VK_Nr 30?
3. Wer verkaufte etwas am 18.06.2003?
4. Wieviel wiegen alle vorrätigen Monitore?
5. Wie ist die Bezeichnung des/der Artikel, die von der Verkäuferin Annegret Moltke
verkauft wurden?
- 10 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Jetzt sollen einige Änderungen an der Tabellenstruktur vorgenommen werden:
a) in der Tabelle Verkaeufer wird das Feld Gehalt hinzugefügt. Geben Sie dann
die folgenden Zahlen ein: Kasub 1878,89 / Moltke 1389;90 / Trieneken 1478,12
b) in der Tabelle Verkaeufer soll das Feld Vorname auf Varchar(25) gesetzt
werden.
c) in der Tabelle Produkt soll das Feld Menge in die Bezeichnung vorrätig
geändert werden.
- 11 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
4 MySQLDUMP: Import und Export von Datenbanken
Zu MySQL gehört ein Zusatzprogramm mit dem Namen MySQLDUMP, mit dem Sie sehr
effektiv sowohl die Struktur als auch den Inhalt von Datenbanktabellen bzw. ganzen Datenbanken in eine Datei geschrieben werden kann. Dieses Programm befibndet sich im Ordner
C:\Mysql\Bin
Die folgenden Befehle werden nicht „innerhalb“, also vom Prompt aus, gegeben, sondern
von der MS-DOS-Eingabeaufforderung aus.
Die Syntax ist folgende:
mysqldump datenbankname > dumpdatei.sql [die Dateiergänzung ist beliebig]
Um beispielsweise eine Datei mit den Befehlen zum Erzeugen der Datenbanktabelle sicherung aus der Datenbank Uebung zu machen, geben Sie ein:
C:\mysql\bin>mysqldump it04 sicherung >sich.sql
Um zu sehen, dass die Datei existiert, lassen Sie sich den Inhalt anzeigen:
C:\mysql\bin>dir sich.sql
Es erfolgt z. B. diese Ausgabe:
Verzeichnis von C:\mysql\bin
SICH
SQL
745 19.06.03 22:12 sich.sql
1 Datei(en)
745 Bytes
Aufgabe: Öffnen Sie diese Datei mit dem Editor, dann sehen Sie (Abb. nächste Seite) die
SQL-Befehle in der Textdatei, die nötig gewesen wären, um diese Datei manuell
anzulegen und mit dem Befehl insert into mit Daten zu füllen.
Neben der Notwendigkeit, einen Dump zu erzeugen, um Dateien z. B. als Datenbank beim
Provider anzulegen, ergibt sich damit ein wirkungsvolles Werkzeug, wenn es darum geht,
Sicherungen von Datenbanken anzulegen.
- 12 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Um eine solche Textdatei wieder zurückzusichern, braucht man die umgekehrte Variante des
Befehls:
mysql datenbankname < dumpdatei.dump
Dazu ist es dann ggf. erforderlich, eine neue Datenbank erst anzulegen. Gehen Sie zum
Beispiel so vor:
1. Starten Sie MySQL
2. Erzeugen Sie dort eine Datenbank namens uebung2
3. Verlassen Sie Mysql wieder
4. Geben Sie an der DOS-Eingabeaufforderung ein:
mysql uebung2 < sich.sql
5. Starten Sie erneut MySQL
6. Wechseln Sie zur Datenbank uebung 2
7. Schauen Sie dort mit dem select-Befehl in die Tabelle sicherung.
- 13 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Aufgabe: Kopieren Sie den Ordner Schulungen in Ihren MySQL-Datenbankordner.
Es handelt sich dabei um eine MySQL-Datenbank.
Kopieren Sie außerdem die datei demodaten.sql in den Ordner MySQL\BIN
Dies ist der Dump einer SQL-Datei.
1. Starten Sie MySQL und wechseln Sie zu der Datenbank Schulungen.
2. Sehen Sie sich die Tabellen an.
Lösen Sie zunächst die folgenden Aufgaben mit SQL:
a) Lassen Sie sich alle Daten zum Kurs Dreamweaver 4 anzeigen.
b) Welche Kurse besuchte Oliver Müller?
c) Ermitteln Sie die Adresse der Stadtwerke Willingen.
3. Wechseln Sie zur Windows-Eingabeaufforderung und erstellen Sie einen
Dump von der Datenbank. Geben Sie als Dateinamen Schulungen.sql ein.
4. Öffnen Sie die erzeugte Datei mit dem Editor und sehen Sie sich die SQLBefehle an.
5. Machen Sie noch einmal einen Dump namens Teilnehmer, aber nur von den
Teilnehmern aus der Datenbank.
6. Öffnen Sie die erzeugte Datei mit dem Editor und sehen Sie sich die SQLBefehle an.
7. Erzeugen Sie nun eine Mysql-Datenbank aus der Datei demodaten.sql.
Dazu müssen Sie sich erst die daten ansehen und sie eventuell angleichen,
um sie als Dump zu nutzen.
8. Starten Sie MySQL und sehen Sie sich die Daten an.
9. Jetzt sollen die Daten zusammengebracht werden: Aus der Datenbank Schulungen und aus der Tabelle Dozenten (aus Demodaten.sql) soll eine Datenbank werden. Überlegen Sie selbst, wie Sie dazu vorgehen müssen.
- 14 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
5 Textdateien in Mysql einlesen
Sie haben gesehen, dass die Eingabe von Daten über den Befehl insert into sehr mühsam ist. In der Praxis ist es oft erforderlich, Daten, die zuerst mit anderen Programmen erstellt und bearbeitet worden sind, zu übernehmen. Dazu bietet sich der Befehl load data
an. Mit diesem Befehl werden Daten mit hoher Geschwindigkeit in die Datenbanktabelle
eingelesen. Vorab muss diese Tabelle von der Struktur her erstellt worden sein, die Felder
mit den Datentypen, der Primärschlüssel usw. muss festgelegt worden sein. Textdateien, in
denen sich die Datensätze jeweils in einer Zeile, getrennt durch Tabstop-Zeichen, Semikolon
oder Komma, befinden, lassen sich aus allen Programmen erzeugen (z. B. Word, Excel, Access), und auch Uralt-Datenbank erlauben es, Daten in dieser Form zu exportieren. Mit dieser Methode ist es also kein Problem, Riesen-Datenbestände, die in einem x-beliebigen
Format vorliegen, ins Internet zu stellen, um weltweit den Zugriff auf diese Daten zu haben.
Die Syntax des Befehls ist folgende:
LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[OPTIONALLY] ENCLOSED BY "]
[ESCAPED BY '\\' ]]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name,...)]
Wenn das Schlüsselwort LOCAL angegeben wurde, dann wird die Datei von dem Client Host
gelesen. Falls nicht, dann muß sich die Datei auf dem Server befinden.
Die Schlüsselworte REPLACE und IGNORE bestimmen, was mit exisiterenden Einträge geschieht, wenn die neu eingelesenen Daten denselben Wert im Schlüsselfeld haben. Wenn
REPLACE angegeben wird, ersetzen neue Einträge alte, die dieselben KEY VALUES besitzen. Wenn IGNORE angegeben wird, dann werden diese Einträge übergangen. Ohne Angabe wird ein Fehler ausgegeben, wenn ein doppelter KEY VALUE auftritt.
Wenn zu fields und lines nichts angegeben wird, dann gilt: Die Werte in den Zeilen sind
durch Tabulatorzeichen getrennt, und es gibt keine Anführungszeichen bei Textfeldern.
Die rechts abgebildete Word-Datei, gespeichert als
Nur-Text-Datei in dem Ordner, in dem sich die
Datenbankdatei befindet, mit dem Dateinamen
namen2.txt, mit den Feldern:
NR, Name,Vorname, Geschlecht
wird also mit folgendem Befehl in mysql
eingelesen:
mysql> load data infile 'namen2.txt' into table adr2;
Sind die Felder durch andere Zeichen getrennt, wie hier in der Datei namen.txt durch
Semikolons, dann muss das Trennzeichen
angegeben werden:
1;Mueller;Ernst;m
2;Schmitz;Hans;m
3;Mayer;Juergen;m
4;Moeller;Peter;m
5;Gaertner;Luise;w
mysql> load data infile 'namen.txt' into table adr fields terminated by ";“ ;
Voraussetzung dabei ist aber, dass die Tabelle vorher mit create table erstellt wird (oder
vorher schon bestand).
- 15 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Aufgabe: Erstellen Sie die datei adr:
mysql> use uebung
Database changed
mysql> create table adr (
-> id tinyint(3) NOT NULL Primary Key,
-> name varchar(30),
-> vorname varchar(20),
-> geschlecht varchar(1)
-> );
Query OK, 0 rows affected (0.16 sec)
Aufgabe: Kopieren Sie die Datei namen2.txt in den Ordner, in dem sich die Datenbankdatei uebung befindet (z.B: C:\mysql\data\uebung ).
Aufgabe: Lesen Sie jetzt die Daten in die Datei ein:
mysql> load data infile 'namen2.txt' into table adr2;
Schauen Sie jetzt die Daten an:
select * from adr2
| id | name
| vorname | geschlecht |
+----+------------+---------+------------+
| 1 | Mueller
| Ernst
| m
|
| 2 | Schmitz
| Hans
| m
|
| 3 | Mayer
| Juergen | m
|
| 4 | Moeller
| Peter
| m
|
….
+----+------------+---------+------------+
19 rows in set (0.05 sec)
Aufgabe: Verfahren Sie ebenso mit der Datei namen.txt. Sie ist, wie oben erwähnt, durch
Semikolons getrennt.
Sie muss also zuerst genauso erstellt werden:
mysql> create table adr (
-> id tinyint(3) NOT NULL Primary Key,
-> name varchar(30),
-> vorname varchar(20),
-> geschlecht varchar(1)
-> );
Dann brauchen Sie den vorher erwähnten Befehl:
load data infile 'namen.txt' into table adr fields terminated by ";“ ;
5.1 Textdateien aus Mysql-Dateien erzeugen
SELECT ... INTO OUTFILE ist das Gegenstück zu LOAD DATA INFILE. Wenn Sie also Daten aus einer mysql-Tabelle in eine ASCII-Datei auslesen wollen, benötigen Sie diesen Befehl.
SELECT .* |.Felder..
INTO OUTFILE 'Dateiname'
from ...
where...
Aufgabe: Geben Sie die Tabelle Sicherung
aus der Datenbank Uebung in eine
Tabelle namens sicher.txt aus.
Wenn Sie die Tabelle anschließend
in Word öffnen, sollte sie so aussehen:
- 16 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Lösung:
mysql> select * into outfile 'sicher.txt'
-> from sicherung;
Query OK, 5 rows affected (0.11 sec)
Aufgabe: Ihnen liegt eine Excel-Arbeitsmappe Metallwaren.xls mit den hier abgebildeten
vier Tabellen Kunde, Waren, Bestellung und Bestelldetails vor. Diese Tabellen
sollen in eine MYSQL-Datenbank übertragen werden.
Die Schritte, die dafür erforderlich sind:
1.
Excel-Tabellen in Textdatei
übertragen (csv-Datei) (4x)
2.
In MySQL jeweils die Tabellenstruktur erzeugen
3.
Daten mit load data infile einlesen
Lösung: zunächst Datenbank anlegen
mysql> create database metallwaren
-> ;
Query OK, 1 row affected (0.05 sec)
Datenbank anlegen
dann in Excel: aus der Tabelle Kunde die erste Zeile mit den Spaltenüberschriften löschen
(weil sie ja als Feldname in der Datenbank definiert werden müssen und nicht die erste Zeile
der Tabelle sein dürfen)
anschließend als csv-Datei im Ordner C:\apache\mysql\data\metallwaren speichern, dann
Excel-Tabelle schließen
jetzt zu MySQL wechseln, die Datenbank öffnen und die Tabelle Kunde anlegen
mysql> use metallwaren;
Tabelle erzeugen
- 17 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Database changed
mysql> create table kunde(
-> kundennummer tinyint(3) auto_increment NOT NULL PRIMary Key,
-> name varchar(20),
-> vorname varchar(20),
-> Strasse varchar(30),
-> PLZ int(5),
-> Ort varchar(20)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> load data infile 'kunde.csv' into table kunde
-> fields terminated by ";";
Query OK, 4 rows affected (0.00 sec)
Texttabelle einlesen
Records: 4 Deleted: 0 Skipped: 0 Warnings: 4
mysql> select * from kunde;
+--------------+-----------+---------+-------------------+-------+--------+
| kundennummer | name
| vorname | Strasse
| PLZ
| Ort
+--------------+---------+---------+------------------------+-------+----1 | Schulte | Willi
| Stra_burger Stra_e 10 | 50968 | Koeln"
|
2 | Boll
| Anna
| Essenberger Stra_e 3
| 53844 | Troisdorf"
|
3 | Segers | Gerd
| Bonner Stra_e 12
| 53844 | Troisdorf"
|
4 | Maassen | Karl
| Schoenhauser Stra_e 64 | 50967 | Koeln"
+--------------+---------+---------+------------------------+-------+---+
5 rows in set (0.00 sec)
Aufgabe: Verfahren Sie entsprechend mit den anderen Tabellen, also auch hier wieder:
1. Excel-Tabellen in Textdatei übertragen (csv-Datei)
2. In MySQL die Tabellenstruktur erzeugen
3. Daten mit load data infile einlesen
- 18 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Aufgabe: Machen Sie jetzt die folgenden Abfragen über SQL-Befehle:
1.
In welchem Ort wohnt der Kunde namens Schulte?
’
2.
An welchem Datum kaufte der Kunde namens Maassen etwas?
3.
Von welchem Artikeln sind mindestens 5000 Stück auf Lager?
4.
Wwelche Waren wurden mit der Bestellnummer 10 verkauft?
5.
Der Kunde Schulte meldet eine neue Adresse. Er wohnt jetzt in der Gartenstraße 45
(Wohnort bleibt)
6.
Erhöhen Sie die Verkaufspreise für die Artikel ab Artikel_ID 4 um 10 %.
7.
Ändern Sie die Spaltenüberschrift Kundennummer in der Tabelle Bestellung in KNR
8.
Fügen Sie ein Feld Rabattstufe zur Tabelle
Kunde hinzu. Tragen Sie dann Werte ein:
9.
Der neue Lagerbestand für Dübel soll 1500 betragen.
Name
Schulte
Boll
Segers
Maassen
Rabattstufe
1
1
2
2
10. Welcher Artikel hat den höchsten Lagerbestand?
11. An welchem Ort wohnt der Kunde, an den die Bestellnummer 20 ging?
12. Welche Menge an Bolzen kaufte die Kundin Boll?
13. Fügen Sie eine neue Bestellung (Bestellnummer 30) des Kunden Segers hinzu. Er bestellt am 29.01.03 folgende Artikel:
1000 Nieten und 500 Bolzen.
Nehmen Sie die erforderlichen Datensätze auf.
- 19 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
Lösungen zu S. 14:
1. SELECT ort
FROM kunde
where name = "Schulte"
2. select be.bestelldatum, ku.name
from bestellung be, kunde ku
where ku.name="Maassen"
and ku.kundennummer=be.kundennummer
3. SELECT artikel
FROM waren
where lagerbestand > 5000
4. select a.artikel, bd.bestellnr
from artikel a, bestelldetails bd
where a.artikel_ID=bd.waren_ID
and bd.Bestellnr=10
5. update kunde
set straße=Gartenstraße 45“
where name = “Schulte“
6. update artikel
set vk_preis = vk_preis*1.1
where Artikel_ID >= 4
- 20 -
SQL-Befehle
Kurzanleitung und Übungen zu MYSQL
- 21 -
Herunterladen