Einstieg in MySQL

Werbung
www.galileocomputing.de/648 - Einstieg in MySQL - Leseprobe
Auf einen Blick
Vorwort .................................................................
15
1 Grundlagen ............................................................
21
2 Die ersten Gehversuche .........................................
51
3 Laufen lernen .........................................................
73
4 Ein wenig Theorie .................................................. 101
5 Tabellen und ihre Datentypen ............................... 117
6 Erweiterte Anweisungen ....................................... 139
7 Datenbankadministration ...................................... 193
8 PHP und MySQL .................................................... 219
9 Perl und MySQL .................................................... 257
10 C# und MySQL ...................................................... 273
11 MyODBC ............................................................... 297
12 Werkzeugbank ....................................................... 321
13 Referenz ................................................................. 357
14 Wie geht es weiter? ............................................... 391
A Lösungen ............................................................... 397
B Quellenverzeichnis ................................................ 403
C Inhalt der CD-ROM ............................................... 405
D Glossar ................................................................... 407
Index ..................................................................... 409
Inhalt
Vorwort
15
Ziel dieses Buchs und Voraussetzungen ......................................................
15
E
Aufbau des Buchs .............................................................................................
16
4.
Schreibkonventionen .......................................................................................
Die Textformatierungen ....................................................................
Absatzformatierungen .......................................................................
Syntax ..................................................................................................
17
17
18
18
E
Danksagung ......................................................................................................
19
E
Internetangebot ...............................................................................................
20
1
Grundlagen
1.1
Datenbanken .....................................................................................................
1.1.1
Datenbanktypen ................................................................................
1.1.2
Datenbankmanagementsysteme .....................................................
1.1.3
Lokale- und Client-Server-Datenbanksysteme ..............................
1.1.4
Begriffsdefinition ...............................................................................
23
24
26
27
29
1.2
Wissenswertes zu MySQL ..............................................................................
1.2.1
Softwareanforderungen ....................................................................
1.2.2
Hardwareanforderungen ..................................................................
1.2.3
Versionshistorie .................................................................................
1.2.4
Bezugsquellen ....................................................................................
30
32
33
34
35
1.3
MySQL installieren und konfigurieren .........................................................
1.3.1
SuSE Linux 8.1 ...................................................................................
1.3.2
Windows ............................................................................................
1.3.3
Mac OS X ............................................................................................
36
36
42
45
1.4
Zusammenfassung ............................................................................................
50
1.5
Fragen und Übungen .......................................................................................
50
2
Die ersten Gehversuche
2.1
Die MySQL-Konsole ........................................................................................
2.1.1
Hilfe .....................................................................................................
2.1.2
Beenden ..............................................................................................
2.1.3
Eingabeaufforderung .........................................................................
2.1.4
Serverstatus ........................................................................................
2.1.5
SQL-Befehlsdatei ausführen .............................................................
21
51
53
55
55
55
55
56
Inhalt
5
2.2
Testdatenbank einrichten ...............................................................................
57
2.3
Einfache Abfragen ............................................................................................
58
2.4
Datensätze einfügen ........................................................................................
61
2.5
Datensätze löschen ..........................................................................................
65
2.6
Bedingungen .....................................................................................................
67
2.7
Zusammenfassung ............................................................................................
70
2.8
Fragen und Übungen .......................................................................................
71
3
Laufen lernen
3.1
Mit PHP ..............................................................................................................
3.1.1
Verbindung herstellen .......................................................................
3.1.2
Anfrage stellen ...................................................................................
3.1.3
Ergebnistabelle auslesen ...................................................................
75
76
78
82
3.2
Mit Perl ..............................................................................................................
3.2.1
Verbindung herstellen .......................................................................
3.2.2
Anfrage stellen ...................................................................................
3.2.3
Ergebnistabelle auslesen ...................................................................
84
85
87
90
3.3
Mit C#
3.3.1
3.3.2
3.3.3
Verbindung herstellen .......................................................................
Anfrage stellen ...................................................................................
Ergebnistabelle auslesen ...................................................................
92
93
95
96
3.4
Zusammenfassung ............................................................................................
99
3.5
Fragen und Übungen ....................................................................................... 100
................................................................................................................
4Ein wenig Theorie
6
73
101
4.1
Entity-Relationship-Model .............................................................................
4.1.1
Tabellen ...............................................................................................
4.1.2
Felder ..................................................................................................
4.1.3
Beziehungen .......................................................................................
103
104
104
105
4.2
Idee formulieren ............................................................................................... 106
4.2.1
WWW – Was? Wozu? Womit? ........................................................ 106
4.2.2
Mindmap ............................................................................................ 107
4.3
Datenbeziehungen ........................................................................................... 108
4.4
Normalformen ...................................................................................................
4.4.1
Erste Normalform ..............................................................................
4.4.2
Zweite Normalform ...........................................................................
4.4.3
Dritte Normalform .............................................................................
110
110
111
112
4.5
Tabellen- und Datenbankstruktur ................................................................. 112
4.6
Tabellen definieren ........................................................................................... 114
4.6.1
Beziehungen ....................................................................................... 114
4.6.2
Vorbereitungen .................................................................................. 115
Inhalt
4.7
Zusammenfassung ............................................................................................ 116
4.8
Fragen und Übungen ....................................................................................... 116
5
Tabellen und ihre Datentypen
5.1
Datentypen .......................................................................................................
5.1.1
Zeichenkettentypen ..........................................................................
5.1.2
Zahlentypen .......................................................................................
5.1.3
Zeit- und Datumstypen ....................................................................
5.1.4
Binärtypen ..........................................................................................
5.1.5
Aufzählungstypen ..............................................................................
119
119
122
124
126
127
5.2
Schlüssel, Indizes und Attribute ....................................................................
5.2.1
Primärschlüssel ...................................................................................
5.2.2
Indizes .................................................................................................
5.2.3
Attribute .............................................................................................
129
129
130
132
5.3
Tabellen definieren .......................................................................................... 134
117
5.4
Zusammenfassung ............................................................................................ 137
5.5
Fragen und Übungen ....................................................................................... 137
6
Erweiterte Anweisungen
6.1
Auswahlabfragen ..............................................................................................
6.1.1
Ergebnismenge sortieren ..................................................................
6.1.2
Ergebnismenge begrenzen ...............................................................
6.1.3
Limitieren ...........................................................................................
6.1.4
Tabellen verknüpfen ..........................................................................
6.1.5
Subselects ...........................................................................................
6.2
Datensätze manipulieren ................................................................................ 165
6.2.1
Datensätze einfügen .......................................................................... 165
6.2.2
Datensätze verändern ....................................................................... 169
6.3
Funktionen ........................................................................................................
6.3.1
Arithmetik ...........................................................................................
6.3.2
Mathematik ........................................................................................
6.3.3
Datums- und Zeitfunktionen ...........................................................
6.3.4
Statistik ...............................................................................................
139
141
144
147
153
156
162
170
170
172
176
187
6.4
Zusammenfassung ............................................................................................ 190
6.5
Fragen und Übungen ....................................................................................... 191
7
Datenbankadministration
7.1
Datenpflege ....................................................................................................... 195
7.1.1
Optimieren und analysieren ............................................................. 197
7.1.2
Tabelle reparieren .............................................................................. 198
193
Inhalt
7
8
7.2
Datensicherung .................................................................................................
7.2.1
Manuelle Sicherung ...........................................................................
7.2.2
Sicherung mit BACKUP TABLE .........................................................
7.2.3
Sicherung in Datei .............................................................................
7.2.4
Tabellendump ....................................................................................
7.2.5
Manuelle Sicherung wieder herstellen ............................................
7.2.6
Wiederherstellung mit RESTORE TABLE ........................................
7.2.7
Daten aus Datei zurückspielen .........................................................
7.2.8
Tabellendump zurücksichern ...........................................................
199
199
200
202
204
204
205
205
206
7.3
Datenexport und -import ...............................................................................
7.3.1
Daten exportieren .............................................................................
7.3.2
Daten importieren .............................................................................
7.3.3
Datenbank ins Web übertragen .......................................................
207
207
209
211
7.4
Benutzerverwaltung .........................................................................................
7.4.1
Rechte zuordnen und Benutzer anlegen ........................................
7.4.2
Rechte aberkennen ............................................................................
7.4.3
Beispiele ..............................................................................................
214
215
216
217
7.5
Zusammenfassung ............................................................................................ 218
7.6
Fragen und Übungen ....................................................................................... 218
8
PHP und MySQL
8.1
Forum ................................................................................................................. 221
8.1.1
Planung ............................................................................................... 221
8.1.2
Entwurf ............................................................................................... 223
8.1.3
Umsetzung .......................................................................................... 227
8.2
Datenbankdump ............................................................................................... 245
8.2.1
Planung ............................................................................................... 245
8.2.2
Umsetzung .......................................................................................... 246
9
Perl und MySQL
9.1
Gästebuch ..........................................................................................................
9.1.1
Planung ...............................................................................................
9.1.2
Entwurf ...............................................................................................
9.1.3
Umsetzung ..........................................................................................
9.1.4
Weiterentwicklungen ........................................................................
10
C# und MySQL
10.1
Adressdatenbank ..............................................................................................
10.1.1 Planung ...............................................................................................
10.1.2 Umsetzung ..........................................................................................
10.1.3 Weiterentwicklungen ........................................................................
Inhalt
219
257
259
259
259
260
272
273
275
275
277
295
11
MyODBC
297
11.1
Installation ........................................................................................................ 299
11.1.1 Windows ............................................................................................ 300
11.1.2 Linux .................................................................................................... 300
11.2
Excel ...................................................................................................................
11.2.1 Daten importieren .............................................................................
11.2.2 Die Symbolleiste Externe Daten ......................................................
11.2.3 Der Query Editor ...............................................................................
11.3
Word .................................................................................................................. 305
11.3.1 Datenquelle anlegen ......................................................................... 306
11.3.2 Seriendruckfelder einfügen .............................................................. 308
11.4
OpenOffice.org .................................................................................................
11.4.1 Datenquelle anlegen .........................................................................
11.4.2 Daten in Tabelle importieren ...........................................................
11.4.3 Daten in Textdokument importieren ..............................................
11.4.4 Adressdatenbank ...............................................................................
12
Werkzeugbank
12.1
PhpMyAdmin ....................................................................................................
12.1.1 Erstkonfiguration ...............................................................................
12.1.2 Die Startseite ......................................................................................
12.1.3 Datenbank auswählen .......................................................................
12.1.4 Abfragen .............................................................................................
12.1.5 Datensätze einfügen ..........................................................................
12.1.6 Abfragefenster ....................................................................................
323
324
325
326
327
328
329
12.2
MySQL-Administrator .....................................................................................
12.2.1 Windows-Installation ........................................................................
12.2.2 Linux-Installation ...............................................................................
12.2.3 Erster Start unter Windows ..............................................................
12.2.4 Die Oberfläche ...................................................................................
12.2.5 Benutzerverwaltung ..........................................................................
12.2.6 Catalogs ..............................................................................................
330
330
330
331
333
334
336
12.3
MySQL-Front ....................................................................................................
12.3.1 Installation ..........................................................................................
12.3.2 Verbindung herstellen .......................................................................
12.3.3 Informationsflut .................................................................................
12.3.4 Datenbankadministration .................................................................
12.3.5 Tools-Menü ........................................................................................
12.3.6 User-Manager ....................................................................................
12.3.7 Import/Export ....................................................................................
337
337
338
339
341
342
343
345
12.4
Navicat ............................................................................................................... 346
12.4.1 Installation .......................................................................................... 346
12.4.2 Start ..................................................................................................... 346
301
303
304
304
310
310
312
314
316
321
Inhalt
9
12.4.3
12.4.4
10
Oberfläche .......................................................................................... 347
Query-Builder ..................................................................................... 348
12.5
MySQLadmin .................................................................................................... 351
12.5.1 Prozesse beenden .............................................................................. 352
12.6
WinMySQLadmin ............................................................................................. 353
12.6.1 Die Oberfläche ................................................................................... 355
13
Referenz
13.1
MySQL ................................................................................................................
13.1.1 ALTER TABLE ......................................................................................
13.1.2 CREATE DATABASE ...........................................................................
13.1.3 CREATE INDEX ..................................................................................
13.1.4 CREATE TABLE ...................................................................................
13.1.5 DELETE ................................................................................................
13.1.6 DESCRIBE ...........................................................................................
13.1.7 DROP DATABASE ..............................................................................
13.1.8 DROP INDEX .....................................................................................
13.1.9 DROP TABLE ......................................................................................
13.1.10 EXPLAIN ..............................................................................................
13.1.11 FLUSH .................................................................................................
13.1.12 GRANT ................................................................................................
13.1.13 INSERT ................................................................................................
13.1.14 KILL .....................................................................................................
13.1.15 LOAD DATA .......................................................................................
13.1.16 OPTIMIZE TABLE ...............................................................................
13.1.17 REPLACE .............................................................................................
13.1.18 REVOKE ..............................................................................................
13.1.19 SELECT ................................................................................................
13.1.20 SHOW .................................................................................................
13.1.21 UPDATE ..............................................................................................
13.1.22 USE ......................................................................................................
359
359
360
361
361
362
362
362
362
363
363
363
364
365
365
365
366
366
367
367
368
368
369
13.2
PHP .....................................................................................................................
13.2.1 mysql_affected_rows .........................................................................
13.2.2 mysql_close ........................................................................................
13.2.3 mysql_connect ...................................................................................
13.2.4 mysql_errno ........................................................................................
13.2.5 mysql_error .........................................................................................
13.2.6 mysql_escape_string ..........................................................................
13.2.7 mysql_fetch_array ..............................................................................
13.2.8 mysql_fetch_field ...............................................................................
13.2.9 mysql_fetch_object ............................................................................
13.2.10 mysql_fetch_row ................................................................................
13.2.11 mysql_free_result ...............................................................................
13.2.12 mysql_insert_id ..................................................................................
13.2.13 mysql_list_dbs ....................................................................................
13.2.14 mysql_list_tables ................................................................................
13.2.15 mysql_num_fields ..............................................................................
13.2.16 mysql_num_rows ...............................................................................
369
369
369
370
370
370
371
371
372
372
373
373
373
374
374
374
375
Inhalt
357
mysql_pconnect .................................................................................
mysql_query .......................................................................................
mysql_result .......................................................................................
mysql_select_db ................................................................................
375
375
375
376
13.3
Perl ......................................................................................................................
13.3.1 connect (DBI) .....................................................................................
13.3.2 datasource (DBI) ................................................................................
13.3.3 disconnect (DBH) ..............................................................................
13.3.4 do (DBH) ............................................................................................
13.3.5 errstr (DBH, STH) ...............................................................................
13.3.6 execute (STH) .....................................................................................
13.3.7 fetchrow_array (STH) ........................................................................
13.3.8 finish (STH) .........................................................................................
13.3.9 is_blob (STH) ......................................................................................
13.3.10 is_key (STH) ........................................................................................
13.3.11 is_not_null (STH) ...............................................................................
13.3.12 is_num (STH) ......................................................................................
13.3.13 is_pri_key (STH) .................................................................................
13.3.14 insertid (STH) .....................................................................................
13.3.15 length (STH) .......................................................................................
13.3.16 NAME (STH) .......................................................................................
13.3.17 NUM_OF_FIELDS (STH) ...................................................................
13.3.18 prepare (DBH) ....................................................................................
13.3.19 quote (DBH) .......................................................................................
13.3.20 rows (STH) ..........................................................................................
13.3.21 type (STH) ...........................................................................................
376
376
377
377
378
378
378
379
379
379
379
380
380
380
381
381
381
381
382
382
382
382
13.4
C# ........................................................................................................................
13.4.1 MySqlCommand ................................................................................
13.4.2 MySqlConnection ..............................................................................
13.4.3 MySqlDataReader ..............................................................................
13.4.4 MySqlException .................................................................................
383
383
384
386
390
14
Wie geht es weiter?
14.1
MySQL 5.0 ......................................................................................................... 393
13.2.17
13.2.18
13.2.19
13.2.20
391
14.2
Informationsquellen im Internet ................................................................... 394
14.3
Buch-Tipps ........................................................................................................ 395
A
Lösungen
A.1
Kapitel 1 ............................................................................................................. 397
A.2
Kapitel 2 ............................................................................................................. 398
A.3
Kapitel 3 ............................................................................................................. 398
A.4
Kapitel 4 ............................................................................................................. 399
A.5
Kapitel 5 ............................................................................................................. 399
A.6
Kapitel 6 ............................................................................................................. 400
A.7
Kapitel 7 ............................................................................................................. 401
397
Inhalt
11
12
B
Quellenverzeichnis
403
C
Inhalt der CD-ROM
405
D
Glossar
407
Index
409
Inhalt
Vorwort
Liebe Leserinnen und Leser,
abgesehen vom Computer selbst, hat keine andere Entwicklung die Welt der
Bits und Bytes so revolutioniert wie die Datenbanken. Und wie vieles andere
auch, sind sie im Grunde genommen der realen Welt abgeguckt. Ihre Vorbilder
können Sie in fast jedem Haushalt entdecken: Kochrezepte, Bücherregale, Ordner voller Rechnungen ...
Das unter den Entwicklern von Webseiten wohl bekannteste Datenbanksystem
ist MySQL. Der Grund dafür liegt nahe: Für Privatanwender ist es kostenlos
und im Internet zum freien Download verfügbar. Es ist jedoch bei weitem nicht
das Einzige. So gibt es von Microsoft etwa MS SQL und Access, aus dem Hause
IBM stammt DB2 und die SAP AG kann mit dem kostenlosen SAP DB1 aufwarten. Die Liste der Hersteller und Produkte ist lang und ließe sich noch einige
Seiten fortführen. Diese Datenbanksysteme unterscheiden sich hauptsächlich
im Preis, in der Leistung und im Einsatzgebiet. Eines haben jedoch alle gemeinsam: Sie dienen dazu, Daten unterschiedlichster Art zu ordnen, zu verwalten
und bei Bedarf die entsprechenden Informationen wieder preiszugeben.
Ziel dieses Buchs und Voraussetzungen
Ich biete Ihnen mit diesem Buch einen schnellen und leichten Einstieg in die
Materie der Datenbanken und insbesondere natürlich in MySQL, Schritt für
Schritt, mit allen wichtigen Aspekten. Zwar werde ich bei Bedarf und an der
geeigneten Stelle alle wichtigen Informationen für Sie bereitstellen und entsprechende Hilfestellung bieten, aber Sie, die Leserin oder der Leser, müssen
ein paar Voraussetzungen mitbringen, die leider unumgänglich sind.
왘 Zunächst einmal sollten Sie gute Kenntnisse im Umgang mit Ihrem Betriebs-
system besitzen. Dazu zählen die Installation und das Ausführen von Programmen und der Umgang mit einem einfachen Texteditor wie Notepad
oder vi. Die erforderlichen Anweisungen zur Installation und zum Start der
Programme werde ich aber angeben.
왘 Optimal wäre die Beherrschung der Eingabeaufforderung unter Windows,
die jeweils installierte Shell unter Linux oder das Terminal von Mac OS X.
Die entsprechenden Schritte werde ich Ihnen auch hier schildern.
왘 Speziell für den Praxisteil sind entweder Kenntnisse in PHP, Perl oder C#
(C Sharp) nötig, denn eine konkrete Einführung in diese Themen kann hier
1 Dieses wurde jedoch mittlerweile an die MySQL AB abgetreten, welche es weiterentwickelt und unter dem Namen MaxDB ebenfalls kostenlos zur Verfügung stellt.
Ziel dieses Buchs und Voraussetzungen
15
leider nicht erfolgen. Ein Kapitel dieses Buchs wird aber über die Grundlagen der Programmierung von MySQL mittels der entsprechenden Sprachen
informieren, sodass Sie auf jeden Fall die Quelltexte verstehen und umsetzen können sollten. Ansonsten kann ich Ihnen nur empfehlen, einmal einen
Blick in den Katalog von Galileo Press zu werfen!
Darüber hinaus sind natürlich Interesse und Zeit erforderlich. Es hat wenig
Sinn, wenn Sie versuchen, die Informationen in sich hineinzupressen, und das
Buch an einem Tag durchlesen (auch wenn dies sicherlich möglich wäre).
Aufbau des Buchs
Dieses Buch gliedert sich ganz allgemein in vier Teile:
1. Einführung
Der erste Teil liefert Ihnen das Grundwissen zu Datenbanken und MySQL.
Darunter fallen z.B. die stufenweise Entwicklung, Begriffsdefinitionen, Softund Hardwareanforderungen für den Einsatz von MySQL und auch kurze
Anleitungen dazu, wie Sie MySQL unter Windows, Linux und Mac OS X
installieren müssen. Auch die ersten Versuche im Umgang mit MySQL werden in diesem Teil vorgenommen, bis hin zu den ersten Tests mit PHP, Perl
und C#.
2. Fortgeschritten
In diesem zweiten Teil werden Sie lernen, welche Theorie hinter Datenbanken steckt und wie aus einer Idee ein Datenbankmodell entsteht. Hier werden auch die verschiedenen Datentypen und die Administration von MySQL
vorgestellt. Darüber hinaus werden Sie komplexe Abfragen kennen lernen.
3. Praxiseinsatz
Der dritte und größte Teil dieses Buchs ist der Praxiseinsatz, der sich in drei
Kapitel gliedert: PHP und MySQL, Perl und MySQL und C# und MySQL. Ich
werde Ihnen in diesen Kapiteln zeigen, wie Sie mit Hilfe dieser drei Programmiersprachen die unterschiedlichsten Anwendungen in Verbindung mit
MySQL umsetzen können. Von Bildergalerien bis zu Foren ist alles dabei.
4. Anhang
Der letzte Teil umfasst die Befehlsreferenz für MySQL, PHP, Perl und C#.
Außerdem werden verschiedene Tools zur Administration eines MySQLDatenbanksystems vorgestellt.
Am Ende der Kapitel 1-7 finden Sie eine kurze Zusammenfassung der behandelten Inhalte sowie Fragen und Übungen, die das Gelernte vertiefen. Sollten
Sie nicht alles auf Anhieb verstanden haben, dann lesen Sie die entsprechenden
Abschnitte oder Kapitel einfach noch einmal. Erfolgreiches Lernen steht in
16
Vorwort
enger Verbindung mit häufigen Wiederholungen und vielen Übungen. Wiederholen Sie das, was Sie nicht verstanden haben, einfach so lange, bis Sie alle Fragen und Übungen bearbeiten können, ohne(!) in Anhang A, Lösungen, nachschlagen zu müssen. Nur so kann der größtmögliche Erfolg erzielt werden. Ich
habe Sie ja bereits darauf hingewiesen, dass Zeit eine Voraussetzung zum Lesen
dieses Buchs ist.
Für den Fall der Fälle: Sollten Sie einmal einen vorher erklärten Begriff wieder
vergessen haben oder nicht mehr wissen, was ein bestimmter Befehl bewirkt,
dann finden Sie im Anhang ein Glossar, das alle wichtigen Fachbegriffe kurz
und prägnant erläutert, sowie ein Stichwortverzeichnis, das Sie auf die jeweiligen Seiten verweist. Außerdem wurden die Kapitel eindeutig benannt, sodass
Sie auch mit Hilfe des Inhaltsverzeichnisses die nötigen Informationen heraussuchen können.
Schreibkonventionen
Da dieses Buch die unterschiedlichsten Informationen enthält, wurde mit verschiedenen Schrift- und Absatzformaten gearbeitet, die Ihnen das Lesen
erleichtern sollen. Diese Formatierungen unterteilen sich in drei Gruppen:
Textformatierungen, Absatzformatierungen und Syntax.
Die Textformatierungen
Auszüge aus Quelltexten – später auch Listings genannt – oder Ausgaben auf
der Konsole werden in einer dicktengleichen, nicht proportionalen Schrift dargestellt. Dies ist die auffälligste Formatierung, da solche Listings und Ausgaben
einen Großteil der Texte ausmachen werden.
# Dies ist ein Beispiel für ein Listing bzw. eine
# Konsolenausgabe.
Auch Schlüsselbegriffe wie SQL-Befehle, Bezeichner von Tabellen, Spalten und
Datenbanken sowie Funktionen und Variablen, die aus dem Fundus der eingesetzten Programmiersprachen (PHP, Perl und C#) oder SQL selbst stammen,
werden in nicht proportionaler Schrift dargestellt. Dies kann auch innerhalb
eines Fließtextes geschehen.
Datei- und Pfadangaben werden kursiv gedruckt. Dies gilt für alle Adressangaben, jedoch nicht für URI oder Referenzen, die als Beispiel aus einem Skript
extrahiert wurden.
Eingaben, die Sie tätigen sollen, Menüführungen oder Übersetzungen werden
fett formatiert. Ebenso Internet- oder E-Mail-Adressen. Dies könnte z.B. folgendermaßen aussehen:
Datei • Speichern unter...
Schreibkonventionen
17
Absatzformatierungen
Alle Absätze, die wie der nachfolgende grau hinterlegt sind, enthalten Informationen, die Sie sich auf jeden Fall gut einprägen oder besonders beachten sollten.
Dies ist nur ein kurzer Absatz, der Ihnen die Formatierung für besonders
wichtige Details verdeutlichen soll.
Syntax
Damit Sie später im Buch schneller erkennen können, ob die nachfolgenden
Zeilen für eine Eingabe in der MySQL-Konsole oder in der Betriebssystemkonsole gedacht sind, steht am Anfang jeder Zeile eine entsprechende Zeichenfolge.
왘
mysql>
Eingabe in der MySQL-Konsole
왘
#>
Eingabe in der Betriebssystemkonsole bzw. dem Terminal
Die beiden Zeichenfolgen stehen immer am Anfang einer neuen Zeile. Es kann
gelegentlich vorkommen, dass sich eine zusammenhängende Eingabe über
mehrere Zeilen eines Absatzes erstreckt. Jede Zeile, die keine der beiden Zeichenfolgen am Anfang trägt, zählt zur vorherigen Zeile.
Alle SQL-Anweisungen werden in Großbuchstaben geschrieben, während Spalten-, Tabellen- und Datenbankbezeichner kleingeschrieben werden.
왘
SELECT id, name FROM author;
SELECT und FROM sind SQL-Befehle, id und name sind Spaltennamen und
author ist ein Tabellenbezeichner.
Angaben, die optional sind, werden in eckigen Klammern notiert. Dies gilt
sowohl für SQL als auch für PHP, Perl und C#.
왘
[WHERE <Bedingung>]
Die Angabe WHERE <Bedingung> zwischen den eckigen Klammern kann,
muss aber nicht notiert werden.
Jede Angabe, die vorgenommen werden muss, aber variabel sein kann, wird in
spitzen Klammern notiert. Dies könnten Spalten-, Tabellen- oder Datenbankbezeichner sein, eine Bedingung oder Ähnliches.
18
Vorwort
왘
<Spaltenname>
Hier muss ein konkreter Spaltenname angegeben werden.
Funktionen bzw. Methoden erwarten häufig Parameter oder geben Werte
zurück. Um dies syntaktisch darzustellen, gibt es eine spezielle Schreibweise,
die auch in diesem Buch verwendet wird.
<Typ des Rückgabewertes> <Funktionsbezeichner>(<Parameter>)
Ein konkretes Beispiel für diese Notationsart ist Folgendes:
왘
float pow(float base, float exponent)
Diese Syntax bedeutet, dass die Funktion pow zwei Parameter vom Typ
float (Fließkommazahl bzw. reelle Zahl) erwartet. Die Bezeichner nach dem
Werttyp geben Auskunft darüber, wofür dieser Parameter verwendet wird.
So ist base die Basis und exponent der Exponent zur Berechnung der
Potenz. Der Rückgabewert der Funktion ist ebenfalls vom Typ float.
Gelegentlich können innerhalb der Parameterangaben eckige Klammern vorkommen. Diese bedeuten, dass die Angabe der in den eckigen Klammern stehenden Parameter optional ist (wie bei SQL).
Danksagung
Danke zu sagen und dabei auch alle zu berücksichtigen, fällt manchmal ein
wenig schwer. So fehlen vielleicht die richtigen Worte oder es steht nicht genügend Platz zur Verfügung, um die Person(en) ausgiebig zu würdigen. Bitte habt
Nachsicht mit mir!
Zuallererst möchte ich Ihnen, den Leserinnen und Lesern, für das Interesse an
diesem Buch danken und hoffe, dass ich Ihre Erwartungen voll und ganz erfüllen kann. Über Ihr Feedback würde ich mich natürlich freuen. Schreiben Sie
mir doch eine E-Mail an [email protected] mit Ihrer Kritik.
Die Person, die – abgesehen vom Autor – die meiste Arbeit in ein Buch investiert, ist der Lektor. In diesem Fall Stephan Mattescheck. Über seine typischen
Tätigkeiten hinaus war er immer bereit, Fragen zu beantworten oder Probleme
zu lösen. Er unterstützte mich während der gesamten Arbeitsphase mit Ideen
und Anmerkungen, wo er nur konnte, und nahm Verschiebungen des Abgabetermins der Manuskripte gelassen. Ein Großteil meines Dankes geht daher an
ihn und sein gesamtes Team bei Galileo Press respektive Galileo Computing.
Auch für das entgegengebrachte Vertrauen möchte ich mich bedanken.
Natürlich sei an dieser Stelle auch meiner ganzen Familie und meiner Freundin
gedankt, die öfter auf mich verzichten mussten, wenn ich mich an den Compu-
Danksagung
19
ter zum Schreiben zurückzog. Auch mein Bekanntenkreis hat die eine oder
andere Absage von mir hinnehmen müssen, und sie häuften sich in letzter Zeit
sehr. Ich verspreche, mich zu bessern, und werde es wieder gutmachen!
Kai Surendorf, von ihm stammt das Buch »Unix für Mac OS X Anwender«,
danke ich für seine Tipps rund um Mac OS X. Als eingefleischter WinNer war
für mich doch einiges an Einarbeitung nötig, um mich mit den Äpfeln dieser
Welt auseinander setzen zu können.
Kolja Engelmann, der schon bei dem Buch »Webseiten programmieren und
gestalten« bereitwillig die Manuskripte gelesen und seine Anmerkungen dazu
gegeben hat, war auch diesmal wieder eine große Hilfe.
Zwei Personen, die mit Sicherheit ein wenig überrascht darüber sind, dass
ihnen in diesem Buch Dank ausgesprochen wird, sind Bernhard Volz und Eric
Gunnerson. Von Bernhard Volz stammt das Buch »Einstieg in C#« und von Eric
Gunnerson »C# – Tutorial und Referenz«. Beide Bücher sind im Galileo Press
Verlag erschienen und haben mir bei der Einarbeitung in diese Programmiersprache sehr geholfen.
Alle diejenigen, denen ich nicht direkt gedankt habe, die aber trotzdem einen
Teil zu diesem Buch beigetragen haben, sei gesagt: Entweder habe ich Euch
schon gedankt oder ich werde Euch noch danken.
Internetangebot
Es gibt einen Leitsatz bei Galileo Press, der natürlich auch auf dieses Buch
zutrifft: Buch + Web = Galileo-Buch. Sie finden dort weitere Beispiele zum
Buch, Quelltexte, ein Forum, um mit anderen Lesern und mir in Kontakt zu treten, weiterführende Verweise zu Webseiten, Zusatzkapitel und vieles mehr. Sie
merken schon, ein Besuch lohnt sich. Vergessen Sie dabei nicht, sich mit Hilfe
des vorne im Buch eingedruckten Codes zu registrieren.
http://www.galileocomputing.de/ – Webseite von Galileo Computing
http://www.mark-lubkowitz.de/ – meine Webseite
In diesem Sinne: Viel Spaß und viel Erfolg!
Ihr Mark Lubkowitz,
Berlin im Juli 2003
20
Vorwort
1
2
1 Grundlagen
3
4
1.1
Datenbanken ........................................................... 23
1.2
Wissenswertes zu MySQL ....................................... 30
1.3
MySQL installieren und konfigurieren ..................... 36
1.4
Zusammenfassung ................................................... 50
7
1.5
Fragen und Übungen ............................................... 50
8
5
6
9
10
11
12
13
14
1
Grundlagen
2
Die ersten Gehversuche
3
Laufen lernen
4
Ein wenig Theorie
5
Tabellen und ihre Datentypen
6
Erweiterte Anweisungen
7
Datenbankadministration
8
PHP und MySQL
9
Perl und MySQL
10
C# und MySQL
11
MyODBC
12
Werkzeugbank
13
Referenz
14
Wie geht es weiter?
1
2
1
Grundlagen
3
Die Freiheit, die geht baden – dank
der Einrichtung der Datenbank.
Modernes Graffiti
4
5
Die nächsten Seiten werden ein wenig »grau« sein und mehr Theorie als Praxis
vermitteln, aber ich habe mich bemüht, Ihnen dies so gut wie möglich aufzubereiten.
1.1
6
7
Datenbanken
8
Die Entwicklung der Datenbanksysteme geht eng einher mit der Verbreitung
von Computersystemen in der Wirtschaft, Wissenschaft, Verwaltung und vielen anderen Institutionen, die einen Bedarf an der Speicherung und Verwaltung großer Datenmengen haben. Die eigentliche Geburtsstunde liegt in der
Mitte der 60er-Jahre. Großrechner konnten mittlerweile industriell gefertigt
werden und schnell wurde erkannt, dass die Menge der Daten gebändigt und
geordnet werden muss. Als Form der Ordnung wurde für das erste Datenbanksystem eine hierarchische Struktur festgelegt. Bereits Leibniz1 nutzte diesen
Aufbau für seine erste Rechenmaschine. Ein Beispiel für eine solche hierarchische Struktur ist etwa das Dateisystem Ihres Computers. Mehrere Tausend
Dateien liegen auf Ihrem Rechner, unterteilt in verschiedene Verzeichnisse.
Auch diese Verzeichnisse sind häufig in anderen Verzeichnissen untergebracht,
wodurch sich die hierarchische Struktur bildet.
9
10
11
12
13
14
Frühzeitig wurde erkannt, dass diese hierarchische Datenbankform nicht mehr
ausreicht und die Grenzen rasch erreicht werden. Im Juni 1970 definiert E. F.
Codd die theoretischen Grundlagen eines neuen Datenbanksystems, das bis
heute aktuell ist: das relationale Datenbankmodell. Dieses Fundament nutzten
die IBM-Forschungslabors, um in Zusammenarbeit mit E. F. Codd und unter
dessen Federführung das erste relationale Datenbanksystem zu entwickeln.
Der Name des Systems war schlicht: System R. Eine weitere Entwicklung, die
noch heute als Standard für alle relationalen Datenbanksysteme gilt, war die
erstmalig eingeführte Datenbankabfragesprache SQL (engl. structured query
language). Mitte der 70er-Jahre wurden all diese revolutionären Entwicklungen als so genanntes ANSI-SPARC-Modell normiert.
1 Gottfried Wilhelm von Leibniz (1646-1716), deutscher Philosoph und Mathematiker und
Vordenker der Elektronik.
Datenbanken
23
Kurz nach der Normierung folgten dann ADABAS von der Software AG und
Anfang der 80er Oracle von der gleichnamigen Firma sowie SQL/DS von IBM.
Nach und nach schlossen sich immer mehr Hersteller diesem Beispiel an und
brachten im Laufe der 80er-Jahre ebenfalls relationale Datenbanksysteme
heraus, die bis heute – wenn auch in neueren Versionen – eingesetzt werden.
왘 Informix (RDS)
왘 Access (Microsoft)
왘 DBase (Borland)
왘 Gemstone
왘 DB2 (IBM)
Ende der 80er wurde SQL/DS dann von IBMs DB2 abgelöst. Erst Anfang der
90er erschienen dann MS SQL (Microsoft) und Mitte der 90er MySQL (MySQL
AB).
1.1.1
Datenbanktypen
Aufgrund verschiedener Entwicklungen im Bereich der Programmierung und
der Software haben sich sukzessive auch andere Datenbanktypen gebildet.
Neben dem relationalen Datenbanktyp werden heutzutage auch objektorientierte, objektrelationale und XML-Datenbanken eingesetzt.
Die relationalen Systeme haben Mitte der 70er-Jahre die hierarchischen Systeme abgelöst. Letztere ordnen Daten in einer so genannten Baumstruktur und
folgen somit einem gegenteiligen Ansatz im Vergleich zu relationalen Systemen. Bei relationalen Systemen werden strukturgleiche Daten in einer flachen
(zweidimensionalen) Tabelle gespeichert. Sie können sich dies am besten
anhand einer Adressliste unter Excel vorstellen. Alle Adressen Ihrer Verwandten, Freunde, Bekannten und Geschäftspartner weisen die gleiche Struktur auf.
In der Regel besteht eine solche Adresse aus einem Namen, einer Anschrift und
Telefon-, Fax- und Mobiltelefonnummer. Natürlich kann die Anzahl dieser
Informationen individuell variieren, der Aufbau einer solchen Adressliste ist
vom Prinzip her jedoch der gleiche. Die einzelnen Informationen zur Adresse
werden in Spalten getrennt notiert. Der Name bildet dann also eine Spalte, die
Anschrift ebenfalls eine und auch die Rufnummern verfügen über eine eigene
Spalte. Untereinander, also in Zeilen, werden die zusammengehörigen Daten
notiert. Für jede vollständige Adresse existiert somit eine eigene Zeile. Dieser
Struktur verdankt das relationale Datenbanksystem auch seinen Namen, denn
die einzelnen Daten stehen in Relation zueinander. Außerdem benutzen alle
relationalen Systeme dieselbe Abfragesprache: nämlich SQL.
24
Grundlagen
1
2
Die objektorientierten Systeme verdanken ihre Existenz den objektorientierten
Programmiersprachen (OOP). Beispiele für solche Sprachen sind die C-Familie
(C/C++/C#) oder auch Java. Zusammengehörige Variablen und Funktionen
werden in der OOP zu so genannten Objekten zusammengefasst. Also würde
eine Adresse mit Namen, Anschrift und Rufnummern in diesen Sprachen ein
Objekt darstellen. Der Vorteil dieser Objekte ist die sehr leicht nachvollziehbare Struktur, da alles, was logisch zusammengehört, auch programmiertechnisch zusammengenommen wird. Bei der Speicherung in relationalen Datenbanksystemen ergeben sich jedoch unschöne und störende Probleme. Zur
Speicherung eines Objekts in einer relationalen Datenbank müsste das Objekt
zuvor in seine Bestandteile (Name, Anschrift, Rufnummern) zerlegt werden
und kann erst dann in der Datenbank gespeichert werden. Das Gleiche gilt
auch für das Lesen aus solchen Datenbanken. Die einzelnen Teilinformationen
müssen nach dem Auslesen wieder in ein Objekt umgewandelt werden. Die
Lösung des Problems sind objektorientierte Datenbanksysteme. Sie erlauben
die direkte Speicherung eines Objekts, ohne es zuvor zerlegen zu müssen. Auch
das Lesen der Objekte ist ohne weitere Zwischenschritte möglich. Trotz dieses
erheblichen Vorteils der objektorientierten Datenbanksysteme für die OOP
konnten sich diese Systeme bisher nicht wirklich durchsetzen.
3
4
5
6
7
8
9
10
11
Obwohl nicht exakt definiert ist, wie objektrelationale Systeme aufgebaut sein
müssen, wurden sie in der Praxis schon umgesetzt. Grundgedanke dabei ist die
Verknüpfung der Vorteile von relationalen und objektorientierten Datenbanksystemen; und zwar die Speicherung von selbst definierten Datentypen (Objekten) in relationalen Datenbanksystemen. Letzten Endes sind objektrelationale
Datenbanksysteme jedoch nur eine Weiterentwicklung der relationalen Systeme und keine eigene Neuentwicklung.
12
13
14
In den letzten Jahren ist der Blick immer häufiger auf XML-Datenbanksysteme
gerichtet worden, da sich XML zunehmend in der IT durchsetzt. Grundgedanke
dieser Systeme ist eine hohe Performance einerseits und eine große Flexibilität
andererseits. Als Format werden dabei XML-Dokumente eingesetzt, die eine
ähnliche Struktur wie relationale Datenbanksysteme erlauben. Häufig erfolgt
die Umsetzung solcher Systeme durch eine Erweiterung für objektrelationale
Datenbanksysteme wie Oracle 9i oder SQL Server 2002. Es gibt jedoch auch
relationale Datenbanksysteme, die vollständig auf XML basieren und keine
zusätzliche Erweiterung benötigen.
SQL-Datenbanksysteme sind lediglich ein Oberbegriff für Datenbanksysteme,
auf die mittels SQL zugegriffen werden kann. Ursprünglich beschränkte sich
die Auswahl dabei auf relationale Datenbanksysteme, mittlerweile gehören
jedoch auch objektrelationale Datenbanksysteme zu dieser Gruppe, solange sie
die Datenbankabfragesprache SQL unterstützen.
Datenbanken
25
1.1.2
Datenbankmanagementsysteme
Umgangssprachlich bezeichnet man Datenbanksysteme wie MySQL auch einfach als Datenbank. Dies stimmt so jedoch nicht. Denn MySQL ist nicht einfach
nur eine Datenbank, sondern ein System, um Datenbanken zu verwalten, also
ein Datenbankmanagementsystem (kurz DBMS). Der Begriff »Datenbank«
bezeichnet lediglich die Gesamtheit der Tabellen, die zu einer logischen Einheit
zusammengefasst wurden. Ein DBMS verwaltet nun diese Datenbanken und
ermöglicht den Zugriff auf die Tabellen und deren Daten.
Die Hauptaufgabe dieser Datenbankmanagementsysteme liegt allerdings in der
physischen Verwaltung der Daten. Dabei sind die Bedingungen zu beachten,
die gegeben waren, als die ersten relationalen Datenbankmanagementsysteme
(RDBMS) entwickelt wurden. Heutzutage sind 512 MB Arbeitsspeicher bei
einem Heimcomputer nichts Besonderes mehr. Im Gegenteil, der Trend geht
hin zu mehr Arbeitsspeicher, größeren Festplatten (80 GB sind mittlerweile
unterer Standard) und Wechselmedien mit noch höherer Datendichte (bis zu
17 GB passen auf eine DVD). Können Sie sich noch an den Commodore C64
erinnern? Den Brotkasten? Dieser Rechner verbreitete sich 1982 wie ein Lauffeuer in den Haushalten und zog Tausende vor den angeschlossenen Fernseher.
Dieses Rechnersystem war mit einem Arbeitsspeicher von gerade einmal 64
Kilobyte ausgestattet. Heute würde das nur für ein 6-seitiges Word-Dokument
ausreichen. Auch Anfang der 70er sah das nicht anders aus. Arbeitsspeicher
war teuer und die Menge war häufig stark begrenzt, konnten mit den damaligen 16-Bit-Betriebssystemen doch gerade einmal 256 KB Speicher verwaltet
werden. In diese Bresche schlugen damals die DBMS. Sie ermöglichten die physische Verwaltung der Datenbestände an einem Stück, ohne dass der Anwender sich darum kümmern musste.
Dieser Aspekt der Datenverwaltung ist mittlerweile stark in den Hintergrund
gerückt, da Speicherplatz in Hülle und Fülle verfügbar ist. Wichtiger geworden
ist eine hohe Verarbeitungsgeschwindigkeit beim Abrufen und Einfügen von
Daten. Die Datensicherheit ist außerdem ein zentraler Punkt der DBMS.
Anhand klar definierter Regeln wird darüber gewacht, ob das Einfügen,
Ändern oder Löschen der Daten erlaubt ist oder abgelehnt wird. Bedeutungsvoll ist auch das Filtern und Sortieren der Daten. Welche Daten bekommt der
Anwender dargestellt, welche sind für ihn irrelevant? Sollen wirklich alle
10 000 Datensätze ausgegeben werden oder lediglich 10? Darüber hinaus muss
ein DBMS auch in der Lage sein, mehreren Anwendern gleichzeitig den Zugriff
auf den Datenbestand zu ermöglichen, ohne dass diese sich in die Quere kommen und eingefügte oder geänderte Daten gegenseitig überschreiben. Und all
das unter dem Gesichtspunkt, dass der Anwender in diese Prozesse nicht eingreifen muss.
26
Grundlagen
1
2
1.1.3
Lokale- und Client-Server-Datenbanksysteme
3
Neben den allgemeinen Typen wie relationale oder objektorientierte Datenbanksysteme gibt es eine zusätzliche Differenzierung, die sich auf den Aufbau
der Systeme bezieht. Man unterscheidet dabei zwischen zwei verschiedenen
Aufbauten:
4
5
왘 Lokale Datenbanksysteme
왘 Client-Server-Datenbanksysteme
6
Beide Systeme haben ihre spezifischen Vor- und Nachteile, die ich Ihnen
genauer erläutern möchte.
7
Als Windows-User sind Sie sicherlich schon irgendwann einmal über das
Microsoft-Produkt Access gestolpert. Wenn Sie sich dieses Programm genauer
angesehen haben, werden Sie festgestellt haben, dass Access ein Datenbanksystem ist. Um genauer zu sein: Access ist ein relationales Datenbanksystem, da
die Ordnung der Daten in zweidimensionalen Tabellen erfolgt. Wie bereits
erwähnt, ist auch MySQL ein relationales Datenbanksystem. Trotzdem gibt es
einen gravierenden Unterschied zwischen diesen beiden RDBMS. Access ist ein
lokales Datenbanksystem, wohingegen MySQL ein Client-Server-Datenbanksystem ist.
8
9
10
11
12
Bei lokalen Datenbanksystemen wie Access liegt die Datenbank inklusive aller
Tabellen in einer einzigen Datei, die typischerweise auf .mdb endet (Abkürzung
für Microsoft Database). Dies hat einen Vorteil: Um die Datenbank auf ein
anderes System zu übertragen, muss lediglich die Datei kopiert werden. Auch
ein Backup einer solchen Datenbank ist entsprechend einfach: kopieren und
umbenennen. Es gibt jedoch auch einen erheblichen Nachteil. Häufig werden
Datenbanken in Netzwerken eingesetzt. Damit nun mehrere Anwender auf
diese Datenbank zugreifen können, wird die Datenbank selbst (also die Datei)
zentral auf einem Rechner abgelegt. Der Zugriff erfolgt auf diese Datenbank
dann über das Netzwerk (siehe Abbildung 1.1).
13
14
Bevor der Zugriff auf eine Datenbank erfolgen kann, wird ein Datenbankmanagementsystem benötigt, das die Datenbank verwalten und den Zugriff darauf
ermöglichen kann. In Abbildung 1.1 wird die Datenbank durch einen Zylinder
dargestellt.2 Wie Sie nachvollziehen können, ist die Datenbankdatei auf Rechner A abgelegt. Bleiben wir einmal bei dem Beispiel der Access-Datenbank, so
könnte die auf Rechner A abgelegte Datenbank von diesem Typ sein. Jeder
Anwender, der nun auf diese Datenbank zugreifen will, egal von welchem
2 Ein Zylinder ist die typische Darstellungsform für eine Datenbank. Auch in anderen
Büchern oder Beschreibungen werden Sie auf eine solche symbolische Darstellung treffen.
Datenbanken
27
Rechner aus dieser Zugriff erfolgt, muss nun zuerst Microsoft Access starten.
Microsoft Access stellt in diesem Moment dann das DBMS zur Verfügung.
Erfolgen Änderungen durch die Anwender an der Datenbank, müssen die einzelnen DBMS sich untereinander abstimmen, welche Änderung wann erfolgt.
Dies kann nicht nur zu erheblichen Performance-Einbußen führen, sondern
unter Umständen sogar zu Datenverlust.
Abbildung 1.1 Lokale Datenbanksysteme
Der Aufbau der Client-Server-Datenbanksysteme ist vom vorherigen Beispiel
nicht allzu verschieden. Werfen Sie dazu einen Blick auf Abbildung 1.2.
Der Unterschied zu lokalen Datenbanksystemen fällt sofort auf. Das Datenbankmanagementsystem arbeitet auf demselben Rechner, auf dem auch die
Datenbank abgelegt ist. Alle Anwender bzw. Anwendungen, die nun Zugriff
auf die Datenbank erhalten wollen, verwenden dazu das DBMS, das auf Rechner A permanent gestartet wurde. Das DBMS verwaltet nun alle Zugriffe und
reagiert entsprechend, falls zwei oder mehr Anwender gleichzeitig denselben
Datensatz ändern möchten. Ein weiterer Vorteil gegenüber den lokalen Datenbanksystemen ist, dass nicht auf jedem Rechner das DBMS installiert werden
muss, wie es z.B. bei Access-Datenbanken der Fall ist. Einen kleinen Nachteil
hat das Ganze jedoch: Meistens ist es nicht ohne weiteres möglich, die Daten-
28
Grundlagen
1
2
bank auf einen anderen Rechner zu übertragen. Denn wo genau die Datenbanken abgelegt werden und in welcher Form, ist allein Sache des DBMS. MySQL
zählt übrigens zu der Gruppe der Client-Server-Datenbanksysteme.
3
4
5
6
7
8
9
10
11
12
13
Abbildung 1.2 Client-Server-Datenbanksysteme
1.1.4
14
Begriffsdefinition
Wenn es um Datenbanken geht, werden immer wieder verschiedene Begriffe
verwendet, welche die unterschiedlichsten Eigenschaften, Methoden oder
Prinzipien in Verbindung mit Datenbanken beschreiben. Wenn Sie möchten,
können Sie dies auch gern als Fachjargon bezeichnen. Ich werde Ihnen die
wichtigsten dieser Begriffe nun kurz erläutern und später an geeigneter Stelle
genauer darauf eingehen.
왘 Redundanz
Als Redundanz wird im Allgemeinen die Wiederholung bestimmter Daten in
einer Datenbank oder sich wiederholender Quellcode in einem Programm
bezeichnet. Ein Beispiel für Redundanz in Verbindung mit Datenbanken
wäre etwa eine Tabelle mit Büchern, in der Titel, Autor, Erscheinungsjahr
und Verlag eines Buchs gespeichert sind. Es ist immerhin durchaus möglich,
dass in der Tabelle Bücher stehen, die im selben Verlag erschienen sind.
Datenbanken
29
Wird nun zu jedem Verlag der gesamte Name gespeichert, führt dies zu
Redundanz.
왘 Inkonsistenz
Dieser Begriff ist eng verbunden mit der Redundanz, denn aus Redundanz
folgt Inkonsistenz. Stellen Sie sich vor, ein Verlag würde seinen Namen von
»Max Maier Bonn« in »MaxPaper Köln« ändern. Dies hätte zur Folge, dass
Sie bei jedem Buch, dass bei »Max Maier Bonn« erschienen ist, den Namen
des Verlags ändern müssten. Sollten Sie dabei ein Buch vergessen, sind die
Daten nicht mehr stimmig und somit inkonsistent. Welche Bedeutung dieser
Sachverhalt für Sie noch haben wird, erfahren Sie weiter unten.
왘 DBMS/RDBMS
DBMS ist die Abkürzung für Datenbankmanagementsystem und bezeichnet
den Teil eines Datenbanksystems, der sich um den Zugriff auf und die Verwaltung der Datenbank kümmert. RDBMS steht für relationales Datenbankmanagementsystem.
왘 Client und Server
Darunter wird im Allgemeinen ein Prinzip in der Informatik verstanden. Ein
Server (dt. Dienstleister) bietet verschiedene Dienste an, auf die ein Client
(dt. Mandant) Zugriff erhält. Beispielsweise ein Netzwerk mit einem Server
und mehreren Rechnern, die auf freigegebene Verzeichnisse dieses Servers
zugreifen. Ähnliches gilt auch für das Surfen im Internet. Der Browser ist der
Client und die zu öffnende Internetseite bildet – vereinfacht ausgedrückt –
den Server. Auch ein Datenbanksystem kann ein Server sein, auf den verschiedene Clients dann zugreifen können, um Daten einzufügen, zu pflegen
oder abzurufen.
1.2
Wissenswertes zu MySQL
Ich werde Ihnen vor der Installation von MySQL noch ein paar wichtige bzw.
interessante Informationen zu MySQL an die Hand geben. Vieles dürfte sich
bereits aus den vorangegangenen Seiten dieses Kapitels ergeben, anderes wiederum wurde noch nicht angesprochen.
MySQL ist ein sehr leistungsfähiges relationales Datenbanksystem, basierend
auf einer Client-Server-Struktur, und ist eines der populärsten Datenbanksysteme überhaupt. Der wesentliche Grund dafür mag sicherlich sein, dass es der
GNU General Public License (kurz GPL) unterliegt und somit für jedermann
kostenlos ist. Durch die GPL ist der Quellcode ebenfalls frei verfügbar, was zu
Portierungen des Systems auf die unterschiedlichsten Plattformen führt. Angefangen bei den bekannteren Vertretern wie Windows, UNIX/Linux und Macintosh, bis hin zu FreeBSD, Solaris und OS/2. Dies garantiert eine überaus große
30
Grundlagen
1
2
Portabilität, die bei vielen kommerziellen Systemen wie Oracle oder MSQL
fehlt. Aufgrund der hohen Performance wird es auch gerade im Zusammenhang mit datenbankgestützten Webseiten eingesetzt, dabei hauptsächlich in
Verbindung mit Windows und Linux.
3
4
Es gibt jedoch noch mehr Eigenschaften, die MySQL gerade für kleinere bis
mittlere Projekte attraktiv machen. Neben der bereits erwähnten Portabilität
und Client-Server-Struktur ist z.B. die Unterstützung der ODBC-Schnittstelle3
zu erwähnen. Diese Schnittstelle ist unter Windows verbreitet und bietet
einem Client die Möglichkeit, auf eine beliebige Datenbank zuzugreifen, ohne
genau wissen zu müssen, welche Datenbank dies ist. Lediglich der Schnittstellentreiber muss gewählt und ein paar kleinere Einstellungen müssen vorgenommen werden. Im Praxisteil werde ich auf MyODBC (so nennt sich die
MySQL-ODBC-Schnittstelle) noch genauer eingehen.
5
6
7
8
9
Auch die Leistungswerte sind hervorragend. So kann MySQL problemlos mit
größeren Mengen von Datensätzen umgehen und diese verwalten, ohne dass
Einbußen in der Geschwindigkeit hinzunehmen wären. Dies geht jedoch zum
Teil auf Kosten der Funktionsvielfalt. Nicht alles, was die größeren Brüder wie
z.B. Oracle oder MSSQL können, ist auch mit MySQL möglich. Dieser Umstand
ist ein erheblicher Streitpunkt und teilt das Lager in zwei Hälften: die einen, die
mit diesem Manko leben können und dafür die Vorzüge der Geschwindigkeit
nutzen, und die anderen, die MySQL links liegen lassen und zu den meist sehr
viel teureren, aber bezüglich der Funktionen umfangreicheren Vertretern greifen. Zu diesem Thema hat sich jedoch seit Einführung der Version 4.0 von
MySQL eine Menge getan. Welche Neuerungen dies im Einzelnen sind, erfahren Sie weiter unten.
10
11
12
13
14
Sollten Sie schon einmal Microsoft Access verwendet haben, ist Ihnen sicherlich der simple Passwortschutz bekannt, den Sie für eine Datenbank aktivieren
können. In MySQL ist hingegen eine komplexe Benutzerverwaltung implementiert. Sie können mehrere Benutzer anlegen, diese mit unterschiedlichen
Zugriffsrechten versehen und den Zugriff im Netzwerk auch auf bestimmte
Rechner beschränken. Wie dies genau funktioniert und welche Schritte dafür
nötig sind, werde ich später erläutern.
Wie bereits erwähnt, unterliegt MySQL der GNU General Public License (GPL).
Den genauen Wortlaut dieser Lizenz können Sie unter http://www.gnu.de/
gpl-ger.html einsehen. Zusammengefasst bedeutet dies für Sie als Anwender,
dass Sie MySQL sowohl privat als auch kommerziell kostenlos einsetzen können, jedoch die Beschränkungen durch die GPL beachten müssen. Dabei ist ein
3 Abkürzung für engl. open database connectivity.
Wissenswertes zu MySQL
31
Punkt ganz besonders hervorzuheben. Es besteht keinerlei Gewährleistungsanspruch für das Programm durch den oder die Autoren, da das Programm (wie
alle Programme, die der GPL unterliegen) »wie es ist« zur Verfügung gestellt
wird. Darüber hinaus übernehmen die Autoren der Software keinerlei Haftung
für Schäden, die durch den Einsatz des Programms entstanden sind. Vergleichen Sie dazu auch die Paragraphen 11 und 12 der GNU General Public
License.
1.2.1
Softwareanforderungen
Je nachdem, welche Installationsform Sie wählen, benötigen Sie neben einem
Betriebssystem auch zusätzliche andere Werkzeuge, um MySQL zu installieren.
Folgende Betriebssysteme sind für den Einsatz von MySQL geeignet (in alphabetischer Reihenfolge):
왘 AIX 4.x
왘 Amiga
왘 BSDI 2.x, 3.0, 3.1 und 4.x
왘 FreeBSD 2.x, 3.x und 4.x
왘 HP-UX 10.20 und 11.x
왘 Linux ab 2.0
왘 Max OS X Server
왘 NetBSB 1.3 und 1.4
왘 OpenBSD
왘 OS/2 Warp 3 und 4
왘 Solaris ab 2.5
왘 SunOS 4.x
왘 Tru64
왘 Windows 95/98/Me, Windows NT/2000/XP/Server 2003
Zwar sind Installation und Betrieb von MySQL auf Basis eines der eben
genannten Betriebssysteme ohne weiteres möglich, nicht alle Systeme bieten
jedoch eine ausreichende Stabilität für den Produktiveinsatz. Geht es z.B. um
den dauerhaften Einsatz im Internet als Datenbanksystem für einen Webserver,
sollte als Basis auf jeden Fall Linux verwendet werden, da dieses von Hause aus
eine hohe Stabilität nachweisen kann. Abzuraten ist von Windows 95/98/Me,
da diese drei Windows-Versionen nicht für den Dauereinsatz entwickelt wurden und häufig nach einer gewissen Zeitspanne zu Abstürzen neigen. Zum Testen und Entwickeln ist Stabilität jedoch ein nebensächlicher Faktor und so
kann diesbezüglich auch zu Windows 9x gegriffen werden.
32
Grundlagen
1
2
Da es unter Linux typisch ist, dass Programme vor der Installation zunächst einmal kompiliert4 werden müssen, werden verschiedene zusätzliche Programme
benötigt, z.B. ein Compiler.
3
4
왘 GNU Autoconf
왘 GNU GZIP – zum Entpacken der MySQL-Distribution
5
왘 TAR – ebenfalls zum Entpacken der MySQL-Distribution
왘 ANSI C(++) Compiler – z.B. gcc ab der Version 2.7+, um MySQL zu kompi-
6
lieren
왘 make – am besten GNU make
7
왘 GNU FLEX und GNU YACC oder statt dessen GNU Bison
8
Den meisten UNIX/Linux-Derivaten sollten die eben genannten Programme
und Werkzeuge jedoch schon seit der Installation der Distribution beiliegen.
Andernfalls lassen sich diese durch das Setup-Programm nachinstallieren. Für
die meisten anderen Systeme gibt es MySQL in einer so genannten Binärdistribution. Diese ist bereits vorkompiliert und wird durch ein beiliegendes SetupProgramm auf dem Rechner installiert.
9
10
11
1.2.2
Hardwareanforderungen
12
Obwohl MySQL von seinem Speicherverbrauch – aufgrund seiner Kompaktheit
– sehr genügsam ist, sind bei der Hardware jedoch gewisse Mindestvoraussetzungen zu erfüllen.
13
Als Mindestmaß gelten für Linux und für Windows ein 133-MHz-Prozessor
und wenigstens 64 MB Arbeitsspeicher. Alles, was unter dieser Grenze liegt,
kann sowohl im Testeinsatz als auch im Produktivbetrieb zu Problemen führen.
Dies macht sich in hohen Ausführungszeiten der Abfragen bemerkbar. Für
MySQL bis zur Version 3.23 werden außerdem ca. 30 MB und für die Version
ab 4.x ca. 50 MB freier Festplattenspeicher benötigt. Wie gesagt, dies ist die
untere Grenze. Erst ab einem 400-MHz-Prozessor und 128 MB Arbeitsspeicher
wird die Performance von MySQL erträglich, sodass auch größere Datenmengen behandelt werden können.
14
Nach oben hin sind keine Grenzen gesetzt. Je mehr, desto besser. Vor allem
Windows sei hier als wahrer Ressourcenfresser genannt. Während die vorangegangenen Leistungsmerkmale noch mit Windows 95/98/Me und NT4 konform
gehen, sind sowohl Windows 2000 als auch Windows XP wesentlich hungriger. Allein Windows XP verlangt für einen reibungslosen Einsatz mindestens
4 Unter Kompilieren versteht man das Umwandeln der Quellcodes in eine für das System
verständliche Sprache.
Wissenswertes zu MySQL
33
256 MB Arbeitsspeicher. Darüber hinaus sollte auch beachtet werden, dass
jedes Programm, das als Dienst oder normale Anwendung auf dem System
läuft, ebenfalls an die Leistungsreserven des Rechners geht. Linux-User können
sich einmal mehr freuen, dass ihr Betriebssystem – genauso wie MySQL – sehr
bescheiden ist, was die Anforderungen an die Hardware betrifft. Denken Sie
auch daran, ein wenig Platz auf den Festplatten bereitzuhalten, damit die
Daten, die in den Datenbanken gespeichert werden, auch auf der Platte abgelegt werden können.
1.2.3
Versionshistorie
Das erste Mal, dass MySQL in Erscheinung trat, das war 1995 in der Version
1.0. Hauptgrund für die Entwicklung von MySQL war – und ist noch immer –
der Einsatz für datenbankgestützte Webseiten. Mit der steigenden Popularität
des World Wide Webs entstand auch das Bedürfnis nach einem preiswerten,
flexiblen und netzwerkfähigen Datenbanksystem. Preiswert, da kleine Firmen
und Universitäten nicht über die finanziellen Mittel verfügten, auf die größeren und teureren Pendants zurückzugreifen. Flexibel, weil die leistungsfähigeren Systeme zu komplex und dadurch nicht besonders gut oder nur schwer
anpassungsfähig und erweiterbar waren. Als Alternative blieb da häufig nur
Microsoft Access oder Borlands Paradox. Beide Datenbanken sind jedoch nicht
netzwerkfähig und erlauben auch nur in begrenzten Maßen den gleichzeitigen
Zugriff mehrerer Anwender. Vor MySQL versuchten bereits andere Datenbanksysteme diese Nachfrage zu befriedigen. Wurden jedoch die Abfragen zu komplex (ab 1 000 Datensätze), quittierten diese Systeme dies mit drastisch reduzierter Verarbeitungsgeschwindigkeit. Außerdem war MySQL schon in der
Version 1.0 in der Lage, mehrere Prozesse (Threads) zur gleichen Zeit zu verarbeiten, und stand darüber hinaus quelloffen im Internet zur Verfügung.
Den eigentlichen Durchbruch schaffte MySQL erst mit der Version 3.x. Bis dato
konnte es aber bereits den Titel »meistgenutztes Datenbanksystem im Internet«
für sich gewinnen. Diese überlegene Position erreichte MySQL zum einen
durch die Tatsache, dass es Open Source ist, und zum anderen durch die hohe
Performance, die es im Zusammenhang mit Linux liefert. Letzteres gilt als das
Betriebssystem schlechthin für die Vielzahl der Webserver, und MySQL nutzte
somit die Gunst der Stunde. Neben den vielen Firmen- und Universitätswebservern dürfen auch die Server der Webhoster nicht außer Acht gelassen werden. Da diese MySQL als Datenbanksystem für ihre Kunden zur Verfügung stellen, erreichte die Welle nun auch die heimischen PCs.
Bereits seit Oktober 2001 gab es eine so genannte Entwicklerversion von
MySQL. In einem kurz darauf folgenden Vergleichstest Anfang 2002 konnte
34
Grundlagen
1
2
MySQL seine hohe Leistung und Skalierbarkeit unter Beweis stellen und
erreichte dabei das Niveau von Oracle 9i. Erst seit März 2003 besitzt MySQL
den Status »Production« und ist somit reif für den Produktiveinsatz. Die genaue
Versionsnummer: 4.0.12. Unter der Haube von MySQL hat sich dabei eine
Menge getan und viele Argumente, die von Anwendern vorgebracht wurden,
die MySQL eher ablehnend gegenüber stehen, greifen nun nicht mehr. Die
wichtigsten Neuerungen sind:
3
4
5
왘 MySQL speichert nun sich häufig wiederholende Abfragen in einem Zwi-
6
schenspeicher, wodurch die Performance des Systems erheblich gesteigert
werden konnte.
7
왘 MySQL unterstützt nun die so genannten Subselects. Auf diese werden wir
8
später noch genauer eingehen.
왘 Die Portierung von anderen Datenbanken auf MySQL wurde vereinfacht.
9
Im Laufe dieses Buchs werde ich zwei unterschiedliche Versionen von MySQL
behandeln. Zum einen die Version 3.23.57. Dies ist die letzte Produktivversion
der 3.x-Reihe. Der Grund dafür ist, dass viele Webhoster noch nicht auf
MySQL 4.x umgestiegen sind. Zum anderen werde ich auch auf die Version
4.0.13 genauer eingehen. Dies ist bei Drucklegung dieses Buchs die aktuellste
4er-Version. Sowohl die Version 3.23.57 als auch die Version 4.0.13 sind in
Varianten für Linux, Mac OS X und Windows verfügbar.
1.2.4
10
11
12
Bezugsquellen
13
Die wichtigste Bezugsquelle für MySQL ist sicherlich das Internet. Dort werden
Sie immer die aktuellsten, aber auch die älteren Versionen finden können. Die
Adresse für den Download lautet:
14
http://www.mysql.de/downloads/index.html
Auf der dem Buch beiliegenden CD-ROM finden Sie ebenfalls unterschiedliche
Versionen von MySQL: sowohl die Versionen 4.0.13 als auch die Version
3.23.57 für die Plattformen Windows, Linux und Mac OS X. Nutzen Sie dazu
entweder das HTML-Frontend der CD-ROM, um die für Sie korrekte Version zu
finden, oder durchsuchen Sie das Verzeichnis x:\mysql von Hand. Ersetzen Sie
das x dabei entweder durch den Laufwerksbuchstaben Ihres CD-ROM-Laufwerks (Windows) oder durch den entsprechenden Knoten (Mac OS X, Linux).
Häufig legen Fachzeitschriften die neuesten Versionen von MySQL auch auf
den beiliegenden CD-ROMs ab. Sollten Sie also nicht über einen schnellen
Internetzugang verfügen und eine neuere Version als die auf der Buch-CDROM verfügbaren verwenden wollen, lohnt sich ein gelegentlicher Blick in die
CD-Inhaltsverzeichnisse der bekannten Zeitschriften.
Wissenswertes zu MySQL
35
1.3
MySQL installieren und konfigurieren
Obwohl die Installation von MySQL relativ leicht von der Hand geht, kann es
hin und wieder Hürden geben, die es zu überwinden gilt. Aus diesem Grund
werde ich Ihnen in diesem Kapitel Schritt-für-Schritt-Anleitungen für die Installationen auf den Systemen Windows, Linux und Mac OS X bieten.
1.3.1
SuSE Linux 8.1
Die Installation von MySQL unter SuSE Linux 8.1 gestaltet sich vergleichsweise
einfach, wenn Sie sich des Administrationswerkzeugs YaST2 bedienen. Dieses
steht bei SuSE Linux immer zur Verfügung und ermöglicht die sehr übersichtliche Verwaltung des gesamten Systems. Sollten Sie MySQL nicht schon bei der
eigentlichen Installation von Linux mitinstalliert haben, müssen Sie dies erst
einmal nachholen. Starten Sie dazu YaST2, indem Sie auf Programm starten •
System • YaST2 klicken. Wählen Sie anschließend aus der Kategorie Software
den Eintrag Software installieren oder löschen (siehe Abbildung 1.3).
Abbildung 1.3 YaST2 Kontrollzentrum – Software installieren
Sollten Sie nicht als root angemeldet oder nicht mit Superuser-Rechten ausgestattet sein, verlangt das YaST2 nun nach dem root-Passwort. Tragen Sie es in das
36
Grundlagen
1
2
entsprechende Eingabefeld ein. Sie erhalten anschließend eine Übersicht mit
allen verfügbaren Gruppen und den installierten Paketen (siehe Abbildung 1.4).
3
4
5
6
7
8
9
10
11
12
Abbildung 1.4 YaST2 Kontrollzentrum – Paketverwaltung
13
Alle für einen Einsatz von MySQL benötigten Pakete finden Sie in der Gruppe
bzw. Selektion Einfacher Webserver. Markieren Sie diese Gruppe und scrollen
Sie in der Paketansicht zu den drei mysql-Einträgen. Aktiveren Sie die Pakete
mysql, mysql-client und mysql-shared (vor dem Eintrag muss ein Häkchen
erscheinen). Bestätigen Sie die Paketauswahl und deren Installation, indem Sie
auf die Schaltfläche Akzeptieren klicken. Je nachdem, von welchem Medium
(CD, DVD oder FTP-Server) Sie Linux installiert haben, muss die entsprechende
Quelle nun verfügbar sein.
14
Den aktuellen Installationsverlauf zeigt Ihnen YaST2 in einer entsprechenden
Ansicht (siehe Abbildung 1.5). Nachdem die Installation abgeschlossen ist,
wird das System gemäß den Anpassungen neu konfiguriert. Sobald auch dieser
Schritt beendet ist, folgt nun ein wenig Feinarbeit. Damit MySQL bei jedem
Systemstart zur Verfügung steht, muss dem System noch mitgeteilt werden,
dass es den MySQL-Server auch starten soll. Hier hilft der Runlevel-Editor. Sie
finden ihn im Kontrollzentrum in der Kategorie System (siehe Abbildung 1.6).
MySQL installieren und konfigurieren
37
Abbildung 1.5 YaST2 Kontrollzentrum – Softwareinstallation
Abbildung 1.6 YaST2 Kontrollzentrum – Runlevel-Editor
38
Grundlagen
1
2
Nach der Auswahl des Eintrags Runlevel-Editor wird dieser gestartet. Klicken
Sie in der Ansicht auf die Schaltfläche Runlevel-Eigenschaften... (siehe Abbildung 1.7).
3
4
5
6
7
8
9
10
11
12
13
Abbildung 1.7 YaST2 Kontrollzentrum – Runlevel-Eigenschaften
14
In der sich nun bietenden Ansicht können Sie dem System mitteilen, zu welcher Phase des Boot-Vorgangs die einzelnen Dienste gestartet werden sollen.
Suchen Sie in der Liste den Eintrag mysql. Standardmäßig ist dieser nach der
Installation nicht aktiviert. Markieren Sie den Eintrag (siehe Abbildung 1.8)
und klicken Sie auf die Schaltfläche Anwenden/Teilen/Zurücksetzen. Wählen
Sie in dem sich öffnenden Dropdown-Menü den Eintrag Dienst aktivieren
aus.
Sobald in der Spalte Aktiv ein Ja erscheint, können Sie den Editor durch einen
Klick auf die Schaltfläche Beenden schließen. Es erscheint ein Dialogfenster,
das Sie darauf hinweist, dass die vorgenommenen Änderungen nun gespeichert werden. Bestätigen Sie dies mit einem Klick auf die Schaltfläche Ja. Die
Dienste werden jetzt neu konfiguriert (siehe Abbildung 1.9).
MySQL installieren und konfigurieren
39
Abbildung 1.8 YaST2 Kontrollzentrum – Dienst aktivieren
Abbildung 1.9 YaST2 Kontrollzentrum – Speichern der Runlevel-Änderungen
Nach dem Speichervorgang ist es Zeit für einen Neustart des Systems, um
anschließend zu testen, ob die Installation von MySQL erfolgreich gewesen ist.
40
Grundlagen
1
2
Bestätigen Sie das Dialogfenster mit einem Klick auf die Schaltfläche OK und
starten Sie den Rechner neu. Melden Sie sich am System an, sobald der Startvorgang beendet ist, und öffnen Sie eine Konsole. Tippen Sie in der Konsole
das Kommando mysql ein. Anschließend sollte die MySQL-Konsole gestartet
und folgende Meldung ausgegeben werden:
3
4
5
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 3.23.52-log
6
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
7
mysql>
Tippen Sie nun das Kommando SHOW DATABASES; in die Konsole ein und
bestätigen Sie die Eingabe mit (¢). Die MySQL-Konsole sollte nun bei erfolgreicher Installation eine Ausgabe ähnlich der in Abbildung 1.10 erzeugen.
8
9
10
11
12
13
14
Abbildung 1.10 Ausgabe der MySQL-Konsole bei erfolgreicher Installation
Wichtig dabei ist die Angabe 2 rows in set. Den genauen Grund dafür,
warum diese Ausgabe erfolgen muss, werde ich Ihnen weiter unten noch erläutern. Falls die Ausgabe nicht erfolgt, wiederholen Sie die vorangegangenen
Schritte noch einmal.
MySQL installieren und konfigurieren
41
1.3.2
Windows
Zur Installation von MySQL unter Windows benötigen Sie lediglich eine der so
genannten Binärdistributionen. Zu beziehen sind diese entweder von der
MySQL-Webseite oder von der dem Buch beiliegenden CD-ROM. Auf Letzterer
finden Sie drei Versionen von MySQL im Verzeichnis x:\mysql\win32.
왘 mysql-3.23.57-win.zip – Version 3.23.57 mit Installationsroutine
왘 mysql-4.0.13-win.zip – Version 4.0.13 mit Installationsroutine
왘 mysql-4.0.13-win-noinstall.zip – Version 4.0.13 als Quellcode ohne Instal-
lationsroutine
Bei der nachfolgenden Installationsanleitung beziehe ich mich auf die Version
3.23.57.
Entpacken Sie das ZIP-Archiv in ein beliebiges Verzeichnis, z.B. c:\temp. Die
Dateien des Archivs werden nur für die Installation benötigt und können
danach wieder gelöscht werden. Wechseln Sie nun in das Verzeichnis, in das
Sie das Archiv entpackt haben, und doppelklicken Sie auf die Datei setup.exe.
Nachdem das Programm gestartet wurde, klicken Sie zunächst zwei Mal auf die
Schaltfläche Next >. Standardmäßig wird als Installationsziel das Verzeichnis
c:\mysql angegeben. Mit einem Klick auf Browse… können Sie dieses Verzeichnis ändern, z.B. c:\programme\mysql oder d:\mysql3. Mit OK bestätigen Sie das
neue Zielverzeichnis. Es erfolgt ein Meldungsfenster, das Sie darauf hinweist,
dass das Verzeichnis noch nicht existiert, und fragt, ob es angelegt werden soll.
Bestätigen Sie dies mit einem Klick auf die Schaltfläche Ja.
Nach einem weiteren Klick auf Next > können Sie nun die Installationsart festlegen. Folgende Varianten stehen zur Auswahl:
왘 Typical – hierbei wird das komplette Datenbanksystem installiert.
왘 Compact – es werden nur die zum Ausführen zwingend erforderlichen
Dateien installiert. Diese Variante benötigt den geringsten Speicherplatz.
왘 Custom – Sie können selbst festlegen, welche Dateien bzw. Programmpa-
kete auf der Festplatte installiert werden sollen.
Wählen Sie Variante Typical und klicken Sie erneut auf Next >. Die Installation
wird nun gestartet. Den aktuellen Verlauf können Sie anhand des Fortschrittbalkens nachvollziehen. Sobald die Installation erfolgreich abgeschlossen
wurde, beenden Sie das Installationsprogramm durch einen Klick auf die
Schaltfläche Finish. Nun können Sie auch die Dateien aus dem temporären
Verzeichnis löschen.
42
Grundlagen
1
2
3
4
5
6
7
8
9
10
Abbildung 1.11 Installation von MySQL für Windows
11
12
13
14
Abbildung 1.12 Erster Start von WinMySQLadmin
Es müssen nun noch ein paar Konfigurationsschritte vorgenommen werden.
Dabei hilft das Programm WinMySQLadmin, das Sie im Installationsverzeichnis
unter bin finden, z.B. d:\mysql\bin\winmysqladmin.exe. Öffnen Sie dieses nun
durch einen Doppelklick. Beim ersten Start dieses Tools fordert es Sie auf, einen
Benutzernamen und ein Passwort festzulegen. Diese sind frei wählbar. Den
Benutzernamen geben Sie in das Feld Username und das Passwort in das Feld
Password ein. Bestätigen Sie die Eingabe durch einen Klick auf OK. In der Systray (das ist der kleine Bereich mit verschiedenen Symbolen rechts unten neben
der Uhr) sollten Sie nun ein Ampelsymbol sehen. Klicken Sie darauf mit der
rechten Maustaste und wählen Sie aus dem sich öffnenden Kontextmenü den
Eintrag Show me aus. Damit wird die Oberfläche des Programms aufgerufen.
MySQL installieren und konfigurieren
43
Abbildung 1.13 Das Ampelsymbol in der Systray
Klicken Sie auf die Registerkarte my.ini Setup. Mit einem Klick auf die Schaltfläche Pick-up and Edit my.ini values werden die aktuellen Konfigurationseinstellungen geladen. Ersetzen Sie nun zunächst die Zeile
#language=[Installationsverzeichnis]/share/your language directory
durch
language=[Installationsverzeichnis]/share/german
Dabei müssen Sie [Installationsverzeichnis] natürlich durch den Pfad
ersetzen, unter dem Sie MySQL installiert haben. Entfernen Sie anschließend
noch das Rautezeichen # zu Beginn der Zeile
#port=3306
Die vorgenommenen Änderungen lassen sich nun durch einen Klick auf die
Schaltfläche Save Modification abspeichern. Bestätigen Sie die beiden Meldungsfenster mit Ja und OK.
Rechts oben auf der Programmoberfläche finden Sie ebenfalls ein Ampelsymbol. Zeigt dieses eine rote Ampelphase, dann klicken Sie mit der rechten Maustaste darauf und wählen Sie aus dem Kontextmenü entweder Win NT (für
Windows NT4/2000/XP) oder Win 9x (für Windows 95/98/Me). Wenn Sie
dort den Eintrag Install the service auswählen können, dann machen Sie dies
zunächst und bestätigen Sie mit einem Klick auf Ja. Nach einem weiteren Aufruf des Kontextmenüs wählen Sie den Eintrag Start the service und bestätigen
dies ebenfalls mit Ja. Das Ampelsymbol sollte nun in eine grüne Phase
umschalten. Ist dies der Fall, wurde alles korrekt installiert und konfiguriert,
andernfalls führen Sie die vorangegangenen Schritte noch einmal durch. Mit
einem weiteren Rechtsklick auf das Ampelsymbol können Sie durch die Auswahl von Hide me das Programm wieder in die Systray minimieren.
Ein letzter Test soll Gewissheit darüber verschaffen, dass der Server wirklich
korrekt funktioniert. Gehen Sie auf StartTeilenAusführen… oder drücken Sie
() + (R). Tippen Sie nun d:\mysql\bin\mysql.exe ein (angepasst an Ihren
MySQL-Installationspfad) und klicken Sie auf OK. Es wird nun die Konsole von
MySQL geöffnet, in der Sie zuerst
44
Grundlagen
1
2
USE mysql;
3
und anschließend
SHOW TABLES;
4
eingeben. Bestätigen Sie beide Eingaben jeweils mit (¢). Sie sollten in etwa die
folgende Ausgabe auf der Konsole erhalten:
5
mysql>USE mysql;
Database changed
mysql>SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv
|
| db
|
| func
|
| host
|
| tables_priv
|
| user
|
+-----------------+
6 rows in set (x.xx sec)
6
7
8
9
10
11
Ist dies der Fall, wurde MySQL korrekt installiert und konfiguriert und läuft
nun arbeitsbereit im Hintergrund. Falls Probleme auftreten, führen Sie die vorangegangenen Schritte noch einmal durch.
12
13
1.3.3
Mac OS X
14
Die eleganteste Variante, um MySQL unter Mac OS X 10.25 zu installieren, ist
die Verwendung der Package Installer-Version. Sie können diese entweder von
der MySQL-Webseite herunterladen oder Sie nehmen die Version 4.0.16, die
sich auf der beiliegenden CD-ROM im Verzeichnis x:\mysql\macosx befindet. In
diesem Verzeichnis finden Sie außerdem noch die Version 3.23.57 von MySQL.
Nach einem Doppelklick auf die Datei wird das Laufwerks-Image in das System
eingebunden und ein neues Symbol auf dem Schreibtisch erstellt. Nach einem
weiteren Doppelklick auf dieses Symbol wird das Image im Finder geöffnet
(siehe Abbildung 1.14).
Drei Dateien befinden sich in dem Image:
왘 mysql-standard-4.0.16.pkg – dieses Package installiert MySQL sowie alle
nötigen Komponenten auf der Festplatte.
5 Erst ab dieser Version lässt sich MySQL unter Mac installieren.
MySQL installieren und konfigurieren
45
왘 MySQLStartupItem.pkg – dieses Package erzeugt ein StartupItem, damit
MySQL beim nächsten Systemstart geladen wird.
왘 ReadMe.txt – in dieser Datei finden Sie einige Hinweise zur Installation.
Abbildung 1.14 Ansicht des DiskImages im Finder
Doppelklicken Sie auf die Datei mysql-standard-4.0.16.pkg, um die Installation zu starten. Sie benötigen für die Installation Root-Rechte. Geben Sie Ihr
Passwort oder gegebenenfalls einen Benutzer an, der über solche Rechte verfügt.
Bestätigen Sie die Willkommens- und die beiden nachfolgenden Meldungen
mit einem Klick auf Fortfahren. Um die Installation zu starten, müssen Sie die
Lizenzvereinbarung akzeptieren. Klicken Sie dazu auf die entsprechende Schaltfläche.
Im nächsten Schritt wählen Sie das Zielvolume aus und bestätigen dieses ebenfalls mit Fortfahren. Sobald alle diese Einstellungen vorgenommen wurden,
reicht ein Klick auf Installieren, um den Vorgang auszuführen.
Der Installer hält Sie während des gesamten Vorgangs auf dem Laufenden, welche Installationsschritte gerade ausgeführt werden. Nach dem Abschluss beenden Sie die Installation durch einen Klick auf Schließen.
Öffnen Sie nun durch einen Doppelklick das Package MySQLStartupItem.pkg.
Auch für die Installation dieses Packages benötigen Sie Root-Rechte.
46
Grundlagen
1
2
3
4
5
6
7
8
9
10
Abbildung 1.15 Installation von MySQL unter Mac OS X 10.2
11
Klicken Sie auf Fortfahren, wählen Sie anschließend das Zielvolume und bestätigen Sie dies ebenfalls mit Fortfahren, dann führen Sie die Installation durch
einen Klick auf Installieren durch. Beenden Sie den Installer am Ende mit
Schließen.
12
13
14
Abbildung 1.16 Installation des StartupItems für MySQL
MySQL installieren und konfigurieren
47
Nun müssen Sie nur noch ein paar Einstellungen vornehmen. Öffnen Sie
zunächst ein Terminal und wechseln Sie in das Verzeichnis /usr/local.
#> cd /usr/local
Führen Sie den Befehl
#> ls -al
aus. Die Ausgabe sollte in etwa Folgendes enthalten:
[emac:/usr/local] mark% ls -al
total 24
drwxr-xr-x
5 root
170 Oct 14
drwxr-xr-x 10 root
340 Oct 14
-rwxr-xr-x
1 root 6148 Oct 14
lrwxr-xr-x
1 root
45 Oct 14
4.0.16-apple-darwin6.6-powerpc
drwxr-xr-x 19 root
646 Oct 14
apple-darwin6.6-powerpc
[emac:/usr/local] mark%
13:59
11:01
11:01
13:59
.
..
.DS_Store
mysql -> mysql-standard-
13:59 mysql-standard-4.0.16-
Sollten sowohl das Verzeichnis als auch der Link auf das Verzeichnis existieren,
hat die Installation mit großer Wahrscheinlichkeit funktioniert. Führen Sie nun
den nachfolgenden Befehl aus, um den Server zu starten:
#> sudo /Library/StartupItems/MySQL/MySQL start
Sie sollten eine Aufforderung zur Eingabe des Root-Passworts erhalten und
anschließend die Meldung
Starting MySQL database server
Gratulation! MySQL wurde installiert und der Server gestartet. Um sich in
Zukunft einige Tipparbeiten im Terminal zu ersparen, ist es sinnvoll, sich noch
ein paar Aliasnamen anzulegen. Geben Sie im Root-Verzeichnis / folgende
Befehle ein (siehe Abbildung 1.4):
#> alias mysql '/usr/local/mysql/bin/mysql'
#> alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
Nun können Sie die MySQL-Konsole bequem aus dem Root-Verzeichnis heraus
mit dem Befehl
#> ./mysql
öffnen. Machen Sie das jetzt einmal! Die Konsole öffnet sich anschließend.
Geben Sie nun
mysql> status;
48
Grundlagen
1
2
ein. Entspricht die Ausgabe der aus Abbildung 1.5, dann war nicht nur die
Installation erfolgreich, sondern auch der Server läuft einwandfrei.
3
4
5
6
7
8
9
10
Abbildung 1.17 Verkürzte Wege
11
12
13
14
Abbildung 1.18 Testen der Installation und des Servers
MySQL installieren und konfigurieren
49
1.4
Zusammenfassung
왘 MySQL ist ein relationales Datenbankmanagementsystem.
왘 Es gibt lokale und Client-Server-Datenbanksysteme.
왘 MySQL ist als Open Source für alle gängigen Betriebssysteme wie Windows,
Linux und Mac OS X verfügbar.
1.5
Fragen und Übungen
1. Worin liegt der Unterschied zwischen lokalen und Client-Server-Datenbanksystemen?
2. Was ist Redundanz?
3. Was entsteht durch Redundanz?
4. Welche Datenbanktypen gibt es?
50
Grundlagen
1
2
2 Die ersten
Gehversuche
3
4
5
2.1
Die MySQL-Konsole ................................................ 53
2.2
Testdatenbank einrichten ........................................ 57
2.3
Einfache Abfragen ................................................... 58
2.4
Datensätze einfügen ................................................ 61
8
2.5
Datensätze löschen ................................................. 65
9
2.6
Bedingungen ........................................................... 67
10
2.7
Zusammenfassung ................................................... 70
11
2.8
Fragen und Übungen ............................................... 71
6
7
12
13
14
1
Grundlagen
2
Die ersten Gehversuche
3
Laufen lernen
4
Ein wenig Theorie
5
Tabellen und ihre Datentypen
6
Erweiterte Anweisungen
7
Datenbankadministration
8
PHP und MySQL
9
Perl und MySQL
10
C# und MySQL
11
MyODBC
12
Werkzeugbank
13
Referenz
14
Wie geht es weiter?
1
2
2
Die ersten Gehversuche
3
Aller Anfang ist schwer. Was das Ende auch nicht leichter macht.
Walter Ludin (*1945), Schweizer Journalist
4
5
Aller Anfang ist schwer. Damit dieser aber für Sie so einfach wie möglich wird,
erhalten Sie in diesem Kapitel zu Beginn eine Einführung in das wichtigste
Hilfsmittel, das für MySQL existiert: die Konsole. Nach der Einweisung in den
Umgang mit der Konsole folgt dann das Einrichten der Testdatenbank.
Anschließend werden Sie die erste Begegnung mit SQL-Kommandos haben und
erfahren, wie Sie mit diesen Befehlen Daten aus der MySQL-Datenbank auslesen, einfügen und löschen können.
2.1
6
7
8
9
Die MySQL-Konsole
Bereits im ersten Kapitel haben Sie auf die Konsole von MySQL zurückgegriffen, um zu testen, ob der MySQL-Server korrekt installiert wurde und arbeitsfähig ist. Die Konsole kann aber wesentlich mehr. Ähnlich wie die Eingabeaufforderung unter Windows oder die Shells unter Linux dient sie dazu, das
System vollständig zu administrieren. Um die Konsole aufzurufen, reicht unter
Linux die Eingabe von mysql in der Shell:
10
#>mysql
13
11
12
Unter Windows müssen Sie zuerst das Installationsverzeichnis von MySQL
suchen und in den Unterordner bin wechseln. Starten Sie dann das Programm
mysql.exe. Um sich das Weiterklicken durch die Verzeichnisebenen zu ersparen,
sollten Sie sich der Einfachheit halber auf dem Desktop oder im Startmenü eine
Verknüpfung anlegen. Als Verknüpfungsziel geben Sie dann den vollständigen
Pfad zur mysql.exe-Datei an, also z.B. c:\mysql\bin\mysql.exe. Abbildung 2.1
zeigt die Konsole nach dem Start.
14
Neben der Möglichkeit, alle SQL-Kommandos, die MySQL interpretieren kann,
auszuführen, akzeptiert die Konsole auch noch weitere Befehle für die Administration. Eine Übersicht dieser Befehle erhalten Sie, wenn Sie
mysql>help;
oder
mysql>\h
eintippen.
Die MySQL-Konsole
53
Abbildung 2.1 Die MySQL-Konsole nach dem Start unter Windows XP
Beachten Sie dabei, dass alle Kommandos, die nicht mit einem Backslash
beginnen, mit einem Semikolon abgeschlossen werden müssen.
Nach Eingabe einer der vorangegangenen Anweisungen gibt die Konsole eine
längere Informationsseite mit allen konsolenspezifischen Kommandos aus. Es
werden aber keine Informationen zu SQL-Anweisungen wiedergegeben (siehe
Abbildung 2.2).
Abbildung 2.2 Hilfeseite der MySQL-Konsole
In der ersten Spalte finden Sie die Bezeichnung des kompletten Kommandos,
das Sie so auch in die Konsole eingeben können und mit einem Semikolon
54
Die ersten Gehversuche
1
2
abschließen müssen. In Klammern dahinter folgt die Kurzform des Kommandos. Diese wird ohne abschließendes Semikolon eingegeben. Wie Sie sehen
können, hält die Hilfeseite jedoch nicht viele Informationen zu den einzelnen
Anweisungen bereit – sie dient eher als Gedächtnisstütze. Ich werde darum
nun genauer auf die wichtigsten Kommandos eingehen.
3
4
5
2.1.1
Hilfe
Die Hilfe zur Konsole können Sie mit vier verschiedenen Kommandos ausgeben. Einmal mit den beiden Langformen help und ?, die mit einem Semikolon
abgeschlossen werden müssen, oder mit der Kurzform \?.
6
2.1.2
8
7
Beenden
Um die Konsole wieder zu schließen, können Sie die Kommandos quit, exit
oder \q verwenden. Sie beenden damit jedoch nur die Konsole und nicht den
MySQL-Server. Genaueres zum Starten und Beenden des Servers erfahren Sie
etwas später.
10
2.1.3
11
9
Eingabeaufforderung
Standardmäßig wird als Eingabeaufforderung in der Konsole die Zeichenfolge
mysql> verwendet. Diese Aufforderung wird »Prompt« genannt. Jedes Mal,
wenn das Prompt in der Konsole erscheint, erwartet diese eine Eingabe von
Ihnen. Mittels des Befehls prompt – oder der Kurzform \R – können Sie die Zeichenfolge des Prompts verändern. Übergeben Sie die Zeichenfolge für das neue
Prompt als Argument, indem Sie sie durch ein Leerzeichen getrennt an den
Befehl anhängen und mit einem Semikolon abschließen. Würden Sie z.B. die
Anweisung prompt befehl>; eingeben, würde jede nachfolgende Eingabeaufforderung mit befehl> symbolisiert werden.
2.1.4
12
13
14
Serverstatus
Detaillierte Informationen über den Status des Servers erhalten Sie über den
Befehl status oder die Kurform \s. Das Ergebnis liefert mehr Auskünfte als
auf den ersten Blick sichtbar. Ein Beispiel für eine solche Statusausgabe finden
Sie in Abbildung 2.3.
Die Connection id gibt eine eindeutige Nummer für eine Verbindung an. In
der Beispiel-Abbildung ist dies die 2. Anhand dieser ID können Sie mit einem
entsprechenden Tool die Verbindung zur Datenbank trennen.
Die MySQL-Konsole
55
Abbildung 2.3 Beispiel-Ausgabe des status-Befehls
Das Feld Current database gibt den Bezeichner der aktuell ausgewählten
Datenbank an. Dies ist häufig sehr hilfreich, wenn Sie längere Zeit nicht mit der
Konsole gearbeitet haben (z.B. aufgrund einer längeren Kaffeepause) und nicht
mehr wissen, an welcher Datenbank Sie zuletzt gearbeitet haben. Sie können
sich so enorme Schwierigkeiten ersparen, falls Sie Datensätze löschen möchten
und dummerweise die falsche Datenbank ausgewählt haben.
Das Feld Current user gibt an, unter welcher Benutzerkennung und von welchem Rechner aus Sie sich gerade am Datenbankserver angemeldet haben.
Die Version des Servers erfahren Sie anhand des Felds Server version. In diesem Fall ist es die Windows NT-Version (erkennbar am angehängten nt) 4.0.13.
Wie lange der Server schon läuft, erfahren Sie mittels des Felds Uptime. In der
Beispiel-Abbildung wurde der Server vor 55 Minuten und 7 Sekunden gestartet.
In den beiden letzten Zeilen folgen weitere interessante Informationen. So gibt
Threads die Anzahl der gerade aktiven Verbindungen zum Server an, Questions die Anzahl der Anfragen, die seit dem Start des Servers gestellt wurden,
und Queries per second avg die durchschnittliche Anzahl der Anfragen pro
Sekunde.
2.1.5
SQL-Befehlsdatei ausführen
Häufiger kann es vorkommen, dass Sie eine Textdatei besitzen, in der verschiedene SQL-Kommandos notiert wurden. Das können Kommandos zum Erzeugen von Datenbanken und Tabellen sein, das Einfügen von Datensätzen usw.
Dies ist meistens bei Im- und Exporten von Datenbanken der Fall. Um eine solche Datei auszuführen, können Sie den Namen der Datei als Argument an das
56
Die ersten Gehversuche
1
2
Kommando source oder dessen Kurzform \. übergeben. Die Anweisung
source d:/import.sql; würde die Datei import.sql öffnen und alle darin enthaltenen Kommandos ausführen.
3
4
2.2
Testdatenbank einrichten
5
Für die nachfolgenden Kapitel wird zum Testen der Abfragen eine Datenbank
benötigt. Damit Sie diese Datenbank nun nicht komplett selbstständig anlegen
müssen, finden Sie auf der beiliegenden CD-ROM eine SQL-Kommandodatei.
Sie liegt im Verzeichnis testdb und heißt mylibrary_1.sql. Diese Datei enthält
alle Kommandos, die benötigt werden, um die Datenbank mylibrary sowie
die Tabelle books anzulegen und die Tabelle mit ersten Datensätzen zu füllen.
6
7
8
Kopieren Sie die Datei x:\testdb\mylibrary_1.sql zunächst auf die Festplatte. Das
Zielverzeichnis ist relativ egal, Sie sollten sich jedoch auf jeden Fall den vollständigen Pfad merken. Am einfachsten ist es, die Kommandodatei in das Wurzelverzeichnis Ihrer MySQL-Installation zu kopieren, z.B. d:\mysql.
9
10
Sobald Sie die Datei kopiert haben, öffnen Sie die MySQL-Konsole. Die Kommandodatei muss nun ausgeführt werden. Der Konsolenbefehl, der dafür
benötigt wird, lautet source. Durch ein Leerzeichen getrennt wird dem Befehl
der Pfadname einer SQL-Kommandodatei übergeben. Es müssen jedoch einige
Regeln beachtet werden:
11
12
왘 Anstatt des unter Windows typischen Backslashs bei Datei- und Pfadanga-
13
ben muss ein normaler Schrägstrich notiert werden.
왘 Notieren Sie nach Möglichkeit immer den vollständigen Pfad. Es kann
14
ansonsten zu Fehlern kommen.
Nehmen Sie folgende Eingabe in der Konsole vor und bestätigen Sie mit (¢).
Den Pfad zur Datei müssen Sie natürlich an Ihre Gegebenheiten anpassen.
Haben Sie die Kommandodatei beispielsweise im Verzeichnis c:\ abgelegt, so
muss der Pfad zur Datei c:/mylibrary_1.sql lauten.
mysql>source c:/mysql/mylibrary_1.sql;
Die Konsole wird nun versuchen, die Datei zu öffnen und die enthaltenen
Kommandos auszuführen. Ob dies erfolgreich war, müssen Sie anhand der
Ausgabe der Konsole ermitteln. Eine korrekte Ausführung der Datei sollte von
der Konsole folgendermaßen quittiert werden:
Query OK, 1 rows affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.05 sec)
Query OK, 1 rows affected (0.01 sec)
Testdatenbank einrichten
57
1
2
3 Laufen lernen
3
4
3.1
Mit PHP ................................................................... 75
3.2
Mit Perl ................................................................... 84
3.3
Mit C# ..................................................................... 92
3.4
Zusammenfassung ................................................... 99
7
3.5
Fragen und Übungen ............................................... 100
8
5
6
9
10
11
12
13
14
1
Grundlagen
2
Die ersten Gehversuche
3
Laufen lernen
4
Ein wenig Theorie
5
Tabellen und ihre Datentypen
6
Erweiterte Anweisungen
7
Datenbankadministration
8
PHP und MySQL
9
Perl und MySQL
10
C# und MySQL
11
MyODBC
12
Werkzeugbank
13
Referenz
14
Wie geht es weiter?
1
2
3
Laufen lernen
3
Die Liebe zum Autofahren beweist, dass der Mensch das Laufenlernen bereut hat.
Unbekannt
4
5
Dieses Buch ermöglicht Ihnen den Einstieg in MySQL anhand praktischer Beispiele. Die Ausgabe der Abfragen auf der Konsole ist aber in der Praxis kaum
nutzbar. Es wäre einem Anwender nicht zumutbar, seine Kontakte mit allen
Daten wie Name, Anschrift und Telefonnummern über die Konsole in die
Datenbank einzupflegen und dann per SELECT-Anweisung die Kontakte wieder
auszulesen.
6
Gefragt ist also eine Programmiersprache, mit der anwenderfreundliche Oberflächen gestaltet werden können und darüber hinaus die Verwaltung der Daten
leicht und übersichtlich ermöglicht wird, ohne dass sich der Anwender mit der
SQL-Syntax herumquälen muss. Letzteres ist immerhin Ihre Aufgabe!
9
7
8
10
11
Je nachdem, welche Programmiersprache Sie dabei verwenden möchten, verlaufen der Aufbau der Verbindung zum Datenbankserver, das Übergeben der
Anfragen und gegebenenfalls das Auslesen der Ergebnistabelle1 auf unterschiedliche Art und Weise.
12
13
Das nachfolgende Kapitel wird Ihnen die entsprechenden Funktionen und
Methoden vorstellen, wie Sie mittels der Sprachen PHP, Perl und C# die Kommunikation mit dem Datenbankserver MySQL umsetzen können. Dabei werden die Varianten durch direkte API-Aufrufe2 und die Verwendung der offenen
Datenbankschnittstelle ODBC (open database connectivity) vorgestellt.
3.1
14
Mit PHP
Für die Verbindung zwischen PHP und einem MySQL-Server werden in der
Regel die in PHP integrierten Funktionen verwendet. Diese basieren auf der
von MySQL AB (dem Hersteller von MySQL) herausgegebenen Funktionsbibliothek und stellen somit die optimale Möglichkeit dar, um auf einen MySQLServer zuzugreifen. Diese Funktionen lassen sich in PHP relativ leicht erkennen: Sie beginnen alle mit mysql_.
1 Als Ergebnistabelle wird das Ergebnis einer SELECT-Anweisung bezeichnet. Sie stellt
sozusagen eine temporäre Tabelle für die ausgelesenen Datensätze dar.
2 API ist die Abkürzung für application programming interface und stellt quasi eine offene
Schnittstelle dar, die von einem Programm mitgeliefert wird.
Mit PHP
75
Ein weiterer Vorteil bei der Verwendung dieser Funktionen ist, dass keine weiteren Bibliotheken zur Laufzeit des Skripts mit eingebunden werden müssen.
Die entsprechende Bibliothek ist in jedem Skript sofort verfügbar.
3.1.1
Verbindung herstellen
Die Verbindung zum Server wird bei PHP mit der Funktion mysql_connect
hergestellt. Sie versucht anhand der als Parameter übergebenen Werte, den Server anzusprechen und eine Verbindung aufzubauen. War der Versuch erfolgreich, gibt die Funktion eine Verbindungskennung zurück, die auch als
Resource-ID bezeichnet wird. Schlägt der Versuch fehl, ist der Rückgabewert
FALSE und je nach Einstellung in der Konfigurationsdatei wird eine entsprechende Fehlermeldung ausgegeben.
Im Laufe der verschiedenen Versionen und Verbesserungen von PHP wurde
diese Funktion um einige Parameter erweitert. Aus Gründen der Kompatibilität
gehe ich aber nur von der einfachsten Form der Funktion aus. Die Syntax ist
somit für alle PHP-Versionen ab 3.0 gleich und sieht folgendermaßen aus:
resource mysql_connect([string server[, string username
[, string password]]])
Wie Sie feststellen können, sind alle drei Parameter der Funktion optional. Der
Grund ist, dass fehlende Parameter durch Standardwerte ersetzt werden. Dies
ist deshalb möglich, weil der MySQL-Server und PHP in der Regel auf ein und
demselben System installiert sind, z.B. bei einem Webserver. Werden keine
Parameter übergeben, geht die Funktion also davon aus, dass der MySQL-Server auf dem Rechner läuft, auf dem auch das PHP-Skript ausgeführt wird, also
dem localhost. Standardmäßig ist der Port, an dem der MySQL-Server lauscht,
der Port 3306, es sei denn, Sie haben in der Konfigurationsdatei des MySQLServers einen anderen Wert eingetragen. Der Standardwert für den Parameter
server lautet also localhost:3306.
Der Parameter username verfügt auch über einen Standardwert, der jedoch
variabel ist. Er ist abhängig davon, welchem Benutzer der Serverprozess
gehört. Hat also der Benutzer abc den Server gestartet, wird auch der Benutzer
abc als Wert für den Parameter username verwendet. Der Parameter password
hingegen ist in der Standardeinstellung immer leer.
Die kürzeste Variante, um eine Verbindung zum MySQL-Server herzustellen,
wäre es also, lediglich den Funktionsnamen inklusive der runden Klammern zu
notieren und den Rückgabewert der Funktion entgegenzunehmen.
$connection = mysql_connect();
76
Laufen lernen
1
2
Dies ist aber bei weitem nicht die beste Lösung. Auch wenn der MySQL-Server
auf dem gleichen System wie das PHP-Skript ausgeführt wird, sollten Sie die
entsprechenden Parameter übergeben. Sie können dann später Anpassungen
am Skript schneller vornehmen, falls sich einmal Änderungen ergeben, z.B.
wenn der Port des MySQL-Servers geändert wurde oder der Server auf einem
ganz anderen Rechner läuft.
3
4
5
$connection = mysql_connect('localhost:3306','','');
6
Listing 3.1 Verbindungsaufbau zu einem MySQL-Server
Wie Listing 3.1 zeigt, muss in der Standardkonfiguration des Servers weder ein
Benutzername noch ein Kennwort festgelegt werden. Aus diesem Grund wurden leere Zeichenketten für die Parameter username und password an die
Funktion übergeben.
7
Die höchste Flexibilität erreichen Sie, wenn Sie die Verbindungsinformationen
in einer zentralen Datei speichern. Diese Datei muss dann lediglich noch in das
Skript eingebunden werden.
9
8
10
<?php
$db_host = 'localhost:3306';
$db_user = '';
$db_pass = '';
?>
11
12
Listing 3.2 Beispiel für eine zentrale Konfigurationsdatei
13
<?php
include_once('db_config.inc.php');
$connection = mysql_connect($db_host,$db_user,$db_pass);
// ...
?>
14
Listing 3.3 Verbindungsaufbau zur Datenbank mit zentraler Konfigurationsdatei
Das Listing 3.2 zeigt den Inhalt der Konfigurationsdatei db_config.inc.php. Diese
Datei wird in Listing 3.3 dann mittels include_once in das Skript eingebunden, das die Verbindung zum Server aufbauen möchte. Alle Änderungen, die
sich für die Serveradresse und den -port sowie für Benutzernamen und Kennwort ergeben, müssen lediglich in der db_config.inc.php eingetragen werden,
und alle Skripte, die diese Datei einbinden, sind über die neuesten Änderungen
informiert.
Je nachdem, ob die Verbindung zum Server aufgebaut werden konnte, verfügt
die Variable $connection über einen anderen Wert. Bevor nun weitere Funk-
Mit PHP
77
tionen aufgerufen werden, die eine Verbindung zum Server erfordern, sollte
der Wert von $connection überprüft werden. Zur Überprüfung eignet sich ein
einfaches if-Konstrukt. In Listing 3.4 können Sie das um das if-Konstrukt
erweiterte Skript aus Listing 3.3 sehen.
<?php
include_once('db_config.inc.php');
$connection = mysql_connect($db_host,$db_user,$db_pass);
if($connection)
{
// ...
}
else
{
die('Es konnte keine Verbindung aufgebaut werden!');
}
?>
Listing 3.4 Beispiel für einen Verbindungsaufbau mit Überprüfung, ob die Verbindung hergestellt wurde
Das Schöne an PHP ist, dass eine if-Anweisung jeden Wert, der nicht FALSE
entspricht, als TRUE interpretiert. Somit wird der if-Anweisungsblock also nur
dann ausgeführt, wenn in $connection eine Verbindungskennung gespeichert
wurde. Hat $connection hingegen den Wert FALSE, wird die Ausführung des
Skripts mittels die unverzüglich abgebrochen.
Es gibt noch eine zweite Funktion in PHP, mit der sich eine Verbindung zum
Server aufbauen lässt: mysql_pconnect. Sie entspricht in ihrer Syntax
mysql_connect, funktioniert jedoch ein wenig anders, denn sie baut eine
dauerhafte Verbindung zum Server auf. Alle Verbindungen, die in einem
Skript mittels mysql_connect hergestellt wurden, werden nach Beenden
des Skripts wieder getrennt. Verbindungen, die mit Hilfe von mysql_pconnect hergestellt wurden, bleiben auch nach Beenden des Skripts erhalten. Je
nach Auslastung des Servers kann dies Vor- und Nachteile haben.
3.1.2
Anfrage stellen
Nachdem die Verbindung zum MySQL-Server aufgebaut wurde, können Anfragen in Form von SQL-Anweisungen gestellt werden. Bevor eine Anweisung
jedoch abgesetzt werden kann, muss noch die Datenbank ausgewählt werden,
etwa so, als würden Sie in der MySQL-Konsole den Befehl USE verwenden.
78
Laufen lernen
1
2
Auch dafür steht in PHP eine spezielle Funktion namens mysql_select_db
bereit, die folgende Syntax aufweist:
3
bool mysql_select_db(string databasename[, resource
connectionid])
4
Die Datenbank, die ausgewählt werden soll, muss als Parameter databasename
übergeben werden. Optional kann auch die Verbindungskennung als zweiter
Parameter übergeben werden. Dies ist aber nicht erforderlich, da die Funktion
immer die zuletzt geöffnete Verbindung verwendet. Sollte noch keine Verbindung bestehen, versucht die Funktion darüber hinaus automatisch, eine Verbindung aufzubauen. Dabei werden die gleichen Standardwerte wie bei der
mysql_connect-Funktion verwendet. Es ist jedoch besser, die Verbindungskennung zu übergeben, da Sie in einem Skript auch mehrere Verbindungen
zum MySQL-Server aufbauen können.
5
6
7
8
9
War die Ausführung der Funktion erfolgreich, wird der Wert TRUE zurückgegeben, andernfalls FALSE. Der Aufruf der Funktion könnte folgendermaßen aussehen:
10
$selected = mysql_select_db('mylibrary',$connection);
11
Listing 3.5 Datenbank auswählen
12
Bevor Sie irgendwelche Anfragen an die Datenbank senden, sollten Sie auf
jeden Fall den Rückgabewert der Funktion prüfen. Da Sie den zurückgegebenen Wert aber später nicht weiter benötigen, können Sie die Funktion in einem
if-Konstrukt aufrufen und prüfen. Das nachfolgende Listing entspricht dem
Listing 3.4, abgesehen davon, dass es um die Prüfung des Rückgabewerts
erweitert wurde.
13
14
<?php
include_once('db_config.inc.php');
$connection = mysql_connect($db_host,$db_user,$db_pass);
if($connection)
{
if(mysql_select_db('mylibrary',$connection))
{
// ...
}
else
{
die('Die Datenbank konnte nicht ausgewählt werden!');
}
}
else
Mit PHP
79
{
die('Es konnte keine Verbindung aufgebaut werden!');
}
?>
Listing 3.6 Auswahl der Datenbank
Außerdem empfiehlt es sich, den Bezeichner der Datenbank in einer Konfigurationsdatei zu speichern, z.B. in der db_config.inc.php. Sie umgehen so
das lästige »Suchen und Ersetzen«, falls sich der Bezeichner der Datenbank
ändern sollte.
Die Anfrage, also die SQL-Anweisung selbst, kann nach erfolgreicher Auswahl
der Datenbank nun mittels mysql_query an den Server übergeben werden.
Auch die Syntax dieses Befehls ist relativ einfach:
resource mysql_query(string query[, resource connectionid])
Die Funktion erwartet, anders als die Funktionen mysql_connect und mysql_
select_db zuvor, auf jeden Fall einen Parameter, und zwar die auszuführende
SQL-Anweisung, die als Parameter query3 übergeben wird. Es gibt also keinen
Standardwert, der verwendet werden würde, falls keine SQL-Anweisung übergeben wurde. Welche sollte das auch sein?!
Optional kann die Verbindungskennung als zweiter Parameter mit übergeben
werden. Wurde diese nicht übergeben, verwendet mysql_query ebenfalls die
zuletzt hergestellte Verbindung.
Beachten Sie bitte, dass die übergebene SQL-Anweisung nicht mit einem
Semikolon enden sollte. Nur in der Konsole müssen die Anweisungen mit
Semikolon abgeschlossen werden, damit der Interpreter das Ende der
Anweisung erkennt.
Je nachdem, ob die Anfrage erfolgreich ausgeführt werden konnte, liefert
mysql_query einen von drei Werten zurück. Der Rückgabewert ist immer dann
FALSE, wenn die Anfrage syntaktisch falsch war bzw. nicht ausgeführt werden
konnte. Der Wert TRUE wird dann zurückgegeben, wenn eine Anweisung ausgeführt wurde, die keine Ergebnistabelle erzeugt. Dies sind unter anderem
DELETE- und INSERT-Anweisungen. Eine Resource-ID hingegen wird zurückgegeben, wenn die Anweisung eine Ergebnistabelle erstellt hat; dazu zählen
SELECT-Anweisungen.
3 query = dt. Abfrage
80
Laufen lernen
1
2
Folgendermaßen könnte ein Aufruf der mysql_query-Funktion aussehen:
3
$result = mysql_query('SELECT * FROM books',$connection);
Listing 3.7 Anfrage stellen
4
Wichtig an diesem Beispiel ist, dass der Rückgabewert nicht einfach in einem
if-Konstrukt ausgewertet, sondern in der Variablen $result gespeichert wird.
Denn um eine mögliche Ergebnistabelle auslesen zu können, wird die
Resource-ID benötigt, die von mysql_query zurückgegeben wurde. Das soll Sie
aber nicht davon abhalten, den Wert von $result zu überprüfen. Das nachfolgende Listing erweitert das Listing 3.8 um die Stellung einer Anfrage und die
Überprüfung des Rückgabewerts.
5
6
7
8
<?php
include_once('db_config.inc.php');
$connection = mysql_connect($db_host,$db_user,$db_pass);
if($connection)
{
if(mysql_select_db('mylibrary',$connection))
{
$sql = 'SELECT * FROM books';
$result = mysql_query($sql,$connection);
if($result)
{
// ...
}
else
{
die('Anfrage konnte nicht ausgeführt werden!');
}
}
else
{
die('Die Datenbank konnte nicht ausgewählt werden!');
}
}
else
{
die('Es konnte keine Verbindung aufgebaut werden!');
}
?>
9
10
11
12
13
14
Listing 3.8 Anfrage an Datenbank stellen
Auch hier gilt wieder, dass es übersichtlicher ist und außerdem leichter anpassbar bleibt, wenn Sie die Anfrage zuvor zusammensetzen und in einer Variablen
Mit PHP
81
speichern (wie in Listing 3.8 die Variable $sql). Erst dann sollten Sie die SQLAnweisung an mysql_query übergeben.
3.1.3
Ergebnistabelle auslesen
Handelt es sich bei der erfolgreich ausgeführten SQL-Anweisung um eine
SELECT-Abfrage, dann können Sie die erzeugte Ergebnistabelle mittels der
Funktion mysql_fetch_row abarbeiten.
array mysql_fetch_row(resource resultid)
Die Arbeitsweise dieser Funktion ist unter Umständen ein wenig gewöhnungsbedürftig. Wie Sie sehen können, wird lediglich die Resource-ID als Parameter
resultid übergeben, die von mysql_query zurückgegeben wurde. Die Funktion mysql_fetch_row gibt anschließend ein Array zurück, das aber nur die
Felder eines einzigen Datensatzes enthält. Der Grund dafür ist, dass die Funktion sequenziell arbeitet. Sie müssen die Funktion also so lange aufrufen, bis
der Rückgabewert der Funktion FALSE ist. Am einfachsten lässt sich dies mit
einer while-Schleife realisieren. Dazu ein Beispiel:
if($result)
{
while($row = mysql_fetch_row($result))
{
// ...
}
}
Listing 3.9 while-Konstrukt zum Auslesen der Ergebnistabelle
Die while-Schleife wird ausgeführt, solange der Rückgabewert von mysql_
fetch_row nicht FALSE ist. Somit kann die komplette Ergebnistabelle nacheinander abgearbeitet werden. Das nun folgende Beispiel wurde um die Ausgabe
der Felder in HTML-Form erweitert. Der Vorteil des Beispiels aus Listing 3.9 ist,
dass die Ausgabe der Tabelle unabhängig von der Anzahl der Datensätze und
der Felder der Datensätze der Ergebnistabelle ist.
<?php
include_once('db_config.inc.php');
$connection = mysql_connect($db_host,$db_user,$db_pass);
if($connection)
{
if(mysql_select_db('mylibrary',$connection))
{
$sql = 'SELECT * FROM books';
$result = mysql_query($sql,$connection);
82
Laufen lernen
1
2
if($result)
{
echo '<table border="1">';
while($row = mysql_fetch_row($result))
{
echo '<tr>';
for($i=0; $i<count($row); $i++)
{
echo '<td>'.$row[$i].'</td>';
}
echo '</tr>';
}
echo '</table>';
}
else
{
die('Anfrage konnte nicht ausgeführt werden!');
}
3
4
5
6
7
8
9
}
else
{
die('Die Datenbank konnte nicht ausgewählt werden!');
}
10
11
}
else
{
die('Es konnte keine Verbindung aufgebaut werden!');
}
?>
12
13
14
Listing 3.10 Auslesen der Ergebnistabelle und Ausgabe im HTML-Format
Die mögliche Ausgabe im Browser, die das Skript aus Listing 3.10 erzeugt, können Sie in Abbildung 3.1 sehen. Voraussetzung zum Testen des Skripts ist
jedoch ein lauffähiger Webserver mit PHP und MySQL.
Mit PHP
83
Abbildung 3.1 Ausgabe des PHP-Skripts aus Listing 3.10 im Browser
3.2
Mit Perl
Um mit Perl auf einen MySQL-Datenbankserver zuzugreifen, ist zunächst ein
wenig Vorarbeit an der installierten Distribution notwendig. Grundsätzlich
wird für jeden Zugriff auf eine Datenbank, egal ob es sich dabei um MySQL,
Access oder PostgreSQL handelt, die Datenbankschnittstelle DBI (database
interface) benötigt. Darüber hinaus wird auch ein Datenbanktreiber für MySQL
benötigt (database driver, kurz DBD). Für MySQL ist dies DBD-mysql.
Ob die Schnittstelle installiert ist, kann mittels des PPM (programmer’s package
manager) in Erfahrung gebracht werden. Der PPM wird in aller Regel bei der
Installation von Perl ebenfalls auf dem System installiert. Sollte dies nicht der
Fall sein, dann installieren Sie ihn nach. Öffnen Sie eine Konsole und starten
Sie den PPM durch Eingabe von ppm.
#>ppm
Falls Sie sich nicht sicher sind, ob die Datenbankschnittstelle bereits installiert
ist, geben Sie
ppm>upgrade
84
Laufen lernen
4.4
Normalformen
Redundanz und die daraus folgende Inkonsistenz können die Verwendung
eines Datenbanksystems grundsätzlich entwerten. Sobald die Daten nicht mehr
stimmig sind, wird es schwer, vernünftige und korrekte Erkenntnisse aus den
Datenmengen zu gewinnen, und Berechnungen oder gar Analysen auf der Basis
inkonsistenter Daten führen so gut wie immer zu einem falschen Ergebnis.
Denken Sie daran, dass Redundanz nicht zum Schadensfall führen muss. Sie ist
lediglich die Ursache für Inkonsistenz. Wann diese jedoch eintritt, kann man
nur schwer voraussagen.
Ein Beispiel: In einer Tabelle führen Sie für einen Online-Shop alle getätigten
Bestellungen inklusive der Kundendaten und der Artikel. Bestellt ein Kunde
mehrmals, taucht sein Name auch mehrmals in der Tabelle auf. An sich ist dies
nicht unbedingt ein Problem. Zunächst einmal sind die Daten des Kunden
lediglich redundant, liegen also mehrmals vor. Was passiert jedoch, wenn sich
die Anschrift des Kunden ändert? Dann müssten alle Datensätze in der Tabelle,
die Daten zu diesem Kunden enthalten, geändert werden. Wird auch nur ein
Datensatz übersehen, dann sind die Daten inkonsistent. Müsste nun ein Artikel
einer älteren Bestellung nachgeliefert werden, könnte es passieren, dass der
Artikel an die falsche Anschrift geliefert wird und Sie Ihr Problem erst bemerken, wenn die Ware mit dem Vermerk »Unbekannt verzogen« wieder bei Ihnen
eintrifft.
Aus diesem Grund gibt es drei Normalformen, die sozusagen eine bewertete
Idealform von Tabellen und Datenbanken darstellen. In diesem Zusammenhang wird auch von Normalisierung gesprochen.
4.4.1
Erste Normalform
Die erste Normalform stellt den Idealzustand dar, den Sie auf jeden Fall mit
Ihrer Datenbank erfüllen sollten. Dabei muss folgenden Kriterien entsprochen
werden:
1. Kein Datensatz darf doppelt in einer Tabelle vorkommen.
2. Alle Datensätze müssen in sich geschlossen sein.
3. Alle Felder eines Datensatzes müssen zum gleichen Ressort gehören.
4. Die Reihenfolge der Datensätze innerhalb der Tabelle muss unwichtig sein.
Was bedeutet das nun genau? Alle Datensätze, die über identische Inhalte verglichen mit anderen Datensätzen der Tabelle verfügen, gelten als redundant. Im
oben genannten Beispiel wurde genau dieses Problem beschrieben. Die Inhalte
110
Ein wenig Theorie
1
2
des einen Datensatzes wurden geändert, bei einem oder mehreren anderen
wurde die Änderung jedoch nicht durchgeführt. Die Informationen sind also
prinzipiell falsch, und es ist ein ganzes Stück Arbeit, die korrekten Daten wieder herauszusuchen und den Fehler zu bereinigen.
3
4
Punkt 2 besagt lediglich, dass die Datensätze in einer Tabelle keinen Bezug
zueinander aufweisen dürfen. Bezieht sich Datensatz A z.B. auf den Datensatz
B, und wird Letzterer irgendwann gelöscht, dann sind die notwendigen Daten
für Datensatz A nicht mehr vollständig.
5
6
Die Aufteilung von Daten nach Ressort bzw. Domäne ist ebenfalls integraler
Bestandteil der ersten Normalform und wird durch Punkt 3 angegeben. Dies
bedeutet nicht mehr, als dass Sie in einer Tabelle, in der Sie die Daten zu einem
Kunden speichern, nicht auch noch die Daten der bestellten Artikel speichern
dürfen, sondern dafür eine weitere Tabelle definieren müssen.
7
8
9
Was jedoch kein Gewicht haben darf, ist die Reihenfolge der Datensätze innerhalb der Tabelle, wie unter Punkt 4 vermerkt. In solchen Fällen, bei denen die
Datensätze in eine Reihenfolge gebracht werden sollen, müssen Sie ein Feld
definieren, das diese Reihenfolge festlegt, und dürfen dies nicht von der physischen Speicherung durch das Datenbankmanagementsystem abhängig machen.
10
11
4.4.2 Zweite Normalform
12
Die zweite Normalform wird dann erfüllt, wenn die folgenden Kriterien zutreffen:
13
1. Alle Bedingungen der ersten Normalform müssen erfüllt sein.
14
2. Die Tabellen müssen über eine Beziehung zueinander verfügen.
3. Der Primärschlüssel darf nur aus einem Feld bestehen.
Der Punkt 1 ist schnell abgehakt und wurde bereits in Abschnitt 4.4.1 erklärt.
Die Vorschrift, dass die Tabellen zueinander eine Beziehung haben müssen,
also in Relation zueinander stehen, ergibt sich bereits aus der ersten Normalform. Dort wurde festgelegt, dass die Daten einer Tabelle zum gleichen Ressort
gehören müssen. Die Informationen zu den bestellten Artikeln mussten also
aus der Tabelle mit den Kundendaten ausgegliedert werden. Damit die bestellten Artikel jedoch dem entsprechenden Kunden zugeordnet werden können,
muss zwischen diesen beiden Tabellen eine Beziehung hergestellt werden.
Punkt 3 wiederum legt fest, dass zu jedem Datensatz ein eindeutiger Schlüssel
existieren muss. Zwar könnten Sie einen Primärschlüssel für die Kundentabelle
auch aus dem Vor- und dem Nachnamen zusammensetzen, aber dieser Schlüs-
Normalformen
111
sel wäre nicht eindeutig, da es vorkommen kann, dass zwei Kunden den gleichen Namen haben.
Das Design Ihrer Tabellen- und Datenbankstruktur sollte unbedingt die Kriterien der zweiten Normalform erfüllen.
4.4.3 Dritte Normalform
Die Kriterien:
1. Die Bedindungen der zweiten Normalform müssen erfüllt werden.
2. Die Felder dürfen untereinander keine Abhängigkeit aufweisen.
Das erste Kriterium ist eindeutig und beinhaltet auch, dass die Kriterien der ersten Normalform erfüllt sein müssen.
Das zweite Kriterium besagt einfach, dass ein Feld keinen Wert enthalten darf,
der durch den Wert eines anderen Felds bedingt wird. Ein Beispiel dazu wäre
die Speicherung der Nummer und des Namens der Warengruppe in einer Artikeltabelle. Der Name der Warengruppe ergibt sich ja aus der Nummer der
Gruppe. Umgekehrt ist dies jedoch nicht unbedingt der Fall. Vielleicht sind Sie
der Meinung, dass das sonnenklar ist. Warum wird dann aber so gut wie
immer, wenn Sie Ihre Anschrift eingeben müssen, sowohl nach der PLZ als
auch nach dem Ort gefragt? Schließlich ergibt sich der Ort doch bereits aus der
PLZ.
Dieses letzte Kriterium ist in der Regel der Grund, warum beim Tabellendesign
lediglich die zweite Normalform angestrebt wird. Für die Warengruppen ist es
selbstverständlich, dass eine Tabelle existiert, in der zu jeder Warengruppennummer auch der Name gespeichert und bei dem Artikel nur noch die Nummer angegeben wird. Jedoch werden Sie nicht extra eine Tabelle definieren, in
der Sie zu jeder PLZ den Ort angeben und dem Kunden nur noch die Eingabe
der PLZ erlauben.
4.5
Tabellen- und Datenbankstruktur
Nehmen Sie sich nun die Notizen zu Ihrer Tabellenstruktur vor und bearbeiten
Sie diese so, dass sie mindestens die zweite Normalform erfüllt. Das Ergebnis
dieser Normalisierung können Sie nun Schritt für Schritt als ERM abbilden.
112
Ein wenig Theorie
Index
! 149
- 171
!= 148
$_GET 244
$_POST 244
$_SESSION 248
% 171
&& 149
* 171
*= 170
+ 171
+= 170
.frm 200
.MYD 200
.MZI 200
/ 171
/= 170
< 148
<= 148
<> 148
-= 170
= 148
> 148
>= 148
|| 149
1:1 115
1:n 114, 223
A
Abrunden 174
ABS 175
Access 27
ADABAS 24
ADDATE 181
aktueller Zeitpunkt 178
ALTER TABLE 359
ANALYZE_TABLE 198
AND 149
ANSI-SPARC-Modell 23
API 75
Arithmetik 170
ASC → s. SELECT
Attribute 104
Aufrunden 174
Aufzählungstypen 127
AUTO_INCREMENT 130, 166
AVG 188
B
BACKUP TABLE 200
Bedingungen 67
Benutzer anlegen 215
Benutzer-DSN 300
Benutzerverwaltung 214, 334, 343
BETWEEN → s. SELECT
Beziehungen 105
Bezugsquellen 35
BIGINT 122
Binärtypen 126
BINARY 133
BLOB 126
ByteFX 92
ByteFX-MySqlClient 278
C
CEILING 174
CGI-Modul 263
CGI-Objekt 268
CHAR 119
CHECK TABLE 195
Click-Ereignis 293
Client 30
COUNT 190, 234
CREATE
INDEX 131
TABLE 134
CREATE DATABASE 360
CREATE INDEX 361
CREATE TABLE 361
crypt 244
CURDATE 178
CURRENT_DATE 178
CURRENT_TIME 178
CURRENT_TIMESTAMP 178
CURTIME 178
D
DATE 124
DATE_ADD 181
DATE_FORMAT 184
Index
409
DATE_SUB 181
Datei-DSN 301
Datenbank 26
Datenbank übertragen 211
Datenbankabfragesprache 23
Datenbankadministration 341
Datenbankdump 245
Datenbankmanagementsysteme 26
Datenbankmodell
objektorientiert 25
objektrelational 25
relational 24
SQL 25
XML 25
Datenbankmodelle
relational 23
Datenbanksysteme
Client/Server 27
Lokal 27
Datenbeziehungsmodell 103
Datenexport und -import 207
Datensätze zählen 189
Datensicherung 199
in eine Datei 202
manuell 199
Datentypen 119
BIGINT 122
BLOB 126
CHAR 119
DATE 124
DATETIME 124
DECIMAL 122
DOUBLE 122
ENUM 127
FLOAT 122
INT 122
LONGBLOB 126
LONGTEXT 121
MEDIUMBLOB 126
MEDIUMINT 122
MEDIUMTEXT 121
SET 127
SMALLINT 122
TEXT 119, 121
TIME 124
TIMESTAMP 124
TINYBLOB 126
TINYINT 122
410
Index
TINYTEXT 121
VARCHAR 119
YEAR 124
DATETIME 124
Datum und Zeit formatieren 184
Datumstypen 124
DAYNAME 180
DAYOFMONTH 180
DAYOFWEEK 179
DAYOFYEAR 180
DBD 84
DBH
disconnect 377
do 89, 269, 378
errstr 378
prepare 87, 382
quote 382
DBI 84
connect 85, 264, 376
datasource 377
disconnect 87
DBI-Modul 263
DBI-Objekt 85
DBMS 26, 30
DECIMAL 122
DEFAULT 133
DELETE 66, 362
FROM 66
WHERE 69
DESC → s. SELECT
DESCRIBE 362
DialogResult
Cancel 283
OK 283
die 86
DMBS 119
DROP DATABASE 362
DROP INDEX 362
DROP TABLE 363
Dump 204, 245
Dump einspielen 206
E
E. F. Codd 23, 103
ENCLOSED BY 208, 209
Entität 104
entity 104
Entity-Relationship-Model 103, 223
Ergebnismenge begrenzen 147
ERM 103, 223
ESCAPED BY 208, 209
Excel
Daten importieren 303
Query Editor 304
EXPLAIN 363
EXTRACT 178
LEFT 159
ON 159
RIGHT 160
K
K.I.S.S. 259
KILL 365
Konfigurationsdatei 233
Konkatenation 284
F
FIELDS_TERMINATED_BY 203, 206
FLOAT 122
FLOOR 174
FLUSH 363
FROM_UNIXTIME 176
G
General Public License 30
GPL 30, 31
GRANT 364
@ 216
IDENTIFIED BY 216
ON 215
Syntax 215
TO 215
WITH GRANT OPTION 216
H
hierarchische Struktur 23
Hot-Copy 199
HOUR 180
I
IN → s. SELECT
Indizes 130
Informationsquellen 394
Inkonsistenz 30
INNER → s. SELECT
INNER JOIN 161
INSERT 61, 165, 365
SET 167
Syntax 166
VALUES 63, 168
INT 122
J
JOIN 156, 159
INNER 161
L
LEFT → s. SELECT
Leibniz 23
LIMIT 264
LINES_TERMINATED_BY 203, 206
LOAD_DATA_INFILE 203, 206, 209,
365
Load-Ereignis 279
LONGBLOB 126
LONGTEXT 121
M
m
n 115
MAX 187
MEDIUMBLOB 126
MEDIUMINT 122
MEDIUMTEXT 121
MIME-Type 263
MIN 187
MINUTE 180
MOD 173
MONTH 180
MONTHNAME 180
MyISAM 198
MyODBC 31, 299
Treiber 301
MySQL 5.0 393
mysql_affected_rows 369
mysql_close 369
mysql_connect 76, 370
mysql_connection 248
mysql_errno 370
mysql_error 370
mysql_escape_string 371
mysql_fetch_array 371
mysql_fetch_field 372
mysql_fetch_object 372
Index
411
mysql_fetch_row 82, 373
mysql_free_result 373
mysql_insert_id 373
mysql_list_dbs 374
mysql_list_tables 252, 374
mysql_num_fields 374
mysql_num_rows 375
mysql_pconnect 78, 375
mysql_query 80, 375
mysql_real_escape_string 244
mysql_result 375
mysql_select_db 79, 252, 376
MySQLadmin 351
MySQL-Administrator 330
MySqlClient 92, 93
ByteFX.Data.MySqlClient 93
Close 94
Open 94
MySqlCommand 95, 278, 383
CommandText 383
CommandTimeout 384
Connection 95, 384
ExecuteNonQuery 96, 289, 383
ExecuteReader 96, 281, 383
ExecuteScalar 383
Open 281
MySqlConnection 93, 278, 384
ChangeDatabase 385
Close 95, 385
ConnectionTimeout 385
Database 385
DataSource 386
Open 95, 385
ServerVersion 386
State 386
StateChangeEventHandler 386
MySqlDataReader 96, 278, 386
Close 387
FieldCount 97, 389
GetBoolean 387
GetByte 387
GetChar 387
GetDataTypeName 387
GetDateTime 387
GetDecimal 387
GetDouble 387
GetFloat 388
GetInt16 388
GetInt32 388
412
Index
GetInt64 388
GetName 388
GetString 281, 388
GetUInt16 388
GetUInt32 388
GetUInt64 389
HasRows 389
IsClosed 389
Read 389
MySqlException 390
MySQL-Front 337
MySQL-Konsole 48, 53
MySqlReader
GetString 97
MySQL-Zeitstempel 177
N
Navicat 346
Normalform
Dritte 112
Erste 110
Zweite 111
Normalformen 110
NOT 149
NOT NULL 133
NOW 178, 182
NULL 132
O
ODBC 75, 299
ODBC-Datenquellen-Administrator
300
ODBC-Schnittstelle 31
ON → s. SELECT
OpenOffice.org
Adressdatenbank 316
Daten importieren 312
Datenquelle anlegen 310
Datenquellen-Verwaltung 311
Operator
Modulo 173
Vergleiche 148
Operatoren 148
arithmetisch 170
logisch 149
Rangfolge 150
OPTIMIZE TABLE 198, 366
OR 149
Oracle 24
P
Passwort festlegen 216
PHP 75
PhpMyAdmin 211, 323
Abfragefenster 329
Erstkonfiguration 324
PI 174
POST-Methode 244
Potenz 173
POW 173
POWER 173
PPM 84
ppm
install 85
upgrade 84
Primärschlüssel 64, 115, 129
PRIMARY KEY 130
programmer’s package manager 84
Prozesse beenden 352
Q
Quadratwurzel 173
QUARTER 180
R
RAND 174
RDBMS 26, 30
Rechte 214
vergeben 215
Redundanz 29
REPAIR TABLE 198
REPLACE 366
RESTORE TABLE 205
REVOKE 367
GRANT OPTION 217
Syntax 216
RIGHT → s. SELECT
ROUND 174
Runden 174
S
SECOND 180
SELECT 58, 141, 367
AS 143
FROM 59, 142
INTO OUTFILE 207
INTO_OUTFILE 202
JOIN 156, 159, 160, 161
LIMIT 153
ORDER BY 144, 146
Syntax 152
WHERE 67, 147, 151, 163
Seriendruckfeld 308
Server 30
Serverstatus 55
session_start 248
SHOW 368
SHOW COLUMNS 252
SHOW DATABASES 249
SIGN 175
SMALLINT 122
Socket 248
SOURCE 206
SQL 23
SQL-Befehlsdatei ausführen 56
SQRT 173
statement handle 88
STH
errstr 378
execute 88, 378
fetchrow_array 90, 379
finish 89, 379
insertid 381
is_blob 379
is_key 379
is_not_null 380
is_num 380
is_pri_key 380
length 381
NAME 381
NUM_OF_FIELDS 381
rows 382
type 382
Stored Procedures 394
SUBDATE 181
Subselects 162
SUM 189
SYSDATE 178
System R 23
System-DSN 310
T
Tabelle analysieren 197
Tabelle bezeichnen 134
Tabelle optimieren 197
Tabelle reparieren 198
Index
413
Tabelle überprüfen 195
Tabellen definieren 114
Tabellen verknüpfen 156
Tabellenalias 159
Tabellendump 204
TEXT 119, 121
TIME 124
TIMESTAMP 124, 133
TINYBLOB 126
TINYINT 122
TINYTEXT 121
TO_DAYS 183
V
VARCHAR 119
W
WEEK 180
WEEKDAY 179
Wiederherstellung
manuell 204
WinMySQLadmin 43, 353
Word
Datenquelle öffnen 306
Y
U
unär 172
unäres Minus 172
undef 88
UNIQUE 131
UNIX_TIMESTAMP 176
UNIX-Zeitstempel 176
UNSIGNED 132
ZEROFILL 134
UPDATE 168, 169, 368
Syntax 169
USE 78, 369
414
Index
YaBB 221
SE 221
YEAR 124, 180
YEARWEEK 180
YYYY-MM-DD 176
Z
Zahlentypen 122
Zeichenkettentypen 119
Zeittypen 124
ZEROFILL 134
Zufallszahlen 174
Herunterladen