das umfassende handbuch - amazon s3€¦ · stefan pröll, eva zangerle, wolfgang gassler mysql 5.6...
TRANSCRIPT
Stefan Pröll, Eva Zangerle, Wolfgang Gassler
MySQL 5.6Das umfassende Handbuch
Auf einen Blick
Auf einen Blick
1 Datenbanken – eine allgemeine Einleitung ................................................. 23
2 Datenbankmodellierung ..................................................................................... 49
3 Schnellstart-Tutorial ............................................................................................. 91
4 Einführung in die Beispieldatenbank ............................................................. 121
5 Architektur ............................................................................................................... 147
6 Manuelle Installation, Plugins und Upgrades ............................................. 211
7 MySQL administrieren ......................................................................................... 255
8 Replikation und Hochverfügbarkeit ................................................................ 361
9 Anfrageoptimierung ............................................................................................. 375
10 Sicherheit .................................................................................................................. 467
11 Gespeicherte Programme und Events ............................................................ 529
12 Softwareentwicklung mit MySQL .................................................................... 639
13 NoSQL mit MySQL .................................................................................................. 675
A Referenz .................................................................................................................... 695
Inhalt
5
Inhalt
Vorwort .................................................................................................................................................. 15
TEIL I Erste Schritte
1 Datenbanken – eine allgemeine Einleitung 23
1.1 Grundlagen von Datenbanken ........................................................................................ 23
1.1.1 Die Geschichte von Datenbanken .................................................................... 23
1.1.2 Moderne Datenbanken und Datenmodelle .................................................. 25
1.1.3 Vorteile ...................................................................................................................... 28
1.1.4 Einsatzgebiete ......................................................................................................... 30
1.1.5 Anforderungen an ein Datenbankmanagementsystem .......................... 34
1.2 MySQL ......................................................................................................................................... 38
1.2.1 Einleitung und Vorstellung ................................................................................. 38
1.2.2 Die Geschichte von MySQL ................................................................................. 41
1.2.3 Open Source und Lizenzen .................................................................................. 44
1.3 Zusammenfassung ............................................................................................................... 47
2 Datenbankmodellierung 49
2.1 Einführung in den Datenbankentwurf ........................................................................ 49
2.1.1 Anforderungsanalyse ............................................................................................ 50
2.1.2 Konzeptioneller Datenbankentwurf ................................................................ 51
2.1.3 Logischer Datenbankentwurf ............................................................................ 52
2.1.4 Physischer Datenbankentwurf .......................................................................... 52
2.1.5 Der Datenbankentwurf im Überblick .............................................................. 53
2.2 Ein konkretes Beispiel: Flughafenverwaltung ......................................................... 54
2.3 Das relationale Datenbankenmodell ........................................................................... 55
2.3.1 Tabellen, Spalten und Zeilen .............................................................................. 55
2.3.2 Schlüssel identifizieren Datensätze ................................................................. 57
2.3.3 Die relationale Algebra ......................................................................................... 58
2.3.4 Joins ............................................................................................................................ 63
2.4 Datenbankdesign .................................................................................................................. 67
2.4.1 Das ER-Diagramm .................................................................................................. 67
Inhalt
6
2.4.2 Entitäten ................................................................................................................... 68
2.4.3 Beziehungen ............................................................................................................ 72
2.5 Normalformen ........................................................................................................................ 81
2.5.1 Die erste Normalform ........................................................................................... 82
2.5.2 Die zweite Normalform ....................................................................................... 84
2.5.3 Die dritte Normalform .......................................................................................... 86
2.5.4 Weitere Normalformen ....................................................................................... 88
2.6 Zusammenfassung ............................................................................................................... 88
3 Schnellstart-Tutorial 91
3.1 MySQL herunterladen ......................................................................................................... 91
3.2 Minimale Systemanforderungen ................................................................................... 92
3.3 MySQL installieren ................................................................................................................ 93
3.3.1 Schnellinstallation unter Windows ................................................................. 94
3.3.2 Schnellinstallation unter Linux ......................................................................... 100
3.3.3 Schnellinstallation unter Mac OS X ................................................................. 105
3.3.4 Zusammenfassung der Installation ................................................................. 106
3.4 Endlich loslegen – MySQL ausprobieren ..................................................................... 107
3.5 Übersicht der wichtigsten Befehle ................................................................................ 110
3.5.1 Datenbanken anlegen und löschen ................................................................. 111
3.5.2 Tabellen anlegen, Daten einfügen und löschen .......................................... 113
3.5.3 Datensätze anlegen, abfragen und löschen ................................................. 118
3.5.4 Datensätze abfragen und anzeigen ................................................................. 120
3.6 Zusammenfassung ............................................................................................................... 120
4 Einführung in die Beispieldatenbank 121
4.1 Die Datenbank für das Szenario anlegen ................................................................... 121
4.2 Die Beispieldatenbank auf der Buch-DVD ................................................................. 137
4.3 Hilfe bei der Arbeit mit MySQL ....................................................................................... 139
4.3.1 Fehlermeldungen und Warnungen ................................................................. 139
4.3.2 Online-Manual und weitere Anlaufstellen ................................................... 141
4.4 Zusammenfassung ............................................................................................................... 142
Inhalt
7
TEIL II MySQL-Administration
5 Architektur 147
5.1 Einführung ................................................................................................................................ 147
5.1.1 Teile einer Datenbank – das Fünf-Schichten-Modell ................................. 147
5.1.2 MySQL-Architektur ................................................................................................ 153
5.2 Abfrageverarbeitung ........................................................................................................... 157
5.2.1 Der Query-Cache – das Kurzzeitgedächtnis von MySQL ........................... 157
5.2.2 Der Optimierer – die Intelligenz von MySQL ................................................. 164
5.2.3 Execution-Engine – der Arbeiter von MySQL ................................................ 169
5.3 Transaktionen und Nebenläufigkeit ............................................................................ 170
5.3.1 Nebenläufigkeit ...................................................................................................... 170
5.3.2 Transaktionen ......................................................................................................... 171
5.3.3 Lock-Management ................................................................................................. 184
5.4 Storage-Engines ..................................................................................................................... 187
5.4.1 Grundlagen des Storage-Engine-Plugin-Systems ....................................... 187
5.4.2 InnoDB ....................................................................................................................... 191
5.4.3 MyISAM ..................................................................................................................... 197
5.4.4 MEMORY ................................................................................................................... 202
5.4.5 Sonstige Engines .................................................................................................... 203
5.4.6 Fremdhersteller-Engines ..................................................................................... 206
5.4.7 Vergleichstabelle .................................................................................................... 207
5.5 Zusammenfassung ............................................................................................................... 208
6 Manuelle Installation, Plugins und Upgrades 211
6.1 Von neuen Quellen – MySQL selbst kompilieren und installieren ................. 212
6.1.1 Voraussetzungen ................................................................................................... 212
6.1.2 MySQL kompilieren und installieren ............................................................... 214
6.1.3 Die Installation grundlegend absichern ......................................................... 219
6.1.4 Anlegen der Konfigurationsdatei ..................................................................... 224
6.1.5 Den MySQL-Dienst starten ................................................................................. 225
6.1.6 Zusammenfassung der Installation ................................................................. 229
6.2 Usermanagement ................................................................................................................. 229
6.3 Die zentrale Konfigurationsdatei »my.cnf« .............................................................. 235
6.3.1 Die Syntax der Konfigurationsdatei ................................................................. 237
6.3.2 Die grundlegenden Einstellungen .................................................................... 239
Inhalt
8
6.3.3 Kommandozeilenargumente ............................................................................. 242
6.3.4 Servervariablen setzen und ändern ................................................................. 243
6.4 MySQL aktualisieren und erweitern ............................................................................. 247
6.4.1 Upgrades ................................................................................................................... 247
6.4.2 Die Plugin-API .......................................................................................................... 251
6.5 Zusammenfassung ............................................................................................................... 254
7 MySQL administrieren 255
7.1 Der bordeigene Werkzeugkasten .................................................................................. 255
7.2 Der Name ist Programm: »mysqladmin« ................................................................... 256
7.2.1 Datenbanken anlegen und löschen ................................................................. 256
7.2.2 Caches leeren ........................................................................................................... 257
7.2.3 Das »root«-Passwort ändern .............................................................................. 258
7.2.4 Den Server überwachen ....................................................................................... 261
7.3 Daten importieren und exportieren ............................................................................. 264
7.3.1 Daten aus Dateien importieren ........................................................................ 264
7.3.2 Daten exportieren .................................................................................................. 270
7.4 Richtig sichern – Backups und Strategien .................................................................. 272
7.4.1 Die Basics .................................................................................................................. 272
7.4.2 Physisches oder logisches Backup .................................................................... 274
7.4.3 Online- und Offline-Backups .............................................................................. 276
7.4.4 Volle und inkrementelle Backups ..................................................................... 277
7.4.5 Logische Backups und Wiederherstellung mit »mysqldump« ............... 278
7.4.6 Physisches Offline-Backup – schnell, sicher und effizient ....................... 282
7.4.7 MySQL Hot Copy ..................................................................................................... 285
7.4.8 InnoDB-Tabellen sichern mit Percona XtraBackup ..................................... 286
7.4.9 Recovery von Bedienfehlern – zeitpunktbezogene Wiederherstellung 288
7.4.10 Backups mit Replikation ...................................................................................... 291
7.4.11 Backups automatisieren ...................................................................................... 291
7.5 Tabellenwartung mit »mysqlcheck« ............................................................................ 292
7.5.1 MyISAM-Tabellen überprüfen und reparieren ............................................. 292
7.5.2 Die Erholungsphase – Crash Recovery ............................................................ 295
7.6 Performance-Check mit »mysqlslap« .......................................................................... 297
Inhalt
9
7.7 MySQL beobachten ............................................................................................................... 298
7.7.1 Die »INFORMATION_SCHEMA«-Tabellen ...................................................... 298
7.7.2 Den Status abfragen ............................................................................................. 298
7.7.3 Statistiken zu InnoDB-Tabellen ......................................................................... 299
7.7.4 MySQL überwachen .............................................................................................. 301
7.8 Die grafischen Werkzeuge im Überblick ..................................................................... 302
7.8.1 MySQL Workbench ................................................................................................ 302
7.8.2 MySQL Administrator ........................................................................................... 308
7.8.3 Weitere Tools ........................................................................................................... 311
7.9 Optimierungstechniken ..................................................................................................... 311
7.9.1 Leistungsschau ........................................................................................................ 311
7.9.2 Profiling ..................................................................................................................... 314
7.9.3 Das Percona Toolkit ............................................................................................... 318
7.9.4 Die wichtigsten Variablen der zentralen Konfigurationsdatei
im Überblick ............................................................................................................. 321
7.9.5 MySQL feineinstellen – Empfehlungen eines Skripts ................................ 326
7.10 Exakte Statistiken mit dem Performance Schema ................................................. 339
7.10.1 Grundlagen des Performance Schemas ......................................................... 340
7.10.2 Instrumente einrichten und Messvorgaben anpassen ............................. 343
7.10.3 Anpassen der Einstellungen und Ausgabe von Statusvariablen ............ 351
7.10.4 Auswertung des Performance Schemas ......................................................... 352
7.10.5 Den Gesamtüberblick mit Summary-Tabellen behalten .......................... 356
7.10.6 Aufspüren von Problemen .................................................................................. 359
8 Replikation und Hochverfügbarkeit 361
8.1 Grundprinzipien ..................................................................................................................... 362
8.1.1 Ablauf ......................................................................................................................... 363
8.1.2 Arten von Replikation ........................................................................................... 363
8.2 Topologien ................................................................................................................................ 365
8.2.1 Master – Slave ......................................................................................................... 365
8.2.2 Master – Slave mit zwischengeschaltetem Slave ....................................... 366
8.2.3 Master – Master ..................................................................................................... 367
8.3 Vorarbeiten zur Replikation ............................................................................................. 368
8.4 Konfiguration einer Master-Slave-Replikation ....................................................... 370
8.5 Zusammenfassung ............................................................................................................... 373
Inhalt
10
9 Anfrageoptimierung 375
9.1 Aufspüren von langsamen Anfragen ........................................................................... 375
9.1.1 Langsame Anfrage protokollieren .................................................................... 375
9.1.2 Log-Dateien regelmäßig kontrollieren ............................................................ 378
9.2 Indexstrukturen ..................................................................................................................... 378
9.2.1 Die Grundidee von Indexstrukturen ................................................................ 379
9.2.2 Primärindex vs. Sekundärindex ......................................................................... 380
9.2.3 Der limitierende Faktor – die Festplatte ......................................................... 381
9.2.4 Technische Umsetzung von Indexstrukturen – der B-Baum
und MyISAM ............................................................................................................. 382
9.2.5 Clustered Index ....................................................................................................... 387
9.2.6 Non-clustered Index .............................................................................................. 388
9.2.7 Mehrdimensionale Indexstrukturen – der R-Baum .................................... 388
9.2.8 GIS und raumbezogene Indizes ......................................................................... 392
9.2.9 Volltextindex ........................................................................................................... 400
9.2.10 Die großen Nachteile des Indexes .................................................................... 410
9.3 Optimierung von Anfragen .............................................................................................. 410
9.3.1 Die EXPLAIN-Anweisung ...................................................................................... 410
9.3.2 Auswertung der EXPLAIN-Informationen und Optimierungen .............. 413
9.4 Partitionierung ....................................................................................................................... 443
10 Sicherheit 467
10.1 Grundlagen .............................................................................................................................. 467
10.1.1 Verschiedene Szenarien für das Rechtemanagement ............................... 467
10.1.2 Die zwei Phasen des Berechtigungssystems ................................................ 469
10.2 Privilegiert – die Benutzerrechte im Detail ............................................................... 470
10.2.1 Die Ebenen der Benutzerberechtigungen ...................................................... 472
10.2.2 Berechtigungen zum Schutz der Daten .......................................................... 475
10.2.3 Berechtigungen zur Programmierung mit MySQL ..................................... 480
10.2.4 Das Sicherheitskonzept von Programmen oder
DEFINER vs. INVOKER ............................................................................................ 482
10.2.5 Berechtigungen zur Administration von MySQL ......................................... 486
10.2.6 Die Befehle GRANT und REVOKE im Detail .................................................... 491
10.2.7 Benutzerverwaltung ohne GRANT – die Datenbank »mysql« ................ 496
Inhalt
11
10.3 Tipps und Tricks ...................................................................................................................... 501
10.3.1 Vorgehen bei der Erstellung von Benutzern ................................................. 502
10.3.2 Tausende Benutzer und Datenbanken ohne Chaos verwalten .............. 503
10.3.3 Benutzerverwaltungs-API ................................................................................... 504
10.3.4 Benutzerverwaltung in der Applikation, nicht in der Datenbank? ........ 505
10.3.5 Workaround für Berechtigungen auf Zeilenebene/Kapselung .............. 507
10.4 STOP! – MySQL absichern .................................................................................................. 510
10.4.1 Allgemeine Sicherheitshinweise – der gewissenhafte Administrator 510
10.4.2 Zugang beschränken oder verschlüsseln ....................................................... 515
10.4.3 MySQL im Web ........................................................................................................ 520
10.5 Zusammenfassung ............................................................................................................... 525
Teil III Programmierung
11 Gespeicherte Programme und Events 529
11.1 Wozu gespeicherte Programme? ................................................................................... 529
11.1.1 Arten von gespeicherten Programmen .......................................................... 531
11.1.2 MySQL Stored Program Language .................................................................... 532
11.1.3 Grundlegendes Arbeiten mit gespeicherten Programmen ..................... 532
11.1.4 Kommentare ............................................................................................................ 535
11.1.5 Datentypen .............................................................................................................. 536
11.1.6 Sicherung und Backup gespeicherter Programme und Sichten ............. 537
11.1.7 Rechte von gespeicherten Programmen ........................................................ 538
11.1.8 Einschränkungen .................................................................................................... 539
11.2 Gespeicherte Prozeduren .................................................................................................. 539
11.2.1 Erzeugung gespeicherter Prozeduren ............................................................. 540
11.2.2 Erweiterte Einstellungen beim Erzeugen von
gespeicherten Prozeduren .................................................................................. 542
11.2.3 Verwendung gespeicherter Prozeduren ......................................................... 543
11.2.4 Löschen von gespeicherten Prozeduren ......................................................... 544
11.2.5 Bearbeiten gespeicherter Prozeduren ............................................................. 544
11.2.6 Parameter ................................................................................................................. 546
11.2.7 Ergebnismengen .................................................................................................... 550
11.3 Gespeicherte Funktionen .................................................................................................. 551
11.3.1 Erzeugen von gespeicherten Funktionen ....................................................... 552
11.3.2 Erweiterte Optionen beim Erzeugen von gespeicherten Prozeduren ... 554
11.3.3 Aufrufen gespeicherter Funktionen ................................................................ 556
Inhalt
12
11.3.4 Bearbeiten gespeicherter Funktionen ............................................................. 558
11.3.5 Einschränkungen .................................................................................................... 558
11.4 Informationen zu bestehenden gespeicherten Programmen (Metadaten) 559
11.5 Programmieren in MySQL ................................................................................................. 563
11.5.1 BEGIN-/END-Blöcke ............................................................................................... 563
11.5.2 Variablen ................................................................................................................... 565
11.5.3 Ablaufsteuerung und konditionale Anweisungen ..................................... 571
11.5.4 Schleifen .................................................................................................................... 579
11.5.5 Cursors ....................................................................................................................... 583
11.5.6 Handler ...................................................................................................................... 590
11.5.7 Selbstdefinierte Fehlermeldungen mit SIGNAL ........................................... 599
11.5.8 Verschachtelte Cursors und ihre Handler ...................................................... 604
11.5.9 Temporäre Tabellen .............................................................................................. 607
11.5.10 Rekursion .................................................................................................................. 608
11.5.11 Transaktionen ......................................................................................................... 611
11.6 Trigger ........................................................................................................................................ 613
11.6.1 Trigger erstellen ...................................................................................................... 613
11.6.2 Löschen und Bearbeiten von Triggern ............................................................ 618
11.6.3 Informationen über bestehende Trigger (Metadaten) .............................. 618
11.6.4 Einschränkungen .................................................................................................... 621
11.7 Events ......................................................................................................................................... 622
11.7.1 Event-Scheduler ...................................................................................................... 623
11.7.2 Erzeugung von Events .......................................................................................... 624
11.7.3 Löschen und Bearbeiten von Events ................................................................ 628
11.7.4 Informationen zu bestehenden Events (Metadaten) ................................ 629
11.7.5 Sicherheit, Rechte und Einschränkungen ...................................................... 631
11.8 Sichten (Views) ....................................................................................................................... 632
11.8.1 Erzeugung und Verwenden von Sichten ........................................................ 633
11.8.2 Updates auf Sichten .............................................................................................. 635
11.8.3 Löschen und Bearbeiten einer Sicht ................................................................. 636
11.8.4 Informationen zu bestehenden Sichten (Metadaten) ............................... 637
11.9 Zusammenfassung ............................................................................................................... 638
12 Softwareentwicklung mit MySQL 639
12.1 Konnektoren/Programmiersprachen ........................................................................... 641
12.1.1 Allgemeines .............................................................................................................. 641
12.1.2 ODBC .......................................................................................................................... 646
Inhalt
13
12.1.3 Java, JDBC und Connector/J ................................................................................ 650
12.1.4 PHP, »mysqli«, »PDO_MYSQL« .......................................................................... 655
12.1.5 .NET ............................................................................................................................. 659
12.1.6 Perl, »DBD:mysql« .................................................................................................. 664
12.1.7 Ruby ............................................................................................................................ 667
12.1.8 Python ........................................................................................................................ 669
12.1.9 »node-mysql«, Node.js – serverseitiges JavaScript ..................................... 671
12.2 Zusammenfassung ............................................................................................................... 674
13 NoSQL mit MySQL 675
13.1 Not Only SQL – NoSQL ......................................................................................................... 675
13.2 Skalierung und Verteilung: ACID vs. BASE ................................................................. 677
13.3 Mit Hochgeschwindigkeit ins Herz: MySQL öffnet sich
»Memcached«-Benutzern ................................................................................................. 678
13.3.1 Die Integration von Memcached in die MySQL-Architektur .................... 679
13.3.2 Grundlagen des Memcache-Protokolls ........................................................... 680
13.3.3 Memcached zur Verwendung mit InnoDB installieren ............................. 681
13.3.4 Die Verbindung testen ......................................................................................... 683
13.3.5 Memcached und InnoDB verbinden ................................................................ 684
13.3.6 Lesen und Schreiben von Daten mittels Memcached ............................... 687
13.3.7 Replikation und Memcached ............................................................................. 689
13.3.8 Sicherheit gegen Geschwindigkeit ................................................................... 689
13.3.9 Weitere Einstellungen .......................................................................................... 690
13.4 Zusammenfassung ............................................................................................................... 692
Teil IV Anhang
14 Referenz 695
A.1 Datentypen .............................................................................................................................. 696
A.2 Datendefinition, Datenmanipulation und Abfragen ............................................ 698
A.3 Index ........................................................................................................................................... 704
A.4 Boolesche Operatoren ......................................................................................................... 705
A.5 Mathematische Funktionen ............................................................................................. 706
A.6 Zeit- und Datumsfunktionen ........................................................................................... 708
Inhalt
14
A.7 String-Funktionen ................................................................................................................. 714
A.8 Transaktionen ......................................................................................................................... 722
A.9 Sperren ....................................................................................................................................... 724
A.10 Sichten (Views) ....................................................................................................................... 725
A.11 MySQL-Client ........................................................................................................................... 726
A.12 Gespeicherte Prozeduren .................................................................................................. 727
A.13 Gespeicherte Funktionen .................................................................................................. 729
A.14 Triggers ...................................................................................................................................... 731
A.15 Events ......................................................................................................................................... 731
A.16 Kontrollfluss-Elemente ....................................................................................................... 733
A.17 Variablen in Programmen ................................................................................................. 735
A.18 Cursors ........................................................................................................................................ 736
A.19 Handlers .................................................................................................................................... 737
A.20 Volltextsuche .......................................................................................................................... 739
A.21 Replikation ............................................................................................................................... 740
A.22 GIS-Funktionen ...................................................................................................................... 742
A.23 Partitionierung ....................................................................................................................... 743
A.24 Administrationsaufgaben ................................................................................................. 747
A.25 Benutzerverwaltung und Sicherheit ............................................................................ 752
A.26 Wartungsarbeiten ................................................................................................................. 755
A.27 Backups, Wiederherstellung und Logfiles .................................................................. 757
A.28 Import und Export ................................................................................................................. 759
A.29 Benchmarking, Monitoring und Profiling .................................................................. 760
A.30 Query-Cache ............................................................................................................................ 762
A.31 Plugins ........................................................................................................................................ 762
A.32 Storage-Engines ..................................................................................................................... 763
A.33 Hilfe, Warnungen und Fehler .......................................................................................... 766
A.34 Fehlernummern und SQL-States .................................................................................... 767
A.35 Escape-Sequenzen ................................................................................................................ 769
A.36 Zeichensätze und Sortierfolgen (Character Sets und Collations) .................... 770
Index ....................................................................................................................................................... 771
15
Vorwort
Da Sie dieses Buch aufgeschlagen haben, haben Sie mit großer Wahrscheinlichkeit
bereits von MySQL gehört. In diesem Buch geht es um eines der erfolgreichsten und
weitverbreitetsten Open-Source-Softwareprojekte der Welt. MySQL ist ein vollwerti-
ges Datenbankmanagementsystem, das nicht nur im Allgemeinen kostenlos für alle
Betriebssysteme verfügbar ist, es ist zudem relativ einfach zu bedienen. Doch wozu
dann ein eigenes Buch, wenn die Software doch so einfach zu bedienen ist? Der ange-
merkte einfache Umgang mit MySQL setzt voraus, dass Sie wissen, wo Sie welche Ein-
stellungen vornehmen müssen. Nun könnten Sie sich durch die frei verfügbare
englischsprachige Dokumentation im Umfang von mehreren Tausend Seiten quä-
len. Oder Sie wählen die smarte Alternative: Sie haben sich richtig entschieden!
Schließlich lesen Sie bereits dieses Buch; herzlichen Glückwunsch!
Damit Sie so schnell wie möglich sicher im Umgang mit MySQL werden, bietet dieses
Buch ein umfangreiches und realistisches Praxisbeispiel, anhand dessen wir die
wichtigsten Kniffe, Tipps und Tricks erklären.
Für wen ist dieses Buch gedacht?
MySQL ist ein sehr weit verbreitetes Datenbanksystem, das in den verschiedensten
Szenarien erfolgreich eingesetzt werden kann. Wie Sie das meiste aus MySQL heraus-
holen, lernen Sie in diesem Buch. Vorwiegend richtet sich das vorliegende Adminis-
trationshandbuch an Einsteiger und Fortgeschrittene. Aber gleichgültig, ob Sie
Datenbanken-Einsteiger sind oder schon Erfahrungen mit MySQL gesammelt haben,
ja sich vielleicht sogar schon zu den Profis zählen können: In diesem Buch werden Sie
viel Neues lernen! Dasselbe gilt natürlich auch für Umsteiger von anderen Daten-
bankmanagementsystemen.
Das Besondere an diesem Buch ist das umfassende Praxisbeispiel, anhand dessen wir
die Themen aller Kapitel und die darin enthaltenen Befehle genau erläutern. Wir sind
der Meinung, dass ein interessantes und reales Praxisbeispiel besser ist als eine öde
Schritt-für-Schritt-Anleitung. Das bedeutet jedoch auch, dass Sie an manchen Stellen
selbst gefordert sind, da wir eine gewisse Eigeninitiative voraussetzen. Getreu dem
Motto learning by doing werden Sie MySQL immer besser kennenlernen, indem Sie
die Entwicklung des vorgestellten Szenarios selbst nachvollziehen werden. Wir sind
überzeugt, dass Sie so viel mehr lernen und sicherer im Umgang mit dem Daten-
banksystem MySQL werden, als wenn Sie zu sehr an die Hand genommen werden.
Doch keine Bange, auf der mitgelieferten DVD finden Sie die notwendigen Daten, um
jederzeit neu anfangen zu können, falls Sie sich mal einen gröberen Schnitzer leisten.
Vorwort
16
Konventionen
In diesem Buch gibt es ein paar wenige Konventionen, die die Lesbarkeit erhöhen. So
werden sämtliche Befehle durch dieses Format hervorgehoben, damit Sie schneller
erkennen, dass es sich um eine Anweisung für den MySQL-Server bzw. für Ihr
Betriebssystem handelt.
Eingaben, die für den MySQL-Server gedacht sind, tätigen Sie mit dem sogenannten
MySQL-Client, einem Kommandozeilen-Programm, in das Sie die Befehle eintippen,
um mit dem Server zu interagieren. Alle kürzeren oder längeren Befehlssequenzen
sind in Listings als Code-Auflistungen angegeben. Jene Befehle, die Sie innerhalb die-
ses Clients eingeben müssen, werden durch die Eingabeaufforderung (englisch
prompt) mysql> hervorgehoben. Oftmals können die Eingaben für den Client aus
Platzgründen nicht in einer Zeile eingegeben werden. Ein solcher Zeilenumbruch
wird durch diesen Pfeil -> dargestellt. Dadurch wird ausgedrückt, dass dieser Befehl
noch nicht abgeschlossen ist und daher noch fortgesetzt wird. Diese Pfeile dürfen Sie
nicht selbst eingeben. Der MySQL-Client schreibt diese Pfeile selbstständig nach
einem Zeilenumbruch. In Listing 1 sehen Sie ein Beispiel für das Format, das wir in
diesem Buch für MySQL-Befehle verwenden.
mysql> SELECT vorname, nachname FROM passagier-> WHERE passnummer = 'P137884';
Listing 1 Ein MySQL-Befehl
Die MySQL-Befehle selbst sind immer in GROSSBUCHSTABEN gehalten, damit Sie sie
leichter von Benutzereingaben unterscheiden können. Jene Kommandos, die Sie in
der Kommandozeilenumgebung eingeben müssen, werden durch den Linux-
Prompt bash# eingeleitet. Dadurch sehen Sie auf den ersten Blick, für welche Umge-
bung der Befehl vorgesehen ist. Listing 2 zeigt ein Beispiel für einen Konsolenbefehl.
bash# mysqladmin ping
Listing 2 Ein Konsolenbefehl
An manchen Stellen im Buch sehen Sie das neben diesem Absatz gezeigte Symbol.
Damit kennzeichnen wir diejenigen Befehle, die mit MySQL 5.6 wichtige Unter-
schiede in der Bedeutung erhalten haben. Die so markierten Befehle sind übrigens
nicht zwangsläufig veraltet. In der Regel sind sie nach wie vor gültig, haben aber bei-
spielsweise eine geänderte Semantik, die Sie beachten müssen.
Besondere Formatierungsübereinkünfte gelten auch für die Referenz am Ende dieses
Buches, in der wir alle besprochenen Befehle und Kommandos auflisten.
Vorwort
17
Der Aufbau dieses Buches
Dieses Buch ist in vier Teile gegliedert: in »Erste Schritte«, »MySQL-Administration«,
»Programmierung« und den »Anhang«. Der Teil »Erste Schritte« enthält unter ande-
rem ein Schnellstart-Tutorial, in dem Sie die wichtigsten Befehle kennenlernen, um
mit MySQL grundlegend arbeiten zu können. Nach diesem Kapitel sind Sie in der
Lage, die Datenbanken selbst samt ihren Tabellen, in denen letztendlich die Daten
gespeichert werden, anzulegen und zu verwalten. Außerdem stellt dieser Teil das pra-
xisnahe Flughafenszenario vor, das sich durch das gesamte Buch zieht und einen
nachvollziehbaren Rahmen für die unterschiedlichsten Aufgaben bietet. Sie lernen
in diesem Abschnitt, wie Sie die Anforderungen an ein Datenbanksystem herausar-
beiten und umsetzen. Auf der DVD zu diesem Buch finden Sie einen sehr umfangrei-
chen Datensatz, mit dem Sie auf realistische Weise den Umgang mit MySQL testen
können. Dieses Daten-Set für das Flughafenszenario enthält mehrere Millionen
Datensätze und eignet sich daher gut für Tests und Optimierungsmaßnahmen.
Der zweite Teil, »MySQL-Administration«, beschäftigt sich mit der Installation und
der Wartung von MySQL. Hier erfahren Sie nicht nur, wie Sie MySQL optimal an Ihre
Anforderungen anpassen, sondern auch, wie Sie MySQL aktuell halten. Des Weiteren
lernen Sie mit der Replikation eine interessante Möglichkeit kennen, MySQL im
Hochverfügbarkeitsbereich und somit auch im High-Performance-Bereich einzuset-
zen. Wie Sie Ihre Queries möglichst effizient gestalten, lernen Sie ebenfalls in diesem
Teil. Ein sehr wichtiger Aspekt dieses Teils ist die Benutzerverwaltung und das Absi-
chern Ihrer MySQL-Installation.
Im dritten Teil, »Programmierung«, werden Sie lernen, mit MySQL zu programmie-
ren, um so auch spezielle Anforderungen geschwindigkeitsoptimiert umzusetzen.
Mit gespeicherten Programmen lassen sich viele Probleme sehr elegant lösen. Da
MySQL in den meisten Fällen als Daten-Backend für Software-Programme dient, ler-
nen Sie hier ebenfalls, wie Sie mit den unterschiedlichsten Programmiersprachen auf
den Datenschatz einer MySQL-Installation zugreifen.
Abgerundet wird dieses Buch durch eine umfangreiche Referenz im vierten und letz-
ten Teil, in der Sie alle im Buch besprochenen Befehle samt Syntax und Kurzbeschrei-
bung vorfinden. Diese Befehle sind übersichtlich nach Themen geordnet, wodurch
Sie sich schneller zurechtfinden werden. Natürlich enthält dieses Buch auch einen
Index, in dem Sie alle wichtigen Begriffe und Befehle nachschlagen können und
somit schnell finden werden.
Vorwort
18
Die DVD zum Buch
Die beiliegende DVD enthält nicht nur alle Versionen der aktuellen, stabilen Version
5.6 von MySQL für Windows, Mac und Linux, sondern auch im Buch vorgestellte
Skripte und Tools, die Sie sofort einsetzen können.
Im Verzeichnis FlughafenDB finden Sie die Beispieldatenbank mit dem Flughafen-
szenario. Sie bildet das Herzstück dieses Buches, denn sie ermöglicht es Ihnen, alle
Befehle, Tricks und Tools sofort anhand einer vollwertigen Datensammlung aus-
zuprobieren. Die darin enthaltenen Flug-, Passagier- und Buchungsdaten sind
möglichst realistisch gehalten. Sie finden zwei Versionen der Daten des Flughafen-
szenarios auf dieser DVD. Sie unterscheiden sich im Umfang der enthaltenen Daten.
Während Sie die kleine Ausgabe sehr schnell importieren können, dient die große
Version mit einigen Millionen Datensätzen besonders zum Testen von Optimierun-
gen und Tuning-Maßnahmen. Wie Sie diese Daten importieren, erfahren Sie in
Abschnitt 4.2, »Die Beispieldatenbank auf der Buch-DVD«.
Die Webseite zum Buch
Unter der Web-Adresse www.mysqladmin.at finden Sie aktuelle Informationen rund
um dieses Buch, Kontaktmöglichkeiten und Neues rund um MySQL.
Vorwort zur zweiten Auflage
Am 5. Februar 2013 verkündete Oracle stolz die Freigabe der aktuellen Version MySQL
5.6 für den produktiven Einsatz. Seit wir an der ersten Ausgabe dieses Buches gearbei-
tet haben, sind beinahe zwei Jahre vergangen, und es hat sich viel getan. Damals
haben wir in unseren Beispielen die Version 5.6.2 verwendet, in dieser Ausgabe wer-
den wir uns auf das aktuelle Release 5.6.12 konzentrieren. Diese Developer-Version
MySQL 5.6.2 war in der letzten Ausgabe noch nicht offiziell für den professionellen
Einsatz freigegeben. Inzwischen ist diese Vorsichtsmaßnahme jedoch nicht mehr
gültig, und nun können Sie auch in kritischen Umgebungen alle neuen Features ein-
setzen. Der Versionssprung von MySQL 5.5 auf 5.6 umfasst viele Neuigkeiten, die wir
Ihnen in diesem Buch vorstellen möchten. Zu den bemerkenswertesten Neuerungen
zählen vor allem deutliche Performancesteigerungen – vor allem in Zusammenhang
mit der InnoDB Storage Engine –, ein noch schlauerer Optimierer, bessere Skalierbar-
keit und eine erhöhte Sicherheit. Mit der aktuellen Version 5.6.12 wagt MySQL sich in
neue Gefilde und entert den Bereich der NoSQL-Datenbanken. Dem Schlagwort
NoSQL sind Sie sicher schon begegnet, es ist schließlich in aller Munde. NoSQL (Not
Only SQL) bezeichnet ein sehr flexibles Datenbankmodell, das insbesondere auf Ska-
Vorwort
19
lierung ausgelegt ist. Details dazu finden Sie in Teil III, »Programmierung«, und dort
in Kapitel 13, »NoSQL mit MySQL«.
Die Autoren
Stefan Pröll (Dipl.-Ing.), Jahrgang 1983, studierte in Innsbruck und Madrid Informatik
und spezialisierte sich dabei im Masterstudiengang auf Datenbanken und Informati-
onssysteme. Während seines Studiums absolvierte er mehrere Praktika im In- und
Ausland bei internationalen Organisationen und Unternehmen im Bereich Wissen-
schaftskommunikation, Webentwicklung und Datenbankadministration. Seit 2009
lebt er in Wien, wo er Wirtschaftsingenieurswesen an der Technischen Universität
Wien als zweites Masterstudium studiert und zusätzlich im Bereich der Linux-Ser-
veradministration bei privaten Unternehmen gearbeitet hat. Seit 2011 ist er wissen-
schaftlicher Mitarbeiter und Doktorand bei einem auf IT-Sicherheit spezialisierten
Forschungszentrum. Dort beschäftigt er sich mit aktuellen Fragen in den Bereichen
Digital Preservation, e-Science und Business Processes. In seiner Freizeit treibt er
gelegentlich Sport, hört leidenschaftlich gerne Soul-, Funk- und Jazzmusik, geht ins
Theater und reist, wann immer die Zeit es zulässt.
Dr. Eva Zangerle studierte Informatik an der Universität Innsbruck in Österreich.
Dabei spezialisierte sie sich während ihres Masterstudiums auf den Bereich der
Datenbanken. In ihrer Masterarbeit entwickelte sie neue Techniken, um komplexe
Datenstrukturen, wie graphbasierte Wissensdarstellungen, in Datenbanken opti-
miert zu verarbeiten. Seit 2007 arbeitet sie als wissenschaftliche Mitarbeiterin am
Lehrstuhl für Datenbanken und Informationssysteme am Institut für Informatik der
Universität Innsbruck. Dabei beschäftigt sich ihre Forschung und Lehre mit der Ent-
wicklung von neuen Methoden zur Personalisierung – sogenannten Recommender-
Systemen – und der damit verbundenen intelligenten Datenspeicherung. Die von ihr
entwickelten Techniken und Verfahren wurden bereits auf zahlreichen internationa-
len Konferenzen veröffentlicht.
Neben der Forschung und Lehre von neuartigen Datenbanksystemen setzt Eva Zan-
gerle aber bereits seit 2002 auf MySQL, mit dem sie zahlreiche erfolgreiche Projekte
im universitären Umfeld realisierte.
Wolfgang Gassler (Dipl.-Ing.) absolvierte das Informatikstudium an der Universität
Innsbruck in Österreich und ist seit 2007 wissenschaftlicher Mitarbeiter in der For-
schungsgruppe Datenbanken und Informationssysteme an der Universität Inns-
bruck. Er beschäftigt sich in seiner Forschung mit neuen Datenbanktechnologien
und neuartigen Verfahren zur optimierten Wissensspeicherung und Analyse.
Seit 1999 arbeitet er mit dem Datenbanksystem MySQL – damals in der Version 3.21 –
und der zu dieser Zeit in Tirol/Österreich beinahe unbekannten Programmiersprache
Vorwort
20
PHP in der Version 3. Seit dieser Zeit, als einer der ersten PHP-Entwickler in Tirol, ist er
in zahlreichen Softwareprojekten – vorrangig in den Bereichen Web und Mobile – bis
heute als Entwicklungsleiter oder in beratender Funktion tätig.
Die Verbindung zwischen Forschung und Wirtschaft ist ihm ein großes Anliegen,
und so arbeitet er auch heute noch neben seiner wissenschaftlichen und lehrenden
Tätigkeit an der Universität Innsbruck an Projekten in der Wirtschaft.
49
2
Kapitel 2
Datenbankmodellierung
Dieses Kapitel behandelt die Grundlagen der Datenbankmodellierung.
Sie lernen, wie Sie jene Anforderungen, die Sie an Ihre Datenbankan-
wendung stellen, identifizieren, abstrahieren und sowohl im Modell
als auch in der Datenbank umsetzen können.
Am Anfang einer jeden Datenbankanwendung steht immer der Entwurf des zugrun-
deliegenden Datenbankmodells. In diesem Kapitel lernen Sie die notwendigen
Schritte kennen, mit denen Sie ein Konzept in ein passendes Datenbankmodell
umsetzen. Sie werden anhand eines praktischen Anwendungsbeispiels sehen, wie Sie
die notwendigen Phasen erfolgreich durchlaufen, und so alle Aspekte, von den Vor-
überlegungen bis hin zum konkreten Datenbankenschema in MySQL, nachvollziehen
können.
2.1 Einführung in den Datenbankentwurf
Datenbanken werden zur Lösung und Unterstützung von vielschichtigen Aufgaben
und Problemen eingesetzt. Überall dort, wo viele Daten anfallen, die geordnet und
strukturiert aufbewahrt und zuverlässig verfügbar sein müssen, werden diese Sys-
teme verwendet. Denken Sie beispielsweise an die Personalverwaltung, die Buchhal-
tung oder auch an die Lagerlogistik. Datenbanken sind dazu gedacht, Vorgänge der
realen Welt in einem Schema abzubilden, mit Hilfe dessen bestimmte Aufgaben
umgesetzt werden können. MySQL ist ein sogenanntes relationales Datenbanksys-
tem, für das bestimmte Anforderungen gelten, wie wir sie in Kapitel 5, »Architektur«,
ausführlich darstellen. Sofern wir es nicht anders betonen, handelt es sich auch bei
allgemeinen Beschreibungen immer um diesen Datenbankentyp.
Damit Datenbanken der Aufgabe der Abbildung gerecht werden, müssen kleine Aus-
schnitte der Umwelt abstrahiert und in eine einheitliche Darstellungsform um-
gewandelt werden. Unter diesem Vorgang der Abstraktion versteht man das Mo-
dellieren eines Prozesses der realen Welt mit Hilfe eines Datenbankenmodells. Ein
solcher Ausschnitt der Umwelt ist beispielsweise die Adress- und Mitgliedsverwal-
tung eines Vereins, das Management eines Unternehmens oder das Betreiben eines
Newsportals im Web. Der Datenbankentwurf beschäftigt sich also mit der Frage, wie
ein Ausschnitt der Wirklichkeit in einer Datenbank abgebildet werden kann.
2 Datenbankmodellierung
50
Die Schwierigkeit der Abstraktion besteht darin, alle relevanten Eigenschaften, die
einen bestimmten Ausschnitt der Wirklichkeit ausmachen, zu identifizieren und in
ein konzeptionelles Schema zu übertragen. Wie der Name andeutet, beschreibt ein
konzeptionelles Schema die zugrundeliegende Idee, nicht jedoch die konkrete
Ausprägung eines Objekts der realen Welt. Abstraktion ist daher immer eine Verall-
gemeinerung und dient der Vereinfachung komplexer Sachverhalte. Der Datenbank-
entwurf besteht aus mehreren Phasen, die für die Modellierung notwendig sind.
Diese stellen wir nun vor.
2.1.1 Anforderungsanalyse
Die Grundlage eines soliden Modellentwurfs ist es, die Anforderungen und den
eigentlichen Sinn und Zweck des Einsatzes eines Datenbankmanagementsystems zu
analysieren und sich klarzumachen, welche Aspekte eines Ausschnitts der realen
Welt überhaupt abgebildet werden müssen, also welche Ausschnitte relevant für die
Modellierung in einer Datenbank sind. Oftmals sind diese Abbildungen Geschäfts-
prozesse eines Unternehmens, die abstrahiert werden sollen. Diese Geschäftspro-
zesse werden in den allermeisten Fällen durch eine Software abgebildet, die den
Benutzer bei seiner täglichen Arbeit unterstützt.
Die Datenbank selbst ist Teil dieses Softwaresystems und speichert die abstrahierten
Objekte der abgebildeten Modellwelt ab. Unter Objekten versteht man in diesem
Kontext jene Gegenstände oder Sachverhalte, die durch den Vorgang der Abstraktion
mittels einer allgemeineren Beschreibung im Datenbanksystem gespeichert werden
sollen. Diese Objekte sind für die Software dauerhaft verfügbar. Die Software bzw. der
Anwender können neue Objekte anlegen, vorhandene verändern und nicht mehr
benötigte Daten aus der Datenbank löschen. Damit diese Objekte adäquat umgesetzt
werden können, müssen sie vom Benutzer bzw. von den Softwareentwicklern in
einer Art und Weise beschrieben werden, die vom Datenbankmanagementsystem
verstanden wird.
Zuallererst müssen Sie daher, gemeinsam mit Ihren Mitarbeitern und Kollegen,
Informationen sammeln, welche Anforderungen genau Ihr Datenbankmanagement-
system umsetzen muss. Innerhalb dieses Prozesses erstellen Sie ein strukturiertes
Dokument, in dem Sie alle Funktionen und Methoden festhalten, die Ihr System
bereitstellen soll. Wichtig ist hierbei, dass all die Punkte, die Sie sich notieren, nach-
vollziehbar und vollständig sind. Ob Sie dabei spezielle Tools, Mindmaps, Karteikar-
ten oder ein gewöhnliches Word-Dokument einsetzen, bleibt ganz allein Ihnen
überlassen, solange Sie alle Aspekte sorgfältig spezifizieren.
Wenn Sie sich an das sehr einfach gehaltene Motivationsbeispiel aus dem ersten
Kapitel erinnern, dann muss ein Datenbanksystem die Anforderungen der Vereins-
verwaltung unterstützen. Dazu müssen die notwendigen Objekte abstrahiert werden.
2.1 Einführung in den Datenbankentwurf
51
2
In dem Beispiel handelt es sich bei diesen Objekten um die Daten der Vereinsmit-
glieder. Die Datensätze müssen, neben weiteren Informationen, mindestens den
Namen und das Geburtsdatum der Mitglieder abbilden können. Des Weiteren muss
das System grundlegende Funktionen wie das Einfügen, Bearbeiten und Löschen von
Mitgliedsdaten beherrschen.
Die Beschreibung dieser und weiterer Anforderungen kann rein textuell, auch ohne
Formalismus erfolgen. Wichtig ist nur, dass Sie all jene Informationen festhalten, die
Ihr Datenbanksystem später aufnehmen und verarbeiten soll. Um diesen Vorgang an
einem etwas komplexeren Beispiel zu demonstrieren, stellen wir im späteren Teil
dieses Kapitels das Szenario einer Flughafenverwaltung vor, anhand dessen Sie die-
sen Vorgang nachverfolgen können.
2.1.2 Konzeptioneller Datenbankentwurf
Der nächste Schritt der Datenbankmodellierung ist der konzeptionelle Datenbank-
entwurf. Ziel dieser Phase ist es, die während der Anforderungsanalyse gewonnenen
Erkenntnisse unabhängig von der konkreten Implementierung in einem Datenbank-
entwurf darstellen zu können. Die im vorherigen Schritt gewonnenen Informa-
tionen über die gewünschten Fähigkeiten des Datenbanksystems werden im
konzeptionellen Entwurf oder Design mit Hilfe eines Modells genauer beschrieben
und in einer unmissverständlichen Form spezifiziert. Auch hier ist die eigentliche
Wahl des Datenbanksystems, das letztendlich zum Einsatz kommen wird, noch irrele-
vant, da ein solches Modell unabhängig von der konkreten Umsetzung ist. In diesem
Schritt übersetzen Sie die in der Anforderungsanalyse erstellte Liste von Aufgaben
und Fähigkeiten, die Ihr Datenbankmanagementsystem umsetzen muss, in ein
standardisiertes Datenbankmodell.
Um eine einheitliche Beschreibung der gewonnenen Anforderungen zu ermögli-
chen, werden unterschiedliche Modellierungsverfahren eingesetzt. Diese Verfahren
erlauben eine genauere Beschreibung der mit Hilfe des Datenbanksystems zu lösen-
den Aufgaben. Das bekannteste dieser Modelle ist sicherlich das Entity-Relationship-
Modell (ER-Modell), das wir im Laufe des Kapitels noch detailliert beschreiben
werden.
Sprechende Namen
Wenn Sie während des Modellentwurfs beginnen, Ihre Entitäten und deren Eigen-
schaften festzulegen, sollten Sie bereits hier »sprechende Namen« für alle Bezeich-
ner wählen. So erkennen andere Mitarbeiter und Kollegen bereits am Namen einer
Datenbank und an den Bezeichnern einer Tabelle, einer Funktion oder Variablen,
was das betreffende Objekt für eine Funktion erfüllt. Vermeiden Sie auf jeden Fall
2 Datenbankmodellierung
52
2.1.3 Logischer Datenbankentwurf
Ist das grundlegende Modell aus dem konzeptionellen Entwurf fertiggestellt, dann
folgt als nächste Phase der logische Datenbankentwurf. Darunter versteht man die
Modellierung des zuvor entworfenen Schemas mit Hilfe jenes Datenbankmanage-
mentsystems, das zum Einsatz kommen soll. In diesem Fall ist das MySQL als DBMS
und SQL als Data Definition Language (DDL). Ab diesem Modellierungsschritt ist der
Modellentwurf nicht mehr unabhängig von der konkreten Modellierung, da hier die
Entscheidung für ein konkretes System – in diesem Fall MySQL – bereits gefallen ist.
In dieser Entwurfsphase erfolgt auch die Umsetzung in das relationale Datenmodell,
das Gegenstände aus der realen Welt in Tabellen und Beziehungen zwischen Tabel-
len, sogenannte Relationen, übersetzt. Hier erfolgt also die Übersetzung des unab-
hängigen ER-Modells in jene Sprache, die von MySQL verstanden werden kann.
Dieser Transformationsschritt vom konzeptionellen Modell in das logische Modell
kann entweder manuell oder automatisch durch Tools geschehen. In diesem Buch
erfolgt diese Umwandlung manuell, damit wir auf die Feinheiten in diesem Schritt
eingehen können. Mehr dazu erfahren Sie in Abschnitt 2.3, »Das relationale Daten-
bankmodell«.
2.1.4 Physischer Datenbankentwurf
In der vierten und letzten Phase des Datenbankentwurfs geht es um den physischen
Datenbankentwurf und damit um die Art und Weise, wie die Daten konkret auf der
Hardware des Datenbankservers durch das DBMS gespeichert werden. Diese Phase
dient unter anderem der Performancesteigerung, indem die Besonderheiten von
Daten- und Indexstrukturen sowie die Eigenheiten des Serverbetriebssystems und
der Hardware analysiert und ausgenutzt werden, um die Leistung zu erhöhen.
Details zum Datenbanktuning finden Sie in Kapitel 9, »Anfrageoptimierung«.
nichtssagende Bezeichnungen wie »tabelle1« oder »testDB«, denn Sie werden in
wenigen Wochen nicht mehr wissen, was die betreffende Tabelle bzw. Datenbank
ursprünglich bezwecken sollte. Wählen Sie daher aussagekräftige Bezeichner, auch
wenn das eventuell mehr Schreibarbeit bedeutet.
Entscheiden Sie sich außerdem, ob Sie für Ihre Bezeichner und Kommentare die
englische oder deutsche Sprache wählen möchten. Mischen Sie aber keine Spra-
chen, denn das führt zu Missverständnissen und ist verwirrend. Apropos Kommen-
tare: Verwenden Sie Kommentare so oft und ausführlich wie möglich!
2.1 Einführung in den Datenbankentwurf
53
2
2.1.5 Der Datenbankentwurf im Überblick
Die vier Phasen des Datenbankentwurfs lauten:
1. Anforderungsanalyse
2. konzeptioneller Entwurf
3. logischer Entwurf
4. physischer Entwurf
Diese vier Schritte müssen nicht streng nacheinander durchlaufen werden. Vielmehr
handelt es sich dabei um ein iteratives Vorgehensmodell, bei dem Sie immer wieder
in bereits durchlaufene Phasen zurückspringen und Ihr Modell weiter verfeinern
können. Je weiter der Entwicklungsprozess jedoch fortgeschritten ist, desto aufwen-
diger werden diese Änderungen. Daher sollten Sie jeder Phase besondere Aufmerk-
samkeit widmen, um zeit- und kostenintensive Überarbeitungen zu vermeiden.
Natürlich müssen Sie insbesondere bei der Anforderungsanalyse und beim konzep-
tionellen Design intensive Rücksprache mit Ihrem Team halten, damit Sie alle
Aspekte berücksichtigen können, die Ihnen selbst vielleicht verborgen sind. In Abbil-
dung 2.1 sehen Sie diese vier Phasen schematisch dargestellt.
Abbildung 2.1 Die vier Entwurfsphasen
Anforderungsanalyse
Konzeptioneller Entwurf
Logischer Entwurf
Physischer Entwurf
2 Datenbankmodellierung
54
2.2 Ein konkretes Beispiel: Flughafenverwaltung
Um die Begriffe, die für das Verständnis und das Design von Datenbanken notwendig
sind, besser erklären zu können, ziehen wir im Folgenden ein praxisnahes Beispiel
heran. Es dient dazu, die Fachtermini einzuführen und gleich anhand einer konkre-
ten Problemstellung zu erklären. Als Beispiel wird uns die Verwaltung eines Flugha-
fens mit Hilfe einer MySQL-Datenbank dienen. Im Laufe der folgenden Kapitel
werden wir dieses Beispiel immer weiter ausbauen und verfeinern.
Stellen Sie sich die Verwaltung eines großen internationalen Flughafens vor. Flughä-
fen sind die Drehscheiben des internationalen Personen- und Güterverkehrs und aus
unserem Alltag nicht mehr wegzudenken. Es handelt sich dabei um ein komplexes
Unternehmen, das verschiedenste Geschäftsregeln umsetzen muss, um erfolgreich
und sicher wirtschaften zu können. Dazu gehören neben verschiedensten Geschäfts-
prozessen, wie der Verwaltung der Mitarbeiter, das Ticket- und Buchungssystem, die
Protokollierung aller Starts und Landungen und vieles mehr, so auch sämtliche
Informationsflüsse zwischen diesen Systemen. Um dieser Fülle an Informationen
Herr zu werden, werden zu einem Großteil Datenbanksysteme eingesetzt, die diese
Daten in ihrem Datenbankenschema speichern. Dieses Datenbankenschema legt
demnach die genaue Struktur fest, also welche Eigenschaften in welcher Form
gespeichert werden und wie die verschiedenen Elemente eines Modells zueinander
in Beziehung stehen.
Stellen Sie sich vor, in Ihrer Stadt wird ein neuer Flughafen gebaut. Er soll zukünftig
als die zentrale Achse für den aufstrebenden Tourismus, die Geschäftswelt und für
den Güterverkehr Ihrer Region dienen. Ein derart komplexes Unternehmen wie ein
internationaler Flugplatz ist auf eine effiziente und leistungsfähige IT-Infrastruktur
angewiesen, um den vielen Aufgaben gerecht zu werden. Sie als Datenbankdesigner
und Datenbankadministrator in Personalunion werden mit der Umsetzung des
Datenbanksystems für diesen Flughafen betraut. Sogleich machen Sie sich daran, die
Anforderungen für eine Flughafenverwaltungs-Datenbank herauszuarbeiten. Der
Flugplatz ist nicht nur wichtige Drehscheibe, sondern auch ein beliebter Arbeitgeber
in der Region, der für viele Angestellte einen sicheren Arbeitsplatz bereitstellt. Ihr
Design muss daher neben den Aspekten des Flugbetriebes auch die Anforderungen
einer Personalverwaltung erfüllen, denn die Mitarbeiter sind verschiedenen Aufga-
ben wie Verwaltung, Bodenpersonal, Luftpersonal oder Sicherheitspersonal zugeord-
net. Auch deren Daten sollen mit Ihrem Datenbanksystem verwaltet werden.
Für das Management der komplexen Abläufe an einem Flughafen müssen Sie selbst-
verständlich alle Bereiche abdecken, die mit dem Tagesgeschäft an sich – den Flügen –
zusammenhängen. Daher müssen nicht nur die Flüge, die den Flughafen anfliegen,
sondern auch sämtliche startenden Maschinen erfasst werden. Doch damit nicht
genug: Um die Start- und Landezeiten an den internationalen Flugverkehr anpassen
2.3 Das relationale Datenbankenmodell
55
2
und optimieren zu können, muss in Ihrer Datenbank ein vollständiger Flugplan vor-
handen sein. Auch dieser wird mit Ihrem System verwaltet. Die Flüge werden eben-
falls mit der Datenbank verwaltet, indem jeweils eine eindeutige Flugnummer, Start-
und Landeflughafen und weitere Details festgehalten werden.
An dem Flughafen operieren mehrere Fluglinien, die diesen Flugplatz als Heimat-
flughafen verwenden, von dem aus sie ihre Flüge abwickeln. Dazu gehört neben der
Verwaltung der Fluglinien natürlich auch ein System für die Erfassung der Flotte
jeder Fluglinie. Da Sie den lokalen Flugplatz auch im Internet präsentieren wollen,
stellen Sie eine Webseite mit dynamischem Inhalt zur Verfügung, die nicht nur den
Flugplatz selbst, sondern auch die einzelnen Flugzeuge der Fluglinien beschreibt.
Doch was wäre ein neuer Flughafen ohne Kunden? Daher müssen Sie alle Passagiere
samt ihren Daten im System erfassen. Aus diesem Grund ist die Passagierliste ein
weiteres zentrales Element für die Verwaltung des Flughafens mit dem Datenbank-
system. Schließlich werden hier sämtliche Daten der Passagiere – von Vorname bis
E-Mail-Adresse – erfasst und geprüft.
Diese Passagiere können Flüge buchen, eine wichtige Funktion, die Ihr System unbe-
dingt erfüllen muss. Auch hier müssen Sie viele Details berücksichtigen. Mehr dazu
erfahren Sie, nachdem wir das relationale Datenbankenmodell vorgestellt haben.
2.3 Das relationale Datenbankenmodell
Das relationale Datenbankmodell ist die theoretische Grundlage von sehr vielen
aktuellen Datenbankmanagementsystemen, und es wird auch bei MySQL eingesetzt.
Das relationale Datenbankmodell basiert auf der relationalen Algebra, die selbst
wiederum auf der mathematisch exakt definierten Mengentheorie aufbaut. Das ist
wichtig, denn durch das robuste mathematische Fundament lassen sich die Abfrage-
operationen auf beweisbare Operationen der Mengenlehre zurückführen und liefern
daher korrekte Ergebnisse. Da detaillierte Kenntnisse des mathematischen Formalis-
mus jedoch nicht zwingend notwendig sind, um gute Datenbankdesigns zu entwi-
ckeln, greifen wir nun auf die anschaulichere Darstellung von Relationen als Tabellen
zurück. Im Folgenden benutzen wir die Begriffe Tabelle und Relation daher synonym.
2.3.1 Tabellen, Spalten und Zeilen
Wie Sie bereits wissen, werden Gegenstände aus der realen Welt in Tabellen nach-
empfunden. So wie Sie zum Beispiel auch in den Tabellen eines Tabellenkalkulations-
programms wie Microsoft Office Excel oder OpenOffice Calc zusammengehörige
Datensätze erfassen, werden in einer Datenbank ebenfalls Daten in einer Tabelle
zusammengefasst, die über gemeinsame Eigenschaften verfügen. Eine Tabelle stellt
2 Datenbankmodellierung
56
Daten, die in einem Zusammenhang stehen, zueinander in Beziehung – sie setzt sie
in Relation zueinander. Eine Datenbank bündelt diese Tabellen zu einer Einheit; eine
Tabelle kann nicht für sich allein, ohne Datenbank existieren. Beachten Sie, dass der
Begriff der Datenbank nicht gleichbedeutend mit dem Datenbankmanagementsys-
tem MySQL ist, sondern ein Teil dessen.
Eine Tabelle ist eine zweidimensionale Datenstruktur, die aus Zeilen und Spalten
besteht. Jede Tabelle hat einen eindeutigen Namen, den Bezeichner (englisch identi-
fier). Dieser Bezeichner wird allgemein auch Tabellenname genannt, und er muss
innerhalb einer Datenbank eindeutig sein. Zwei Tabellen innerhalb ein und derselben
Datenbank dürfen also keinen identischen Bezeichner haben. Eine Tabelle besteht aus
mehreren Spalten, die selbst wiederum alle einen eigenen Bezeichner haben.
Betrachten Sie das obige Beispiel für eine Tabelle im Flughafenszenario (Tabelle 2.1).
Diese Tabelle stellt einen Ausschnitt der Passagierliste für einen Flug dar und ist
daher ein zentrales Element für die Flugverwaltung. In der ersten Zeile befinden sich
die Tabellenüberschriften, die gleichzeitig die Spaltennamen darstellen. Jede dieser
Spalten steht für eine Eigenschaft des abzubildenden Objekts – in diesem Fall ist die-
ses Objekt ein Passagier. Diese Eigenschaften werden auch als Attribute bezeichnet,
und sie fassen jene Informationen über konkrete Passagiere zusammen, die für die
Verwaltung des Flughafens notwendig sind. In diesem Ausschnitt sind diese Attri-
bute die eindeutige Passnummer, der Vor- und der Nachname des Passagiers sowie
dessen Geburtsdatum und die Anschrift.
Eine Reihe oder Zeile in einer Tabelle steht für die Abbildung eines konkreten Objekts
aus der realen Welt innerhalb der Datenbank. Ein Passagier besteht aus der Tabellen-
perspektive aus Attributen wie Passnummer, Vor- und Nachname und weiteren per-
sönlichen Details eines wirklichen Passagiers. Beispielsweise ist die Zeile mit der
Passnummer P12233445, dem Vornamen Edgar und dem Nachnamen Zetmann, dem
Geburtsdatum 17.07.1982 sowie der Anschrift ein kompletter Datensatz, der genau
einen Passagier beschreibt und im Normalfall genau einmal innerhalb einer Tabelle
Passnummer Vorname Nachname Geburtsdatum Anschrift
P12345678 Ada Betha 28.11.1984 Adresse 1
P12233445 Edgar Zetmann 17.07.1982 Adresse 2
P11122233 Gabriel Deltram 12.01.1983 Adresse 3
P12345123 Jonas Kapper 01.03.1980 Adresse 4
P54321123 Etha Thees 21.08.1979 Adresse 5
Tabelle 2.1 Passagiertabelle
2.3 Das relationale Datenbankenmodell
57
2
vorhanden ist, er ist also eindeutig. Datensätze werden auch als Tupel bezeichnet. In
diesem konkreten Beispiel wird diese Eindeutigkeit durch den Bezug auf die Pass-
nummer dargestellt, die weltweit genau ein einziges Mal für eine Person vergeben
wird. Obwohl zwei Passagiere denselben Namen tragen, werden sie anhand der Pass-
nummer unterschieden. Für Datenbanksysteme ist es von entscheidender Wichtig-
keit, dass ein Datensatz eindeutig von allen anderen Datensätzen unterscheidbar ist
– wie sonst sollten Verwechslungen zwischen verschiedenen Passagieren vermieden
werden, wenn nicht jeder einzelne eindeutig identifizierbar wäre.
Eine Datenbank selbst umfasst mindestens eine Tabelle. Selbstverständlich kann
eine Datenbank nicht nur eine, sondern beliebig viele Tabellen enthalten, solange
diese voneinander unterscheidbar sind und daher eindeutige Bezeichner aufweisen.
Außerdem muss natürlich genügend Speicherplatz auf dem Server zur Verfügung
stehen.
Die Darstellung von Daten in Tabellen und deren Zusammenfassung in Datenban-
ken hat einen triftigen Grund. Wie bei allen Anwendungen in der Informatik ist auch
hier die Mathematik nicht weit. Denn auch diese anschauliche Darstellungsform hat
ihre Entsprechungen im mathematischen Formalismus. So werden Tabellen als Rela-
tionen, Spalten als Attribute und Zeilen als Tupel bezeichnet. Das Ziel dieses Forma-
lismus ist es, mathematische Operationen der Mengenlehre auf die Daten der Tabelle
anwenden zu können. Die Konsequenzen dafür sind weitreichend, wenn es zum Bei-
spiel um die Verbindung mehrerer Tabellen (Kreuzprodukt), um Sortierreihenfolgen
oder Schlüssel geht. Wann immer es nötig sein sollte, erfahren Sie davon in den
jeweiligen Abschnitten. Auch wenn dieses Hintergrundwissen nicht zwingend für
den praxisnahen Entwurf von Datenbankenmodellen notwendig ist, wird es Ihnen
leichter fallen, wenn Sie den Begriffen hier schon einmal begegnet sind.
2.3.2 Schlüssel identifizieren Datensätze
Wie Sie im vorangegangenen Abschnitt bereits erfahren haben, ist es für das Daten-
bankmanagementsystem unerlässlich, die einzelnen Datensätze voneinander unter-
scheiden zu können. Daher hat jede Datenbank innerhalb eines DBMS einen
eindeutigen Namen, jede Tabelle innerhalb der Datenbank besitzt ebenfalls einen
eindeutigen Bezeichner, und auch jede Spalte innerhalb der Tabelle ist eindeutig
benannt, sofern diese Spalte nicht als Schlüssel dient. Auch der Inhalt der Tabellen –
jeder einzelne Datensatz – muss eindeutig sein. Nur durch eindeutige Datensätze
kann sichergestellt werden, dass es zu keinen Verwechslungen kommt, was im realen
Leben zu fatalen Folgen führen kann. Stellen Sie sich vor, jemand mit nicht ganz so
weißer Weste hätte zufällig denselben Namen wie Sie, und das System rät nun, wer
von Ihnen beiden am Flughafen den Sicherheitscheck passieren möchte ...
2 Datenbankmodellierung
58
Um solche Fehler zu vermeiden, verlassen sich Datenbanken lieber gar nicht auf
»Ratespielchen«, sondern setzen auf das Konzept von Schlüsseln. Ein Schlüssel iden-
tifiziert die Zeile einer Tabelle eindeutig durch einen oder mehrere Werte. Diese
Werte werden so gewählt, dass sie allein oder auch in Kombination nur ein einziges
Mal innerhalb einer Tabelle vorkommen können. Dadurch wird sichergestellt, dass
es keine Zweifel gibt, welcher Datensatz gemeint sein könnte. Wie wir beim vorheri-
gen Beispiel schon gesehen haben, reicht bei Passagieren die Kombination aus Vor-
und Nachname nicht aus, um sicherzustellen, dass ein Passagier eindeutig identifi-
zierbar ist. Auch wenn Sie einen ausgefallenen Namen haben, kann Ihnen niemand
garantieren, dass nicht noch jemand Eltern mit einem Hang zur kreativen Namens-
findung hatte. Anders sieht es mit der Passnummer aus. Da sie von staatlicher Seite
nur genau einmal vergeben wird, schützt sie vor Verwechslungen. Die Passnummer
ist daher ein Attribut, das als Schlüssel geeignet ist.
Somit ist es wichtig, Attribute zu finden, die als Schlüssel eingesetzt werden können,
denn dadurch sind Verwechslungen per Definition ausgeschlossen. Zahlen eignen
sich für diesen Zweck hervorragend, da sie auch automatisch vergeben werden kön-
nen. So kann für jeden neuen Eintrag beim Anlegen die nächsthöhere Nummer zuge-
wiesen werden. Aus diesem Grund werden oftmals künstliche Schlüssel vergeben,
wie Sie im späteren Tutorial noch sehen werden. Dieser Mechanismus wird sehr häu-
fig eingesetzt, da er leicht zu handhaben ist und von MySQL unterstützt wird. Ge-
nerell können für Schlüssel nicht nur einzelne Attribute – wie oben nur die
Passnummer –, sondern auch Kombinationen von Attributen verwendet werden,
solange diese Kombination als Gesamtheit eindeutig ist.
2.3.3 Die relationale Algebra
Nachdem Sie im einleitenden Teil von Abschnitt 2.3 schon mit den grundlegenden
Begriffen der relationalen Datenbanken in Berührung gekommen sind, folgt nun
eine exaktere Definition. In der Einleitung haben Sie gelernt, dass Sie sich Relationen
als Tabellen vorstellen können. Der Begriff der Relation stammt aus der relationalen
Algebra, einem Teilgebiet der Mathematik. Mit Hilfe der relationalen Algebra können
Anfragen an das definierte Datenbankenschema gestellt werden. Sie stellt verschie-
denste Operationen bereit, die selbst wiederum Teilmengen bzw. Ergebnismengen
zurückliefern, die beinahe beliebig kombiniert und verknüpft werden können. Die
relationale Algebra arbeitet demnach nicht mit einzelnen Zahlen, sondern mit Men-
gen bzw. Teilmengen. Sie können sich eine Tabelle auch als Menge im mathemati-
schen Sinn vorstellen, deren Elemente die einzelnen Datensätze sind. Auf diese
Menge werden verschiedene Operationen angewendet, die als Ergebnis ebenfalls
eine Menge zurückliefern. Diese Ergebnismengen sind wiederum Ausschnitte oder
Kombinationen der Ausgangstabellen. Der folgende Abschnitt soll einen kurzen
Überblick über die Materie der relationalen Algebra vermitteln.
2.3 Das relationale Datenbankenmodell
59
2
Eine Relation bezeichnet eine Beziehung zwischen Dingen, die etwas gemeinsam
haben. Dabei werden verschiedene Eigenschaften eines Objekts – die Attribute –
zusammengefasst. Diese Attribute haben jeweils bestimmte Wertebereiche, um
bestimmte Informationen in sich aufnehmen zu können. Analog zu den Tabellen
entspricht ein Attribut einer Spalte innerhalb einer Tabelle. Innerhalb einer Spalte
stehen lauter Daten, die denselben Wertebereich aufweisen. Eine Relation besteht
daher aus einer Kombination von Attributen, genauso wie eine Tabelle aus mehreren
Spalten besteht.
Um einen Schlüssel für Ihre Datenbanktabelle zu finden, müssen Sie jene Attribute
finden, die für sich allein oder zusammengenommen jeden einzelnen Datensatz ein-
deutig identifizieren. Um einen solchen Schlüssel zu finden, müssen Sie alle Attri-
bute einer Tabelle betrachten und jene auswählen, die für die Identifikation eines
Datensatzes unbedingt notwendig sind. Beginnen Sie beispielsweise mit der Passa-
giertabelle und den drei Attributen Passnummer, Vor- und Nachnamen. Diese drei Attri-
bute legen einen Passagier eindeutig fest und sind somit als Schlüssel geeignet. Im
Gegensatz dazu hängt das Geburtsdatum von den ersten drei Attributen ab. Erst
durch diese drei Daten gemeinsam wird das Geburtsdatum eindeutig, da es im obi-
gen Beispiel zwei Passagiere mit demselben Geburtsdatum gibt. Diese Abhängigkeit
von Attributen wird als funktionale Abhängigkeit (englisch functional dependency)
bezeichnet und ist ein zentraler Begriff der relationalen Algebra. In Abschnitt 2.5,
»Normalformen«, wird er Ihnen erneut begegnen.
Die drei Attribute Passnummer, Vorname und Nachname werden auch als Super-
schlüssel bezeichnet, da sie jeden Datensatz eindeutig bestimmen. Doch auch wenn
die Bezeichnung »Superschlüssel« hervorragend klingt, so ist diese Kombination von
Schlüsseln noch nicht ideal. Wie Ihnen sicher schon aufgefallen ist, kann jeder Daten-
satz nämlich nicht nur durch diese drei Attribute identifiziert werden, sondern es ist
viel weniger notwendig. Selbst eine Kombination von Passnummer und Vorname
oder auch eine von der Passnummer mit dem Nachnamen sind ein eindeutiger
Schlüssel. All diese Teilkombinationen werden als Schlüsselkandidaten bezeichnet,
da sie als potentielle Schlüssel eingesetzt werden können. Doch sind diese beiden
ebenfalls nicht minimal, weil es noch einen einfacheren Schlüssel gibt: die Passnum-
mer. Sie allein reicht aus, um jeden Passagier eindeutig in der Passagierliste wieder-
zufinden. Die einfachste und kürzeste aller Kombinationen von Attributen, die alle
Datensätze voneinander unterscheidbar macht, wird als Primärschlüssel bezeichnet.
In diesem Beispiel ist diese Erkenntnis trivial, weil Passnummern für jeden Men-
schen individuell und eindeutig vom Staat vergeben werden. Im Allgemeinen gilt es
jedoch, immer den minimalsten (kleinsten) aller eindeutigen Schlüssel zu finden,
und das ist nicht immer so einfach wie in diesem Beispiel. Es gibt auch Fälle, in denen
Sie selbst keinen eindeutigen Schlüssel vergeben können oder wollen. Wenn Sie zum
2 Datenbankmodellierung
60
Beispiel eine Adressverwaltung planen, wie sie für eine Kundenverwaltung einge-
setzt wird, dann haben Sie vermutlich kein eindeutiges Schlüsselattribut zur Verfü-
gung, von dem Sie sicher sein können, dass es nur genau ein einziges Mal auftritt.
Diese Eindeutigkeit ist, wie wir bereits erörtert haben, jedoch notwendig, um die
Datensätze zuverlässig voneinander unterscheiden zu können. In diesen Fällen kön-
nen Sie sich mit einem künstlichen Primärschlüssel behelfen, den das System selb-
ständig und automatisch vergibt. Ein solcher künstlicher Primärschlüssel könnte
beispielsweise eine Kundennummer sein, die automatisch vom System vergeben
wird. Auch MySQL unterstützt die automatische Vergabe von Schlüsseln, in dem
neu angelegte Datensätze fortlaufend durchnummeriert werden. Dadurch stellt das
System sicher, dass jeder Datensatz anhand dieses künstlichen Schlüssels identifi-
ziert werden kann. Wie Sie eine solche Schlüsselspalte definieren, erfahren Sie in
Abschnitt 2.4.2, »Entitäten«.
Mit Hilfe der relationalen Algebra wird auch die Art und Weise definiert, wie die
Datensätze aus der Datenbank wiedergewonnen werden können. Wie Sie sich vor-
stellen können, ist es von herausragender Bedeutung, diesen Mechanismus exakt
beschreiben zu können, um einmal gespeicherte Daten auch zuverlässig auslesen zu
können, denn ohne diese Funktion wären Datenbanken schwarze Löcher, in die
Daten zwar hinein-, jedoch nie wieder herausgelangen können.
Zwei der grundlegenden Operationen sind die Projektion und die Selektion von
Daten. Unter einer Projektion versteht man die Einschränkung der Ergebnismenge
auf ausgewählte Spalten einer Tabelle. Angenommen, Sie planen eine Werbeaktion,
innerhalb deren Sie Kunden zu ihrem Geburtstag besondere Vergünstigungen per
Post schicken möchten. Dann interessiert Sie besonders Anschrift und natürlich das
Geburtsdatum der Kunden, nicht aber ihre Passnummer. Anstatt nun alle Spalten
aus der Tabelle auszulesen, beschränken Sie sich auf den Vor- und den Nachnamen,
das Geburtsdatum sowie die Anschrift der Kunden. Der Übersichtlichkeit halber fas-
sen wir hier die genaue Adresse in nur einer Spalte – der Anschrift – zusammen.
Diese Projektion wird in der Literatur oftmals mit Hilfe des griechischen Buchsta-
bens �, dem Pi, gekennzeichnet. Formal wird folgende Schreibweise angegeben:
�Attribute (Tabelle)
Dabei werden jene Attribute, die ausgewählt werden sollen, hinter den Operanden �
geschrieben und die Tabelle, aus der die Daten stammen, in Klammern angeführt.
Im konkreten Beispiel lautet die Projektion für den Vor- und Nachnamen, das
Geburtsdatum sowie die Anschrift daher
�Vorname, Nachname, Geburtsdatum, Anschrift (Passagierliste)
um damit jene Spalten anzugeben, die für eine spezielle Abfrage benötigt werden.
Dabei müssen selbstverständlich jene Attribute, die angegeben werden, auch in der
2.3 Das relationale Datenbankenmodell
61
2
Relation vorhanden sein. Mit Hilfe der Projektion können also neue Tabellen aus
bereits vorhandenen Datentabellen erzeugt werden, indem manche Spalten wegge-
lassen werden.
Die Ergebnistabelle enthält nun nur mehr jene Spalten, die für diese Anfrage relevant
sind. Die Projektion blendet also nicht benötigte Spalten einfach aus (siehe Tabelle 2.2).
Aus der gesamten Beispieltabelle erhalten wir nach der Projektion die Teilansicht aus
Tabelle 2.3.
Während bei der Projektion die Auswahl der gewünschten Daten vertikal erfolgt (ein-
zelne Spalten werden ausgewählt), handelt es sich bei der Selektion um eine horizon-
tale Beschränkung der Ergebnismenge. Mit Hilfe der Selektion können einzelne
Zeilen einer Relation ausgewählt oder ausgeblendet und somit in die Ergebnismenge
aufgenommen bzw. weggelassen werden. Um bei dem Geburtstagsaktionsbeispiel zu
bleiben, sollen nur jene Passagiere ausgewählt werden, deren Geburtstag nach Juni
liegt, um nur jene Passagiere zu bewerben, die innerhalb des kommenden halben
Jahres Geburtstag haben. Selektionen werden meist mit dem griechischen Buchsta-
Passnummer Vorname Nachname Geburtsdatum Anschrift
P12345678 Ada Betha 28.11.1984 Adresse 1
P12233445 Edgar Zetmann 17.07.1982 Adresse 2
P11122233 Gabriel Deltram 12.01.1983 Adresse 3
P12345123 Jonas Kapper 01.03.1980 Adresse 4
P54321123 Etha Thees 21.08.1979 Adresse 5
Tabelle 2.2 Die gesamte Beispieltabelle
Vorname Nachname Geburtsdatum Anschrift
Ada Betha 28.11.1984 Adresse 1
Edgar Zetmann 17.07.1982 Adresse 2
Gabriel Deltram 12.01.1983 Adresse 3
Jonas Kapper 01.03.1980 Adresse 4
Etha Thees 21.08.1979 Adresse 5
Tabelle 2.3 Die Spalte mit der Passnummer fehlt nun und gehört somit nicht zur Ergebnis-
menge.
2 Datenbankmodellierung
62
ben �, dem kleinen Sigma, gekennzeichnet, darauf folgen eine Liste der Selektionsbe-
dingungen und die Angabe der Tabelle mit den Daten, die in runden Klammern
erfolgt:
�Selektionsbedingung (Tabelle)
Das folgende Beispiel zeigt diese Auswahl am Beispiel der Passagiertabelle:
�Geburtsdatum > Juni (Passagierliste)
Auch hier wird nach dem Operatorsymbol � erneut eine Eigenschaft angegeben, die
von der gesuchten Ergebnismenge erfüllt werden muss. Dadurch werden nur jene
Zeilen bzw. Datensätze (Instanzen) einer Relation ausgewählt, die das Einschrän-
kungskriterium erfüllen. Jene Datensätze, die das gesuchte Filterkriterium nicht
erfüllen, werden ausgelassen.
Diese beiden Operationen lassen sich selbstverständlich kombinieren, denn nur
durch die Verschachtelung von verschiedenen Operationen sind komplexere Abfra-
gen möglich. Auch hier ist der gezeigte Formalismus der relationalen Algebra sehr
intuitiv und eingängig. Wenn Sie nun alle Adressen jener Passagiere ausgeben möch-
ten, die ab Juni Geburtstag haben, dann lässt sich diese Anfrage wie folgt formu-
lieren:
�Geburtsdatum > Juni (�Vorname, Nachname, Geburtsdatum, Anschrift (Passagierliste))
Wie in der Mathematik allgemein üblich, wird jener Ausdruck zuerst abgearbeitet,
der in der innersten Klammer geschrieben steht. Wie Sie gleich noch sehen werden,
kann diese Anfrage auch umgekehrt gestellt werden, indem zuerst die Selektion
durchgeführt wird. In diesem Beispiel wird demnach zuerst die Anfrage auf die vier
Spalten Vorname, Nachname, Geburtsdatum und Anschrift eingeschränkt, siehe
Tabelle 2.4.
Das Ergebnis enthält nur mehr jene Datensätze, die beide Kriterien – sowohl jene der
Selektion als auch der Projektion – erfüllen. Natürlich ist diese Vorgehensweise nicht
die einzige Möglichkeit, zu beschreiben, welche Daten aus der Datenbank ausgesucht
werden sollen. So ließe sich zum Beispiel auch die Reihenfolge der Projektion und der
Selektion vertauschen, wodurch Sie zum selben Ergebnis gelangen. Führen Sie bei-
Vorname Nachname Geburtsdatum Anschrift
Ada Betha 28.11.1984 Adresse 1
Edgar Zetmann 17.07.1982 Adresse 2
Etha Thees 21.08.1979 Adresse 5
Tabelle 2.4 Die selektierte Passagiertabelle
2.3 Das relationale Datenbankenmodell
63
2
spielsweise zuerst die Selektion aus, indem Sie nur die passenden Geburtsdaten aus-
wählen, erhalten Sie das Zwischenergebnis aus Tabelle 2.5.
Die anschließende Projektion blendet die nicht benötigte Spalte mit der Passnum-
mer aus, und das Ergebnis ist mit dem Resultat des vorigen Beispiels identisch (siehe
Tabelle 2.6).
Obwohl sich die Reihenfolge der Operatoren in diesem Beispiel nicht auswirkt, kann
die Art und Weise, ob zuerst Zeilen oder zuerst Spalten eliminiert werden, sehr wohl
Auswirkungen auf die Leistung einer Datenbank haben. Die beiden Operationen der
Selektion und der Projektion sind von zentraler Bedeutung.
Zusätzlich dazu gibt es eine Vielzahl von weiteren Operatoren, die in der relationalen
Algebra mit Hilfe der Mengenlehre definiert sind und die im Datenbanksystem
MySQL implementiert wurden. Dazu zählen beispielsweise die Vereinigung (�,
Union-Operator) oder auch der Durchschnitt (�, Disjunktions-Operator, wird von
MySQL nicht direkt umgesetzt). Die Konzepte hinter diesen Methoden sind aufgrund
ihrer exakten Definition dieselben wie in der Mengenlehre, sie werden von MySQL
konsequent umgesetzt.
2.3.4 Joins
Eine Gruppe sehr wichtiger Operationen ist jene der Joins (deutsch Verbund). Sie
erlauben es, verschiedene Tabellen anhand unterschiedlicher Kriterien miteinander
zu verknüpfen und dadurch Informationen aus verschiedenen Tabellen zu vereinen
und anhand verschiedener Kriterien zu filtern. Joins sind neben der Selektion und
Passnummer Vorname Nachname Geburtsdatum Anschrift
P12345678 Ada Betha 28.11.1984 Adresse 1
P12233445 Edgar Zetmann 17.07.1982 Adresse 2
P54321123 Etha Thees 21.08.1979 Adresse 5
Tabelle 2.5 Selektion
Vorname Nachname Geburtsdatum Anschrift
Ada Betha 28.11.1984 Adresse 1
Edgar Zetmann 17.07.1982 Adresse 2
Etha Thees 21.08.1979 Adresse 5
Tabelle 2.6 Projektion
2 Datenbankmodellierung
64
der Projektion von zentraler Bedeutung für relationale Datenbanken. Angenommen,
die Flughafenverwaltung setzt verschiedene Tabellen ein. Die Flugtabelle enthält alle
Informationen über eine bestimmte Flugverbindung, wie in Tabelle 2.7 gezeigt.
Im Buchungssystem des Flughafens sind alle Buchungen einzeln erfasst. Sie enthal-
ten die Passnummer des Passagiers sowie die Flugnummer des gebuchten Fluges,
siehe Tabelle 2.8.
Wenn Sie nun herausfinden möchten, welche Passagiere nach Wien (VIE) fliegen und
wie diese Passagiere mit Vor- und Nachnamen heißen, dann kommen Sie mit keiner
der beiden Tabellen allein ans Ziel. Die Aufgabe besteht nun darin, zuerst die Passa-
giertabelle mit der Buchungstabelle zu kombinieren, um danach das Ergebnis mit
der Flugtabelle abzugleichen. Wie Sie sicher schon erkannt haben, ist es definitiv not-
wendig, die Buchungstabelle mit der Passagiertabelle über das Attribut Passnummer
zu vergleichen, da die Passnummer jeden Passagier eindeutig identifiziert und dieses
Attribut in beiden Tabellen vorkommt. Dadurch stellen Sie sicher, dass Sie die richti-
gen Kombinationen von Passagieren mit ihren Buchungen auswählen.
Das Symbol für den Verbund ist in der relationalen Algebra wie folgt definiert: TY,
und die Operation verbindet jene Zeilen miteinander, die denselben Attributwert in
beiden Tabellen in der entsprechenden Spalte haben. Die Schreibweise für diese Ope-
ration lautet:
Flugnummer Abflug Ziel Fluglinie
1111 MUC JFK Lufthansa
2222 IBK VIE Austrian
3333 FRA BER SAS
4444 ROM VIE Alitalia
Tabelle 2.7 Flugtabelle
Passnummer Flugnummer Sitzplatz Preis
P12345678 2222 3E 39.0
P12233445 4444 24B 49.0
P12345123 1111 17A 99.0
P54321123 3333 33C 99.0
Tabelle 2.8 Buchungstabelle
2.3 Das relationale Datenbankenmodell
65
2
Tabelle A TYA.Attribut = B.Attribut Tabelle B
Es werden die zu verbindenden Tabellen und die Attribute, anhand deren die Ver-
knüpfung erfolgt, angegeben. In diesem konkreten Beispiel sind das jene Zeilen der
Tabellen »Passagiere« und »Buchungen«, die über eine identische Passnummer ver-
fügen. Mit Hilfe der Formel aus der relationalen Algebra kann diese Zwischenmenge
bestimmt werden:
Passagiertabelle P TYP.Passnummer = B.Passnummer Buchungen B
In dieser Formel werden Aliasse für die Tabellennamen verwendet. P ist die Abkür-
zung der Passagiertabelle, und B steht analog für die Buchungstabelle. Diese Abkür-
zungen werden dazu verwendet, jene Spalte anzugeben, anhand deren die beiden
Tabellen verbunden (gejoint) werden. Diese Abkürzungen sind hier notwendig, da
beide Tabellen eine Spalte haben, die den gleichen Bezeichner trägt: Passnummer.
Der Term P.Passnummer = B.Passnummer gibt an, dass jene Zeilen zusammengehören, deren
Passnummern identisch sind.
Mathematisch gesehen ist ein Join das Kreuzprodukt der zwei Tabellen. Dabei wer-
den alle möglichen Kombinationen gebildet. Da jedoch nicht alle Möglichkeiten
sinnvoll sind – schließlich sollen nur jene ausgegeben werden, deren Passnummern
identisch sind –, werden jene Zeilen verworfen, die das angegebene Join-Kriterium
nicht erfüllen. Dies zeigt die Kombination beider Tabellen, wobei die zusammenge-
hörenden Zeilen nun in einer einzigen Zeile der Ergebnistabelle bzw. -menge zusam-
mengefasst wurden.
Mit Hilfe dieser Zwischentabelle (Tabelle 2.9) ist es nun möglich, anhand der Flug-
nummer in Kombination mit der Flugtabelle auf die Zieldestinationen zu schließen.
Der Übersicht wegen eliminieren wir die Spalten Sitzplatz und Preis noch mit einer
Projektion und erhalten:
PassagierBuchung = �Passnummer, Vorname, Nachname, Flugnummer
(Passagiertabelle P TYP.Passnummer = B.Passnummer Buchungen B)
Passnummer Vorname Nachname FlugNummer Sitzplatz Preis
P12345678 Ada Betha 2222 3E 39.0
P12233445 Edgar Zetmann 4444 17A 49.0
P12345123 Jonas Kapper 1111 33C 99.0
P54321123 Etha Thees 3333 24B 99.0
Tabelle 2.9 Die gejointe Tabelle
2 Datenbankmodellierung
66
Das Zwischenergebnis dieses Joins (gekennzeichnet durch das =) wird in der Formel
mit »PassagierBuchung« bezeichnet und liefert folgende Tabelle (Tabelle 2.10).
Dieses Ergebnis müssen wir nun mit der Flugtabelle joinen, damit die Information
über den Zielflughafen verknüpft werden kann. Dazu wählen wir wieder ein eindeu-
tiges Kriterium, das beide Tabellen gemeinsam haben. In diesem Fall ist die Spalte
Flugnummer der richtige Kandidat für ein Verbundkriterium. Die Formel der relationa-
len Algebra lautet nun:
PassagierBuchungFlug = PassagierBuchung PB TYPB.Flugnummer = F.Flugnummer Flug F
Mit dieser Formel werden all jene Zeilen der Zwischentabelle des vorigen Ergebnisses
mit jenen Zeilen der Flugtabelle verbunden, die über eine identische Flugnummer
verfügen. Das Ergebnis bekommt den Bezeichner »PassagierBuchungFlug« zugewie-
sen. Da die Flugnummer selbst ein eindeutiges Attribut ist, erhalten wir das korrekte
Ergebnis der Form ( siehe Tabelle 2.11):
Als letzter Schritt in diesem Beispiel fehlt noch die Selektion, die das Ergebnis auf den
gewünschten Zielflughafen VIE einschränkt:
PassagierBuchungFlugVIE = �Ziel = VIE (PassagierBuchungFlug)
Diese Projektion liefert nun die Spalten Vorname, Nachname und Ziel
�Vorname, Nachname, Ziel (PassagierBuchungFlugVIE)
Passnummer Vorname Nachname Flugnummer
P12345678 Ada Betha 2222
P12233445 Edgar Zetmann 4444
P12345123 Jonas Kapper 1111
P54321123 Etha Thees 3333
Tabelle 2.10 Zwischenergebnis des Joins
Passnummer Vorname Nachname Flugnummer Abflug Ziel Fluglinie
P12345678 Ada Betha 2222 IBK VIE Austrian
P12233445 Edgar Zetmann 4444 ROM VIE Alitalia
P12345123 Jonas Kapper 1111 MUC JFK Lufthansa
P54321123 Etha Thees 3333 FRA BER SAS
Tabelle 2.11 Gejointe Tabellen »Passagier«, »Buchung« und »Flug«
2.4 Datenbankdesign
67
2
in die folgende Ergebnistabelle. Sie enthält die Namen jener Passagiere, die eine
Buchung nach Wien (VIE) vorliegen haben, wie in Tabelle 2.12 dargestellt.
Ohne diese Zwischenschritte ist die Formel etwas komplexer. Wenn Sie sie jedoch
von der innersten Klammer nach außen lesen, ist sie weit weniger furchteinflößend:
�Ziel = VIE ((�Passnummer, Vorname, Nachname, Flugnummer (Passagiertabelle
P TY P.Passnummer = B.Passnummer Buchungen B)) TY (PB.Flugnummer = F.Flugnummer Flug F))
Die relationale Algebra erlaubt es, durch einen einfachen Formalismus, Abfragen
genau zu beschreiben. Dadurch ist es möglich, das Verhalten von Datenbanken zu
definieren. Diese eindeutige Definition ist unerlässlich, da ein und dieselbe Abfrage
auf denselben zugrundeliegenden Tabellen immer dasselbe Ergebnis liefern muss.
Das solide Fundament der Mengenlehre bietet diesen Grundsatz, und daher ist es
wichtig, sich diese Grundlagen vor Augen zu führen. Obwohl die Hintergründe der
relationalen Algebra für das Verständnis der Arbeitsweise von Datenbanken interes-
sant und sinnvoll sind, werden Sie diesem Formalismus in MySQL nicht direkt begeg-
nen. Spätestens wenn Sie sich jedoch an die Anfrageoptimierung machen, werden Sie
das hier angeeignete Wissen wieder benötigen.
2.4 Datenbankdesign
Das Datenbankdesign beschäftigt sich mit der Gestaltung der Tabellen für die Daten
und mit den Beziehungen dieser Tabellen untereinander. In diesem Schritt wird die
Aufgabe, für die das Datenbanksystem eingesetzt werden soll, abstrahiert und in eine
eigene Sprache übersetzt. Diese Beschreibungssprache werden Sie in diesem Ab-
schnitt kennenlernen. Ausgehend von der abstrakten Beschreibung ist es leichter,
die Vorgaben korrekt im Datenbanksystem Ihrer Wahl – hier also MySQL – zu imple-
mentieren.
2.4.1 Das ER-Diagramm
Da MySQL das relationale Datenbankmodell einsetzt, gilt es, Objekte – die Entitäten –
der realen Welt zu identifizieren und die Eigenschaften dieser Objekte, die Sie in Ihrer
Datenbank festhalten möchten, herauszuarbeiten. Alle jene Objekte mit gemeinsa-
Vorname Nachname Ziel
Ada Betha VIE
Edgar Zetmann VIE
Tabelle 2.12 Das Ergebnis
2 Datenbankmodellierung
68
men Eigenschaften – die Attribute – werden später in einer Tabelle zusammengefasst,
wobei die Spalten einer solchen Tabelle den gemeinsamen Eigenschaften entspre-
chen. Zwischen den Entitäten bestehen Zusammenhänge, die durch Beziehungen
ausgedrückt werden. Diese Beziehungen – die Relationships – werden ebenfalls zwi-
schen den Tabellen hergestellt. Diese Verknüpfungen werden mit Fremdschlüsseln
realisiert, die Sie im vorigen Abschnitt bereits kennengelernt haben.
Damit Kunden, Entwickler und Datenbankdesigner eine gemeinsame Sprache spre-
chen können, gibt es verschiedene Beschreibungssprachen für die Modellierung.
Eine der bekanntesten grafischen Beschreibungssprachen ist das Entity-Relation-
ship-Modell (ER-Modell), das bereits in den 1970er-Jahren erfunden und später
immer wieder verfeinert wurde. Es handelt sich dabei um eine grafische Beschrei-
bung der Beziehungen zwischen den Tabellen einer Datenbank. Es besteht grundle-
gend aus den drei genannten Elementen:
� Entitäten (Objekte bzw. Tabellen)
� Beziehungen (zwischen Tabellen über ihre Attribute)
� Attribute (Eigenschaften bzw. Spalten)
Entitäten sind jene Objekte der realen Welt, die eindeutig identifiziert werden kön-
nen und abstrahiert werden sollen. Sie enthalten all jene Eigenschaften, die das reale
Objekt ausmachen. In ER-Diagrammen werden diese Entitäten durch Rechtecke dar-
gestellt. Diese Entitäten stehen in Beziehungen zueinander, die Abhängigkeiten und
allgemeine Zusammengehörigkeit ausdrücken. Die Art der Beziehung wird auch als
Funktionalität bezeichnet und im folgenden Abschnitt erläutert. Diese Beziehungen
zwischen den Entitätsklassen werden mit Hilfe von Rauten dargestellt, die diese Klas-
sen miteinander verbinden. Zusätzlich gibt es Attribute, die sowohl die Entitätsklas-
sen als auch die Beziehungen genauer beschreiben.
Das Beispiel der Flughafenverwaltung soll das verdeutlichen. Für die grafische Dar-
stellung aller Entitäten, Beziehungen und Attribute haben wir das kostenlose Tool
MySQL Workbench von Oracle eingesetzt und alle folgenden Grafiken damit erstellt.
Das Werkzeug dient jedoch nicht nur zum Malen von schönen Bildern. Es handelt
sich dabei um eine sehr umfangreiche und mächtige Softwarelösung, die im Daten-
bankendesign sehr hilfreich ist. Welche Möglichkeiten Ihnen MySQL Workbench bie-
tet, erfahren Sie in Abschnitt 7.8.1, »MySQL Workbench«. Hier geht es vorerst noch
um die theoretischen Hintergründe.
2.4.2 Entitäten
Wenn Sie die Beschreibung des Flughafenszenarios erneut durchlesen, werden Ihnen
einige Bereiche auffallen, die in sich abgeschlossen sind und deren Daten zusam-
mengehören. Die Hauptaufgabe eines Flughafens ist die Verwaltung von Flügen.
2.4 Datenbankdesign
69
2
Daher ist es ein guter Rat, Flüge als Einheit zusammenzufassen. Ein Flug besteht aus
einer Reihe von Eigenschaften bzw. Daten: Flugnummer, Fluglinie, Abflugzeit,
Ankunftszeit und weiteren Informationen. Die Tabelle »flug« wird mit einem ER-
Diagramm dargestellt (Abbildung 2.2). Die Attributnamen sind in diesem Beispiel
schon an ein reales Datenbankdesign angepasst.
Abbildung 2.2 ER-Diagramm der Tabelle »flug«
Wie Sie sehen, ist die Entität »flug« als Rechteck dargestellt. Eine solche Entität ent-
spricht einer eigenen Tabelle innerhalb des Datenbankenschemas, die grafische Dar-
stellung dient zur Veranschaulichung des Modells.
Innerhalb des Kästchens befinden sich die Attribute, die hier bereits ihren endgülti-
gen Datentyp zugewiesen haben. Was diese Werte genau bedeuten, ist noch nicht so
wichtig, das erfahren Sie in Kapitel 4, »Einführung in die Beispieldatenbank«. Wichtig
ist hier aber, dass Sie erkennen, wie die vorher festgelegten Eigenschaften zu einer
Einheit zusammengefasst werden. In diesem Beispiel ist ein Flug ein solches Objekt,
das durch die einzelnen Attribute beschrieben wird. Die Zusammengehörigkeit die-
ser Attribute wird mit Hilfe des Entitätssymbols im ER-Diagramm dargestellt. Die in
dem rechteckigen Kästchen dargestellte Entität trägt den Namen flug. Diese Bezeich-
nung ist im Titel des Kästchens dargestellt und dient auch der zugrundeliegenden
Tabelle als Bezeichner.
Unterhalb der Titelleiste sind alle Attribute aufgelistet, die einen Flug beschreiben. In
diesem Beispiel zählen dazu eine eindeutige Flug-ID namens flug_id. Sie dient zur
Identifizierung eines Fluges und wird von anderen Tabellen später referenziert wer-
den, zum Beispiel bei der Flugbuchung. In der Grafik erkennen Sie vor der Attributbe-
zeichnung flug_id ein kleines gelbes Schlüsselsymbol. Dabei handelt es sich um das
Symbol für den Primärschlüssel. Dieser Primärschlüssel gibt an, dass jeder einzelne
Flug, der später in dieser Tabelle gespeichert werden soll, durch ihn eindeutig unter-
2 Datenbankmodellierung
70
schieden werden kann. Es kann daher keine zwei Flüge mit einer identischen flug_id
innerhalb der Tabelle geben. Dieses unscheinbare Symbol ist daher von großer Wich-
tigkeit für diese Tabelle.
Rechts neben der Attributbezeichnung sehen Sie eine Abkürzung in Großbuchsta-
ben. Dabei handelt es sich um den Datentyp, der für die Speicherung der Flugnum-
mer eingesetzt werden soll. In diesem konkreten Beispiel der Flugnummer wird
INTEGER als Datentyp gewählt, die Kurzschreibweise lautet INT. Mit Hilfe dieses Typs
werden Ganzzahlen gespeichert. Darauf folgt das Attribut flug_nr, das vom Datentyp
CHAR ist und achtstellige Zeichenketten in sich aufnehmen kann. Eine Flugnummer
(flug_nr) besteht aus der internationalen Fluglinienbezeichnung – dem IATA-Code,
der zwei Zeichen für das Kürzel der Fluglinie vorsieht, sowie aus einer bis zu fünfstel-
ligen Nummer, die individuell vergeben wird.
Das nächste Attribut, die Spalte von, verfügt im Gegensatz dazu über den Datentyp
SMALLINT, was bedeutet, dass das Attribut ganzzahlige Werte in sich aufnimmt. Im
Unterschied zu INT nimmt der Datentyp SMALLINT jedoch nur Zahlen, die kleiner als
65535 sind, in sich auf. INT hingegen kann Zahlen bis zu 4294967295 speichern.
SMALLINT hat daher einen kleineren Wertebereich und benötigt daher auch weniger
Speicherplatz. Doch dazu später mehr. Genauso verhält es sich mit der spiegelbild-
lichen Spalte nach der Tabelle »flug«. Diese beiden Attribute stellen Beziehungen zu
dem Abflugs- bzw. Ankunftsflughafen her und enthalten eine ebenfalls eindeutige
Nummer, die in der Flughafentabelle definiert wird.
Danach folgen zwei Attribute zur Speicherung der Abflugs- und Ankunftszeit, inklu-
sive dem jeweiligen Datum. Beide Attribute – sowohl abflug als auch ankunft – sind
daher vom Datentyp DATETIME. Die Verknüpfung mit der Fluglinientabelle erfolgt
über das Attribut fluglinie_id, das erneut vom Typ SMALLINT ist. Das letzte Attribut
dieser Tabelle ist jenes des eingesetzten Flugzeugs namens flugzeug_id, mit dessen
Hilfe die Beziehung zur Flugzeugtabelle hergestellt wird. Dieses Attribut ist vom Typ
INT, das für ganzzahlige Werte verwendet wird.
Die Tabelle »flug« ist nun vollständig spezifiziert. Sie besteht aus den acht genannten
Attributen, der Primärschlüssel ist die ID flug_id, und die Bezeichnung lautet wie im
Titel: »flug«. Die sehr übersichtliche Darstellung mittels ER-Diagramm kann man
sich gedanklich sehr leicht als Tabelle vorstellen. Die Tabelle selbst enthält natürlich
noch keine Daten. Diese werden erst später eingefügt, wenn die Erstellung des
Modells abgeschlossen ist.
Ein Diagramm nur mit der Flugtabelle ist allerdings wenig hilfreich. Daher wird das
Diagramm immer weiter ausgebaut, bis es das gesamte Szenario der Flughafenver-
waltung beschreibt. Als Nächstes sollen diese Flüge von Passagieren gebucht werden
können. Diese einfache Aussage liefert gleich Rückschluss auf zwei Objekte, die
jeweils in einer eigenen Entität zusammengefasst werden können: Passagiere und
2.4 Datenbankdesign
71
2
Buchungen. Die folgende Grafik zeigt die Tabelle der Buchungen, die nach demselben
Prinzip angelegt wird: Zuerst identifizieren Sie das konkrete Objekt, das Sie modellie-
ren wollen. In diesem Fall ist das die Flugbuchung. Als Nächstes legen Sie die Attri-
bute fest, deren Werte Sie innerhalb dieser Tabelle speichern wollen. Dazu zählen in
diesem Szenario die folgenden Attribute bzw. Spalten: flug_id, sitzplatz, passagier_
id, preis sowie eine intern vergebene Nummerierung der Buchungen, buchung_id.
Bei diesem letzten Attribut handelt es sich um einen künstlichen Primärschlüssel,
den MySQL automatisch durch Hochzählen vergibt. Die zu dieser Tabelle gehörende
ER-Entität ist in Abbildung 2.3 dargestellt.
Abbildung 2.3 ER-Diagramm der Buchungstabelle
Mit diesen fünf Attributen kann festgehalten werden, für welchen Flug eine Buchung
erfolgt ist. Die Attribute haben wieder je einen Datentyp zugeordnet bekommen. Die
Buchungsidentifikationsnummer (buchung_id), die Flugidentifikationsnummer
(flug_id) und die Passagieridentifikationsnummer (passagier_id) sind vom Daten-
typ INT, sie beinhalten demnach Ganzzahlenwerte. Die Spalte sitzplatz ist vom Typ
CHAR, also ein String-Typ, der vier Stellen in sich aufnehmen kann. Die Anzahl der
Stellen wird in Klammern nach der Datentypdefinition angezeigt. Das vierte Attri-
but, preis, nimmt Dezimalzahlen in sich auf. Die beiden Ziffern 4 und 2 geben an,
dass die Dezimalzahl insgesamt sechs Stellen aufnehmen kann, wobei zwei dieser
Stellen Nachkommastellen sind. Der teuerste Flug, der in diesem Szenario angeboten
werden kann, kostet damit höchstens 9.999,99 €.
Wie Sie bei der Erstellung der ersten Tabelle, »flug«, bereits gesehen haben, erlaubt
die Flugnummer den eindeutigen Rückschluss auf genau einen bestimmten Flug.
Um mit einem Flugzeug mitfliegen zu können, benötigen Sie einen Sitzplatz, weswe-
gen das nächste Attribut genau diesen Wert in sich aufnimmt. Ein Sitzplatz darf
innerhalb eines Flugzeuges für einen konkreten Flug nur ein einziges Mal vergeben
werden.
Wenn Sie nun beide Tabellen betrachten, dann fällt Ihnen sicherlich auf, dass beide
Tabellen eine Spalte bzw. ein Attribut mit demselben Namen besitzen. Natürlich ist
2 Datenbankmodellierung
72
die Vergabe eines identischen Namens in zwei unterschiedlichen Tabellen legitim,
schließlich muss nur innerhalb einer Tabelle Eindeutigkeit bei den Spaltennamen
herrschen. Dennoch zeigt allein die Namensgebung hier einen Zusammenhang zwi-
schen den beiden Tabellen an, der gedanklich bereits getroffen wurde. Eine Flugbu-
chung bezieht sich immer auf einen konkreten Flug, für den ein Ticket gekauft
wurde. Zwischen den Tabellen »flug« und »buchung« besteht daher eine Beziehung.
Es gibt verschiedene Arten von Beziehungen, die wir im Folgenden vorstellen.
2.4.3 Beziehungen
Mit den Beziehungen im Bereich der Datenbanken verhält es sich wie mit Beziehun-
gen im realen Leben: Es gibt einseitige, wechselseitige und gegenseitige Beziehun-
gen. Je nach Beziehungstyp müssen verschiedene Abhängigkeiten beachtet werden.
Beziehungen zwischen Entitäten werden durch ihre Attribute festgelegt. Die Anzahl
der Entitäten, auf die sich ein Attribut bezieht, wird mit der Kardinalität angegeben.
Eine Kardinalität gibt also an, auf wie viele konkrete Datensätze einer zweiten Tabelle
sich ein Datensatz der ersten Tabelle beziehen kann.
Der einfachste Fall einer Beziehung ist die sogenannte 1:1-Beziehung. Sie tritt dann
auf, wenn ein Element einer Entität genau einem Element einer anderen Entität
zugeordnet wird. Hier bezieht sich jedes Element einer Tabelle auf ein Element einer
anderen Tabelle und umgekehrt. Im mathematischen Sinne entspricht diese Bezie-
hung einer bijektiven Abbildung, die jedem Attribut der Ursprungstabelle genau ein
Attribut der Zieltabelle zuordnet und umgekehrt. Im Allgemeinen tritt dieser Bezie-
hungstyp nur sehr selten auf. Das hat den Grund, dass 1:1-Beziehungen nur dann not-
wendig sind, wenn eine Tabelle mit sehr vielen Attributen in zwei Teiltabellen
unterteilt werden soll. Anderenfalls könnten alle Attribute zweier Tabellen, die in die-
sem Beziehungstyp miteinander stehen, in einer Tabelle zusammengefasst werden,
da es offenbar immer genau zwei korrespondierende Datensätze gibt. Beide Tabellen
verweisen durch ihren Primärschlüssel auf die jeweils andere Tabelle. Für jede Zeile
der ersten Tabelle gibt es genau eine passende Zeile in der zweiten Tabelle und umge-
kehrt. Daher könnte man diese beiden Tabellen auch genauso gut zusammenfassen,
so dass alle Daten in nur einer einzigen Tabelle stehen. Das Aufteilen wird auch als
vertikale Partitionierung bezeichnet und dient vor allem der Leistungssteigerung
und der Vereinfachung von Datenbankenschemas. Details zur Partitionierung mit
MySQL finden Sie in Abschnitt 9.4. Der Vollständigkeit halber stellen wir die 1:1-Bezie-
hung im Folgenden trotz ihrer relativ geringen Bedeutung kurz vor.
Die Tabelle mit den Passagierdaten hat viele Attribute, für die Abfertigung werden
jedoch nur wenige Details eines Passagiers benötigt. Dazu zählen die Passnummer,
der Vor- und der Nachname eines Passagiers. Daher ist es sinnvoll, die Passagierda-
ten aufzuteilen, da beispielsweise beim Boarding nur die Stammdaten benötigt wer-
2.4 Datenbankdesign
73
2
den, nicht jedoch die weiteren Details. Eine Tabelle »passagier« enthält durch diese
Partitionierung die grundlegenden Daten der Passagiere, die bei jedem Buchungs-
und Boardingvorgang benötigt werden. Eine zweite Tabelle, »passagierdetails«, ent-
hält die weiteren Daten, die nur während des Bestellvorgangs notwendig sind. Dazu
zählen beispielsweise erweiterte Informationen wie das Geburtsdatum, das Ge-
schlecht, die Telefonnummer und die E-Mail-Adresse der Passagiere.
Der Zusammenhang zwischen den beiden Tabellen kann mit Hilfe des ER-Dia-
gramms grafisch dargestellt werden. Es gibt für die Darstellung der verschiedenen
Beziehungsarten verschiedene Notationen, die etwas unterschiedlich aussehen, aber
dieselbe Bedeutung haben. Zu den bekanntesten Notationen zählen die Chen-Nota-
tion, UML-Klassendiagramme (Unified Modeling Language), IDEF1X (Integration
Definition for Information Modeling) und die Krähenfuß-Notation. Die Verwendung
einer bestimmten Notation ist Geschmackssache, Sie sollten sich jedoch auf eine
Methodik festlegen. In diesem Buch setzen wir die sogenannte Krähenfuß-Notation
ein, da sie sehr weit verbreitet und auch die voreingestellte Standardnotation der
MySQL Workbench ist. Die folgende Grafik zeigt diese 1:1-Beziehung zwischen der all-
gemeinen Passagiertabelle und den Passagierdetails (Abbildung 2.4).
Abbildung 2.4 Relation zwischen der Passagier- und der Passagierdetails-Tabelle in der
Krähenfuß-Notation
Im einleitenden Beispiel wurde für die Identifizierung eines Passagiers dessen Pass-
nummer verwendet. In der konkreten Datenbank wurde die Tabelle der Passagierda-
ten jedoch um einen künstlichen Schlüssel, eine automatisch vergebene Zahl,
erweitert. Dieses neu eingeführte Attribut passagier_id dient von nun an als Primär-
255
7
Kapitel 7
MySQL administrieren
Hier lernen Sie, wie Sie MySQL administrieren, sich um Backups küm-
mern und an den richtigen Schrauben drehen, um einen sicheren und
zuverlässigen Betrieb zu gewährleisten.
Im vorigen Kapitel haben Sie gelernt, wie Sie MySQL selbst kompilieren, installieren
und grundlegend absichern. In diesem Kapitel erfahren Sie, welche Aufgaben Sie als
Administrator erwarten. Dieses Kapitel stellt zusätzlich die wichtigsten Tools vor,
mit deren Hilfe Sie die unterschiedlichsten Probleme lösen werden.
7.1 Der bordeigene Werkzeugkasten
Eine MySQL-Installation besteht aus mehreren Programmen, die Sie unabhängig
voneinander verwenden können, um mit dem vielleicht wichtigsten Programm Ser-
ver-Daemon mysqld – zu kommunizieren und zu arbeiten. Es handelt sich dabei um
Programme, die Sie direkt auf der Kommandozeile ausführen können. Diese Tools
sind bei der Binärdistribution für Ihr Betriebssystem bereits vorhanden, und falls Sie
MySQL manuell installiert haben, finden Sie sie auch im bin-Verzeichnis innerhalb
des Installationsverzeichnisses. Die wichtigsten dieser Werkzeuge sind:
� mysql: Das ist der interaktive Client, den Sie bereits kennen.
� mysqladmin: Das ist ein hilfreiches Tool für die Administration.
� mysqlimport: Importiert Daten in eine Datenbank.
� mysqldump: Ist notwendig für sichere Backups Ihrer Daten.
� mysqlcheck: Überprüft Tabellen und repariert sie gegebenenfalls.
� mysqlslap: Das ist ein Benchmarking-Programm zum Testen der Serverlast.
Neben diesen sehr wichtigen kommandozeilenbasierten Tools gibt es weitere Werk-
zeuge, die über eine grafische Oberfläche verfügen. Dazu gehören:
� MySQL Workbench
� MySQL Administrator
� MySQL Query Browser
7 MySQL administrieren
256
Diese Programme müssen Sie extra von den Webseiten1 von MySQL herunterladen
und eigens installieren. Sie haben den Vorteil, dass sie die Handhabung verschiede-
ner administrativer Aufgaben wesentlich vereinfachen. Dennoch ist es unabdingbar,
dass Sie die wichtigsten Werkzeuge und Tools auf Kommandozeilenebene beherr-
schen. Gerade in stressigen Situationen, wo Sie eventuell keinen Zugriff auf die Pro-
gramme mit Benutzeroberflächen haben, sind sie unverzichtbar. Außerdem lassen
sich viele wichtige Aufgaben, wie beispielsweise Backups, auch automatisieren. Das
funktioniert jedoch nur mit kommandozeilenbasierten Programmen, die Sie mit
Parametern steuern können.
Die meisten der folgenden Kommandozeilenprogramme befinden sich im bin-Ver-
zeichnis Ihrer MySQL-Installation. Wenn Sie den Pfad bereits zu den Umgebungsva-
riablen hinzugefügt haben, wie wir in Abschnitt 6.1.5, »Den MySQL-Dienst starten«,
erklärt haben, dann können Sie diese Programme einfach mit dem jeweiligen Namen
des Tools aufrufen.
7.2 Der Name ist Programm: »mysqladmin«
Das erste Tool, das Sie kennenlernen, heißt mysqladmin, und es handelt sich dabei um
ein Werkzeug, mit dem Sie – Sie ahnen es bereits – administrative Aufgaben erledi-
gen können.
7.2.1 Datenbanken anlegen und löschen
Beispielsweise können Sie mit mysqladmin schnell und unkompliziert Datenbanken
anlegen, indem Sie das Tool mit den Parametern aus Listing 7.1 aufrufen:
bash# mysqladmin create neueDatenbank -u root -p
Listing 7.1 Mit »mysqladmin« eine Datenbank anlegen
Mit diesem Befehl legt MySQL sofort eine neue und leere Datenbank an. Auch hier
müssen Sie den Benutzernamen »root« und das passende Passwort angeben. Dieser
Befehl ist beispielsweise dann nützlich, wenn Sie schnell und unkompliziert eine
neue Datenbank benötigen. Genauso schnell lassen sich Datenbanken auch wieder
löschen. Verwenden Sie dazu den Aufruf aus Listing 7.2:
bash# mysqladmin drop neueDatenbank -u root -pEnter password: ****Dropping the database is potentially a very bad thing to do. Any
1 http://dev.mysql.com/downloads/workbench/5.2.html und http://dev.mysql.com/downloads/gui-
tools/5.0.html
7.2 Der Name ist Programm: »mysqladmin«
257
7
data stored in the database will be destroyed.
Do you really want to drop the 'neueDatenbank' database [y/N] yDatabase "neueDatenbank" dropped
Listing 7.2 Eine ganze Datenbank löschen
In diesem Fall warnt Sie MySQL davor, die gesamte Datenbank zu löschen; wenn Sie
sich direkt mit dem Client einloggen, würde das Löschen der Datenbank ohne War-
nung erfolgen. Das Resultat ist beide Male dasselbe: Die Datenbank neueDatenbank
wird sofort gelöscht.
7.2.2 Caches leeren
Ein weiteres wichtiges Gebiet, um das Sie sich kümmern müssen, sind die verschie-
denen Pufferspeicher, die Sie ebenfalls regelmäßig warten müssen. MySQL bietet
eine Reihe von verschiedenen Caches, die beispielsweise für Berechtigungen oder
Tabellenoptimierungen verwendet werden. Dazu zählen die folgenden Speicher für:
� Berechtigungen (flush-privileges)
� Host-Informationen (flush-hosts)
� Logs (flush-logs)
� Statusvariablen (flush-status)
� Tabellen (flush-tables)
� Threads (flush-threads)
Diese Zwischenspeicher können Sie flushen, also leeren, indem Sie den für den Spei-
cher zuständigen Flush-Befehl mysqladmin als Parameter angeben. Um beispielsweise
die Berechtigungstabellen neu zu laden, indem der aktive Berechtigungs-Cache
geleert wird, verwenden Sie die Befehlszeile aus Listing 7.3. Dadurch werden Ände-
rungen an den Berechtigungstabellen sofort wirksam.
bash# mysqladmin flush-privileges -u root -p
Listing 7.3 Berechtigungstabelle neu laden
MySQL bietet weitere Möglichkeiten an, die Zwischenspeicher von MySQL zu leeren.
Beispielsweise können Sie alle Berechtigungstabellen auch mit dem Befehl aus Lis-
ting 7.4 neu laden; die beiden Befehle bewirken dasselbe:
bash# mysqladmin reload
Listing 7.4 Kurzschreibweise zum Neuladen der Berechtigungstabelle
7 MySQL administrieren
258
Es gibt viele Szenarien, in denen Sie die Caches leeren müssen, um den Betrieb Ihres
Servers ordnungsgemäß fortsetzen zu können. Zum Beispiel verwaltet MySQL die
Anzahl der Verbindungsversuche pro Host in der Servervariablen max_connect_
errors. Diese ist standardmäßig auf 100 gesetzt und bewirkt, dass ein Client, der sich
mehr als hundertmal erfolglos zu verbinden versucht hat, blockiert wird. Diese Ein-
stellung schützt vor zu häufigen Verbindungsversuchen. Wenn ein Host diese Zahl
überschritten hat und somit gesperrt wurde, dann können Sie mit dem Befehl flush-
hosts aus Listing 7.5 diese Blockade wieder lösen, bis der Host den Grenzwert erneut
erreicht. Nur wenn Sie diesen Pufferspeicher leeren, kann ein gesperrter Host wieder
versuchen, sich zu verbinden.
bash# mysqladmin flush-hosts -u root -p
Listing 7.5 Den Hosts-Cache leeren
Um alle Tabellen-Caches neu zu laden und die Logfiles zu schließen und neu zu öff-
nen, können Sie entweder flush-tables und flush-logs nacheinander einsetzen,
oder Sie verwenden den Befehl aus Listing 7.6, der beide Aktionen nacheinander
durchführt:
bash# mysqladmin refresh
Listing 7.6 Tabellen- und Log-Caches neu laden
7.2.3 Das »root«-Passwort ändern
Sie können mysqladmin jedoch nicht nur zum Anlegen von Datenbanken und Lee-
ren von Caches verwenden. Sie können damit auch Ihr »root«-Passwort ändern. Dazu
müssen Sie den Befehl aus Listing 7.7 einsetzen:
mysqladmin -u root -p geheim neugeheimneu
Listing 7.7 Das eigene »root«-Passwort ändern
Dieser Befehl setzt das »root«-Passwort auf das angegebene Passwort neugeheimneu.
Damit Sie das Passwort neu setzen können, müssen Sie das aktuelle jedoch wissen,
denn der Client fragt dieses interaktiv ab. Dieser Befehl benötigt in jedem Fall die
Berechtigung SUPER, um das Passwort neu setzen zu können. Diese Methode hat
jedoch den entscheidenden Nachteil, dass das Passwort im Klartext in der Komman-
dozeile eingegeben werden muss.
Seit der neuen Version 5.6 können Sie Passwörter auch interaktiv ändern, damit
keine sensiblen Daten in der History der Kommandozeile gespeichert werden. Ver-
wenden Sie dazu einfach den Befehl aus Abschnitt A.8 und lassen das neue Passwort
7.2 Der Name ist Programm: »mysqladmin«
259
7
einfach weg. Das System wird Sie auffordern, ein neues Passwort einzugeben, das
nicht am Bildschirm angezeigt wird.
bash# mysqladmin -u root -p geheim
Listing 7.8 Verdecktes Neusetzen des Passwortes
Selbstverständlich können Sie Passwörter auch mit Hilfe des MySQL-Clients setzen,
die hier gezeigte Methode ist aber oftmals schneller, da Sie nur das neue Passwort für
den »root«-Nutzer angeben müssen. Um ein Passwort als »root«-User für einen
beliebigen Benutzer zu setzen, verwenden Sie einfach das UPDATE-Statement, wie im
Beispiel in Listing 7.9 dargestellt:
mysql> UPDATE mysql.user SET-> Password=PASSWORD('geheim')-> WHERE User='testuser';
Listing 7.9 Ein Passwort im Client neu setzen
Diese Methode hat den Vorteil, dass Sie jedes Passwort ändern können, nicht nur von
Ihrem eigenen »root«-Account, sondern von jenem Nutzer, dessen Namen Sie in der
WHERE-Klausel angeben. Im obigen Beispiel wird das Kennwort des Users »testuser«
auf den neuen Wert geheim gesetzt. Nachdem Sie dieses Passwort geändert haben,
vergessen Sie nicht, die Berechtigungen neu zu laden. Erst dann werden die Änderun-
gen wirksam. Sie können dies innerhalb des Clients mit FLUSH PRIVILEGES oder außer-
halb des Clients mit dem Befehl aus Listing 7.10 tun:
bash# mysqladmin flush_privileges -u root -p
Listing 7.10 Berechtigungen neu laden mit »flush_privileges«
Selbstverständlich hätten Sie für diese Aufgabe auch den GRANT-Befehl verwenden
können, den Sie aus Abschnitt 6.2, »Usermanagement«, kennen.
Das »root«-Passwort neu setzen
Sollten Sie einmal aus Versehen Ihr MySQL »root«-Passwort vergessen haben, dann
bewahren Sie Ruhe, denn es gibt auch hier eine Lösung. Sie können MySQL mit einem
speziellen Parameter starten, durch den das System die Berechtigungstabelle nicht
berücksichtigt. Dadurch können Sie sich (genau wie jeder andere Benutzer auch!)
ohne Passwort anmelden. Stoppen Sie zuerst den MySQL-Server, falls er läuft, wie in
Listing 7.11 dargestellt ist. Wechseln Sie dazu in das »root«-Konto Ihres Linux-Sys-
tems, und rufen Sie das init-Skript mit dem Parameter stop auf:
bash# /etc/init.d/mysql stop
Listing 7.11 MySQL anhalten
7 MySQL administrieren
260
Daraufhin wird der Serverprozess beendet. Sie können den Server nun erneut mit der
Option --skip-grant-tables starten, siehe Listing 7.12:
bash# mysqld_safe --skip-grant-tables &
Listing 7.12 MySQL ohne Berechtigungstabellen laden
Nun wird der Server erneut hochgefahren, Sie benötigen jedoch kein Passwort mehr,
um sich am Server als Datenbankbenutzer »root« anzumelden. Mit der Option --
skip-grant-tables kann sich nun jeder ohne Passwort anmelden, auch über das
Netzwerk, sofern Sie keine weiteren Vorkehrungen getroffen haben. Um diese
Schwachstelle zu beheben, können Sie den MySQL-Dienst zusätzlich mit --skip-net-
working starten. Den Befehl dazu sehen Sie in Listing 7.13.
bash# mysqld_safe --skip-grant-tables --skip-networking &
Listing 7.13 Starten des MySQL-Dienstes ohne Passwort und ohne Netzwerkunterstützung
Verwenden Sie nun den Befehl aus Listing 7.14, um sich ohne Passwortabfrage vom
lokalen Rechner aus anzumelden:
bash# mysql -u root
Listing 7.14 Wie gewohnt anmelden
Beachten Sie, dass hier der bekannte Parameter -p nicht gesetzt wird, da Sie kein
Passwort angeben werden. Sie landen im MySQL-Client und verfügen dort über
alle Privilegien. Unter anderem können Sie nun endlich das neue »root«-Passwort
für den wichtigsten Zugang zu MySQL setzen. Hier kommt wieder der aus Listing 7.9
bekannte UPDATE-Befehl zum Einsatz:
mysql> UPDATE mysql.user SET Password=PASSWORD('geheim')-> WHERE User='root';
Listing 7.15 Das Passwort neu setzen
Als Nächstes müssen Sie die Berechtigungstabelle neu laden. Verwenden Sie dazu
den Befehl aus Listing 7.16:
mysql> FLUSH PRIVILEGES;
Listing 7.16 Die Berechtigungstabelle neu laden
Nach diesem Schritt sollten Sie sich aus dem Client abmelden und den MySQL-Ser-
ver, der mittels --skip-grant-tables manuell gestartet wurde, stoppen. Verwenden
Sie für diese Aufgabe wieder den Befehl aus Listing 7.17:
7.2 Der Name ist Programm: »mysqladmin«
261
7
bash# /etc/init.d/mysql stop
Listing 7.17 MySQL-Server stoppen
Gleich danach können Sie den Server wieder neu durchstarten, dieses Mal jedoch
wieder mit Hilfe des init-Skripts und ohne die Angabe weiterer Parameter, siehe Lis-
ting 7.18:
bash# /etc/init.d/mysql start
Listing 7.18 MySQL mit Standardeinstellungen starten
Nach diesem Schritt startet Ihr MySQL-Server wieder mit Passwortschutz, und Sie
können sich mit dem neu gesetzten Passwort anmelden. Natürlich benötigen Sie die
»root«-Rechte für Ihr Linux-System, um den Server zuerst herunterfahren und dann
mit der speziellen Option starten zu können. Aus diesem und vielen anderen Grün-
den sollten Sie dieses »root«-Passwort auf keinen Fall vergessen.
7.2.4 Den Server überwachen
Doch mysqladmin ist nicht nur für die bisher genannten Aufgaben nützlich, es bietet
Ihnen auch die Möglichkeit, sich schnell und unkompliziert über den aktuellen
Zustand Ihres MySQL-Servers zu informieren. So können Sie beispielsweise überprü-
fen, ob Ihre Instanz von MySQL überhaupt läuft. Verwenden Sie dazu den Befehl aus
Listing 7.19:
bash# mysqladmin -u root -p pingmysqld is alive
Listing 7.19 Ein Lebenszeichen
In Produktivumgebungen sollten Sie selbstverständlich ein automatisches Überwa-
chungstool wie Nagios2 einsetzen. Solche Programme laufen selbständig und
benachrichtigen Sie per E-Mail oder sogar SMS über Störungen. Mit dem Werkzeug
Nagios können Sie nicht nur MySQL selbst überprüfen, sondern sämtliche Dienste,
wie etwa Apache oder den Mailserver, im Auge behalten.
Einen kurzen Überblick über den aktuellen Status holen Sie mit dem in Listing 7.20
dargestellten Aufruf ein:
bash# mysqladmin status -u root -pEnter password:
2 http://www.nagios.org
7 MySQL administrieren
262
Uptime: 1195 Threads: 1 Questions: 10 Slow queries: 0 Opens:33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.8
Listing 7.20 Statusinformationen anzeigen
Der Befehl status liefert Ihnen hier zwar eine sehr kurze, aber dafür auch sehr infor-
mative Ausgabe direkt auf die Kommandozeile zurück. So sehen Sie beispielsweise,
seit wie vielen Sekunden Ihr Server bereits läuft (Uptime), wie viele Clients momentan
verbunden sind (Threads) und weitere statistische Informationen über Anfragen und
Tabellen. Dazu zählen auch die Anzahl der abgearbeiteten Anfragen (Questions) und
insbesondere auffällige, das bedeutet langsame Anfragen (Slow queries).
Der Wert der Variablen Opens beschreibt, wie viele Tabellen der Server seit seinem
Start insgesamt geöffnet hat, Open tables zeigt hingegen die aktuelle Anzahl geöffne-
ter Tabellen an. Flush tables gibt Aufschluss darüber, wie viele flush-, refresh- oder
reload-Anweisungen der Server seit seinem Start durchgeführt hat. Die letzte
Angabe, Queries per second avg, listet die durchschnittliche Anzahl von Anfragen pro
Sekunde seit dem Serverstart auf.
Rufen Sie mysqladmin status immer dann auf, wenn Sie sich einen schnellen Über-
blick über den Zustand Ihres MySQL-Servers verschaffen wollen. Das bedeutet, dass
Sie sich regelmäßig vergewissern müssen, dass alle Anfragen nach Plan beantwortet
werden können. Auffälligen Änderungen in den hier angegebenen Werten sollten Sie
umgehend nachgehen!
Für eine ausführlichere Darstellung aktueller Servervariablen verwenden Sie den fol-
genden Befehl (Listing 7.21):
bash# mysqladmin extended-status -u root -p
Listing 7.21 Servervariablen anzeigen
Sie erhalten durch diesen Befehl eine vollständige Liste aller Optionen und Variablen
sowie deren aktuelle Belegung. Einen Auszug dieser Liste sehen Sie in Listing 7.22.
+-----------------------------------+----------+| Variable_name | Value |+-----------------------------------+----------+| Aborted_clients | 2 || Aborted_connects | 0 || Bytes_received | 464524 || Bytes_sent | 9194415 |...| Open_files | 128 |
7.2 Der Name ist Programm: »mysqladmin«
263
7
| Open_streams | 0 || Open_table_definitions | 256 || Open_tables | 64 || Opened_files | 2269 || Opened_table_definitions | 522 || Opened_tables | 1735 |...
| Uptime | 18969 || Uptime_since_flush_status | 18969 |+-----------------------------------+----------+
Listing 7.22 Auszug der Variablenbelegungen
Um nach einer bestimmten Variablen zu filtern, können Sie das Linux-Tool grep ver-
wenden, das Sie bereits aus Abschnitt 3.3.2, »Schnellinstallation unter Linux«, ken-
nen. Beispielsweise erhalten Sie mit dem folgenden Befehl die Anzahl aller offenen
Tabellen, indem Sie die Ausgabe des mysqladmin-Tools an das Filterwerkzeug grep
weiterleiten (Listing 7.23). Sie erhalten jene Zeile mit der angegebenen Variablen (hier
Opened_tables) zurück.
bash# mysqladmin extended-status -u root -p | grep Opened_tables\| Opened_tables | 1735 |
Listing 7.23 Eine spezielle Variable herausfiltern
Wenn Sie sich für die aktuell laufenden Queries und Verbindungen interessieren,
dann benutzen Sie den Befehl aus Listing 7.24:
bash# mysqladmin processlist -u root -p+----+----+---------+---+-------+----+------+----------------+|Id |User|Host |db |Command|Time|State |Info |+----+----+---------+---+-------+----+------+----------------+|260 |php |localhost|CMS|Query |160 | | ||266 |root|localhost| |Query |0 | |show processlist|+----+----+---------+---+-------+----+------+----------------+
Listing 7.24 Aktive Prozesse anzeigen
Sie erhalten prompt eine Auflistung der aktuellen Anfragen. Mit dieser praktischen
Methode können Sie beispielsweise sehr lange dauernde Anfragen identifizieren und
entsprechend darauf reagieren. So brechen Sie beispielsweise mit dem Befehl KILL
eine Anfrage, die zu lange läuft, ab, wie in Listing 7.25 gezeigt:
7 MySQL administrieren
264
mysql> KILL QUERY 260;
Listing 7.25 Eine Anfrage abbrechen
Geben Sie bei diesem Befehl die Id der betreffenden Anfrage an, um diese zu been-
den. Sie bekommen diese Id mit Hilfe des Befehls aus Listing 7.24 oder indem Sie
direkt im Client den Befehl SHOW PROCESSLIST verwenden. Falls Sie eine ganze Verbin-
dung beenden müssen, verwenden Sie dazu den Befehl aus Listing 7.26:
mysql> KILL CONNECTION 1;
Listing 7.26 Eine Verbindung trennen
Wenn Sie über die Berechtigung SUPER verfügen, können Sie alle gelisteten Anfragen
und Verbindungen beenden. Ohne diese Berechtigung können Sie nur Ihre eigenen
Verbindungen und Queries abbrechen.
7.3 Daten importieren und exportieren
Von Zeit zu Zeit kann es notwendig sein, neue Daten in eine bestehende Datenbank
zu importieren oder vorhandene Daten außerhalb der Datenbank abzuspeichern,
diese also zu exportieren. Die vermutlich bekannteste Anwendung für diese Tätigkei-
ten stellen Backup und Recovery dar, die jedoch wir erst in Abschnitt 7.4, »Richtig
sichern – Backups und Strategien«, vorstellen werden. In diesem Abschnitt lernen Sie
Methoden kennen, mit denen Sie die Daten selbst ganz allgemein in Ihre Datenbank
laden und auch wieder aus ihr herausholen.
7.3.1 Daten aus Dateien importieren
Sie können Daten aus unterschiedlichen Quellen importieren, wenn Sie diese als
Textdatei vorliegen haben. So ist es beispielsweise möglich, Daten aus den unter-
schiedlichsten Anwendungen nach MySQL zu migrieren und Ihren Datenschatz dort
zu verwalten und zu bearbeiten.
Ein sehr wichtiger Befehl zum Importieren von Daten ist LOAD DATA INFILE. Mit die-
sem Aufruf laden Sie Daten aus Textdateien in eine bestehende Tabelle. Dieser Befehl
liest Textdateien zeilenweise ein, wobei ein Datensatz in einer Zeile steht. Das Einle-
sen erfolgt sehr schnell, weswegen dieser Befehl auch für sehr große Datenmengen
geeignet ist.
Natürlich könnten Sie die Daten auch mit dem INSERT-Statement einfügen. Dies ist
jedoch viel langsamer als die Methode LOAD DATA INFILE, da für jeden einzelnen
Datensatz, sofern einzeln angegeben, auch eine eigene Abfrage an den Server gestellt
7.3 Daten importieren und exportieren
265
7
wird. Eine solche Abfrage umfasst neben dem Auf- und Abbauen der Verbindung
auch die Analyse dieser Abfragen und das Anlegen des Indexes, sofern ein solcher für
diese Tabelle vorgesehen ist, was ebenfalls sehr viel Zeit benötigt. Wann immer Sie
Daten in einer Textdatei vorliegen haben, sollten Sie daher die Variante LOAD DATA
INFILE einsetzen, da sie viel schneller ist.
Eine Standardanwendung für den Befehl LOAD DATA INFILE ist das Laden der Daten aus
einer CSV-Datei. CSV-Dateien lassen sich mit sehr vielen Programmen erstellen und
sind dementsprechend häufig anzutreffen. Verwenden Sie den Befehl aus Listing
7.27, um eine solche Datei in Ihre MySQL-Datenbank zu laden:
mysql> LOAD DATA INFILE '/tmp/daten.csv'-> INTO TABLE flug-> FIELDS TERMINATED BY ';'-> ENCLOSED BY '"' LINES TERMINATED BY '\n';
Listing 7.27 Eine CSV-Datei laden
Der in Listing 7.27 angegebene Befehl hat drei Parameter für die verschiedenen
Trennzeichen der Attribute, der Werte und eines gesamten Datensatzes. Im obigen
Beispiel werden Attribute durch das Semikolon getrennt (FIELDS TERMINATED BY ';'),
die eigentlichen Werte stehen in Hochkommas, und ein Datensatz wird durch einen
Zeilenumbruch beendet (ENCLOSED BY '"' LINES TERMINATED BY '\n';). Dies sind die
wichtigsten Parameter, mit denen Sie MySQL mitteilen, woran es die einzelnen Fel-
der eines Datensatzes erkennt. Sie hängen zum einen von der Formatierung Ihrer
CSV-Datei ab, zum anderen ist insbesondere das Symbol für den Zeilenvorschub von
Ihrem Betriebssystem abhängig. Unter Linux verwenden Sie im Regelfall das New-
line-Symbol '\n', unter Windows hingegen '\r\n'.
Beachten Sie hierbei, dass die Datei für den Linux-User »mysql« lesbar sein muss,
damit sie geladen werden kann. Sollten die Berechtigungen nicht korrekt sein, wird
in Listing 7.28 dargestellte Fehler angezeigt:
ERROR 13 (HY000): Can't get stat of '/tmp/daten.csv' (Errcode: 2)
Listing 7.28 Die Linux-Berechtigungen sind inkorrekt.
Ein weiterer Fehler, der ebenfalls häufig auftritt, ist in Listing 7.29 dargestellt. Hier
wurde die Datei nicht gefunden. Überprüfen Sie daher den Pfad der Datei.
ERROR 29 (HY000): File '/tmp/daten.csv' not found (Errcode: 13)
Listing 7.29 Die Datei wird nicht gefunden.
Beachten Sie, dass in diesem Beispiel die Dateien, die Sie laden möchten, auf dem
Server liegen müssen. Allgemein sollten Sie am besten absolute Pfade angeben, da-
7 MySQL administrieren
266
mit der Speicherort der gewünschten Datei eindeutig festgelegt ist. Bei relativen
Pfaden wird das Installationsverzeichnis des Servers als Ausgangspunkt verwendet.
Wie Sie Dateien verwenden können, die auf einem Clientrechner gespeichert sind, se-
hen Sie in Listing 7.36. Natürlich müssen Sie auch bei diesem Importvorgang bereits
festgelegte Constraints berücksichtigen. Andernfalls kann beispielsweise die Fehler-
meldung aus Listing 7.30 auftreten.
ERROR 1452 (23000): Cannot add or update a child row: a foreignkey constraint fails
Listing 7.30 Eine Fremdschlüsselbeziehung wird verletzt.
Dieser Fehler kann dann auftreten, wenn Tabellen untereinander Fremdschlüsselbe-
ziehungen aufweisen, wie es beispielsweise bei InnoDB-Tabellen möglich ist. Wenn
Sie den Namen der Fremdschlüsselbedingung vergessen haben, können Sie sie sich
entweder mit dem Befehl aus Listing 7.31 anzeigen lassen:
mysql> SHOW CREATE TABLE flug;
Listing 7.31 Die Anweisung SHOW CREATE TABLE zum Anzeigen der Tabellendefinition
Oder Sie greifen auf die interne Tabelle »INFORMATION_SCHEMA« zurück und fra-
gen mit dem Statement aus Listing 7.32 direkt die Fremdschlüsselbeziehungen ab:
mysql> SELECT-> CONCAT(table_name,'.',column_name)-> AS 'Fremdschluessel',-> CONCAT(referenced_table_name,'.',-> referenced_column_name) AS 'bezieht sich auf'-> FROM-> information_schema.key_column_usage-> WHERE-> referenced_table_name IS NOT NULL AND table_name-> LIKE 'flug';
Listing 7.32 Fremdschlüssel abfragen
Durch diese SELECT-Anfrage in Listing 7.32 bekommen Sie eine Liste aller Fremd-
schlüssel der Tabelle »flug« zurück. Damit Sie die Tabellen nicht manuell eintippen
müssen, hängt dieser Befehl mittels CONCAT die Tabellen- und Spaltennamen anei-
nander, die in der Datenbank »INFORMATION_SCHEMA« gespeichert sind. Mit AS wer-
den Aliasse für die Spaltennamen angelegt, damit diese leichter verständlich sind.
Details zur CONCAT-Funktion finden Sie in der Referenz. Die Ausgabe dieses Befehls
ist in Listing 7.33 dargestellt.
7.3 Daten importieren und exportieren
267
7
+-------------------+------------------------+| Fremdschluessel | bezieht sich auf |+-------------------+------------------------+| flug.von | flughafen.flughafen_id || flug.nach | flughafen.flughafen_id || flug.fluglinie_id | fluglinie.fluglinie_id || flug.flugzeug_id | flugzeug.flugzeug_id |+-------------------+------------------------+
Listing 7.33 Fremdschlüsselbeziehungen anzeigen
Da Sie nun die Namen der Fremdschlüsselbeziehung kennen, können Sie Daten
leichter in der richtigen Reihenfolge in die Tabellen laden.
Zusätzlich zum Befehl LOAD DATA INFILE, den Sie direkt vom Client aus absetzen können,
finden Sie im Werkzeugkasten das Tool mysqlimport, das für genau denselben Zweck
vorgesehen ist. Es handelt sich dabei um den LOAD-Befehl, der in ein eigenständiges
Programm verpackt wurde, damit Sie Ihre Tabellen bequem von der Kommandozeile
aus befüllen können. Sie können die gleichen Parameter für die Zeilenschaltungen und
Trennzeichen verwenden.
Stellen Sie sich vor, Ihre geniale Marketingabteilung des Flughafens hat ein Gewinn-
spiel durchgeführt, bei dem Anrufer vergünstigte Flüge nach Denis Island gewinnen
konnten. Das Angebot galt nur für Stammkunden, und der Preis entsprach der Rei-
henfolge der Anrufer: Der erste bezahlte nur 1 €, der hundertste Anrufer 100 €, was
ebenfalls ein unschlagbar günstiger Preis für die Destination ist. Da diese Aktion sehr
kurzfristig angelegt war, um den Flieger in den warmen Süden noch voll zu bekom-
men, haben die Mitarbeiter des Telefondienstes die Daten der Anrufer manuell in
eine Excel-Tabelle eingetragen und als CSV-File exportiert. In Listing 7.34 sehen Sie
einen Ausschnitt der CSV-Datei:
87; 748654;90A;19800;88; 748654;90B;8123;89; 748654;90C;33122;
Listing 7.34 Die CSV-Datei mit den glücklichen Gewinnern
Paketgröße und Dateigrößen
Beachten Sie beim Importieren, dass die Dateigröße den Wert der Variablen max_allowed_packet nicht überschreiten darf, da MySQL sonst einen Fehler wirft. Stan-
dardmäßig ist dieser Wert seit der Version 5.6.6 auf 4 MB gesetzt, bei älteren Versio-
nen war die Standardgröße 1 MB. Setzen Sie gegebenenfalls die Variable ent-
sprechend auf einen passenden Wert. Den Befehl dazu finden Sie in Abschnitt 6.3.4,
»Servervariablen setzen und ändern«.
7 MySQL administrieren
268
Diese Datei wurde mit Excel erzeugt, die einzelnen Spalten enthalten der Reihe nach
den Preis des Flugs, die flug_id, die Sitznummer und die passagier_id, die die Mitar-
beiter aus der Kundendatei ausgelesen haben. Der Preis wurde in aufsteigender Rei-
henfolge eingegeben; die Flugnummer ist bei allen identisch, da die Destination des
Aktionsfluges vorgegeben ist. Die einzelnen Einträge sind nur durch Semikolons
getrennt.
Diese Daten sollen Sie nun möglichst unkompliziert in eine eigene Buchungstabelle
namens »gewinner_buchungen« eingeben. Legen Sie dazu die neue Tabelle wie in
Listing 7.35 angegeben an:
mysql> CREATE TABLE gewinner_buchungen (-> buchung_id int(11) NOT NULL AUTO_INCREMENT,-> flug_id int(11) NOT NULL,-> sitzplatz char(4) DEFAULT NULL,-> passagier_id int(11) NOT NULL,-> preis decimal(10,2) NOT NULL,-> PRIMARY KEY ( buchung_id ),-> KEY flug_id ( flug_id ),-> KEY passagier_id ( passagier_id ));
Listing 7.35 Die neue Gewinnertabelle
Um nun diese Daten aus der CSV-Datei zu importieren, können Sie den bereits vorge-
stellten LOAD-Befehl verwenden, oder Sie setzen das Tool mysqlimport ein, das über
denselben Funktionsumfang verfügt. Listing 7.36 zeigt diesen Befehl:
bash# mysqlimport\--fields-terminated-by=';'\--lines-terminated-by='\n'\-u root -p\--columns='preis,flug_id,sitzplatz,passagier_id'\--local\FlughafenDB Pfad/zur/Datei/gewinner_buchungen.csvEnter password:
Listing 7.36 Datenimport mit »mysqlimport«
Wie Sie leicht sehen können, heißen die Parameter gleich wie im LOAD-Befehl. Hier
wurde als Trennungszeichen das Semikolon verwendet, das Zeilenende wird mit
dem \n-Symbol kenntlich gemacht. Neu ist in diesem Beispiel der Parameter columns,
mit dem Sie die Reihenfolge der Spalten in der CSV-Datei angeben können, da sie sich
von der Reihenfolge in Ihrer Datenbank unterscheiden kann.
In diesem Beispiel steht der Preis als Erstes in der Datei, da die Mitarbeiter der
Gewinnhotline zuerst eine Liste mit 100 Plätzen für die Gewinner angelegt haben.
7.3 Daten importieren und exportieren
269
7
Mit der durch Kommas getrennten Liste teilen Sie MySQL mit, wie die Spalten aus der
CSV-Datei in der Datenbanktabelle angeordnet werden müssen. In diesem einfachs-
ten Beispiel sind auch in der CSV-Datei alle Felder relevant für Ihre Datenbank. Das
muss nicht immer der Fall sein. Stellen Sie sich vor, die Telefondienstmitarbeiter hät-
ten in ihrer Excel-Tabelle die Anrufer bewertet und in ihrer Tabelle den subjektiven
Eindruck über den Ausdruck der Freude der Gewinner notiert. Die CSV-Datei mit den
Enthusiasmuswerten sehen Sie in Listing 7.37:
87; 748654;90A;sehr;19800;88; 748654;90B;wenig;8123;89; 748654;90C;euphorisch;33122;
Listing 7.37 CSV-Datei mit einem Attribut, das nicht in der Datenbank erfasst werden soll
Dieses Attribut soll beim Einfügen ignoriert werden. Verwenden Sie dazu das @-Zei-
chen in der columns-Liste vor dem Attribut in der CSV-Datei. MySQL behandelt diese
Spalte nun wie eine Variable und speichert ihren Inhalt nicht in der Tabelle ab, was
andererseits zu einem Fehler führen würde, da sowohl Anzahl der Spalten als auch
die Wertebereiche der CSV-Datei nicht mehr mit der Tabelle zusammenpassen wür-
den. In Listing 7.38 sehen Sie den leicht abgeänderten Befehl in Gänze:
bash# mysqlimport\-d --fields-terminated-by=';'\--lines-terminated-by='\n'\-u root -p\--columns='preis,flug_id,sitzplatz,\@freude,passagier_id'\--local FlughafenDB Pfad/zur/Datei/gewinner_buchungen.csv
Listing 7.38 Der angepasste Aufruf an »mysqlimport«
Die restlichen Parameter stimmen in beiden Beispielen überein. So ist der Parameter
local – so unscheinbar er ist – wichtig. Durch diese Einstellung liest MySQL die Datei
aus dem Dateisystem des Clients, von dem aus der Aufruf erfolgt. Wenn Sie local
nicht angeben, sucht MySQL nach der Datei im Installationsverzeichnis des Servers;
dorthin müssten Sie die CSV-Datei vorher extra kopieren und auch auf die Datenbe-
rechtigungen achten. Wenn Sie jedoch local angeben, werden die Dateisystembe-
rechtigungen des Users verwendet, der mysqlimport aufruft.
Falls Sie sich wundern sollten, woher mysqlimport weiß, in welche Tabelle die Daten
geladen werden müssen, dann betrachten Sie den Dateinamen der CSV-Datei. Das
Tool verwendet immer diesen Namen ohne die Dateiendung – also ohne die Endung
.csv oder welche immer Sie auch gewählt haben – als Zieltabellennamen. Sie können
dieses Verhalten auch nicht durch eine zusätzliche Option ändern. Lediglich der
7 MySQL administrieren
270
Datenbankname – FlughafenDB – wurde im Beispiel angegeben, der Tabellenname
wird automatisch bestimmt. Falls Sie diese Einschränkung – die zugegebenermaßen
nicht sehr praktisch ist – umgehen wollen, müssen Sie den LOAD-Befehl benutzen.
Verwenden Sie beispielsweise einen Aufruf wie in Listing 7.39. Der Parameter -e ist
die Kurzform von --execute.
bash# mysql -e\"LOAD DATA INFILE '/tmp/daten.csv'INTO TABLE flughafen_beschreibung;"\FlughafenDB -u root -p
Listing 7.39 Einfügen von der Kommandozeile mit Tabellenangabe
Ein weiterer Vorteil des LOAD-Befehls gegenüber mysqlimport ist die Tatsache, dass Sie
mit Letzterem keine Warnings ausgeben können, da die Session vom mysqlimport-
Befehl selbst beendet wird. Wenn Sie jedoch LOAD verwenden, können Sie sich etwaige
Warnungen einfach ausgeben lassen.
Sie könnten auch die CSV-Storage-Engine verwenden, die direkt mit CSV-Dateien
arbeitet. Tabellen, die diesen Engine-Typ einsetzen, werden direkt als CSV-Dateien
gespeichert. Durch diese Technik verzichten Sie jedoch auf viele Vorteile von MySQL,
wie beispielsweise die Indizierung.
7.3.2 Daten exportieren
Im vorherigen Abschnitt haben Sie gelernt, wie Sie Datensätze aus Dateien in Ihre
MySQL-Datenbank laden. Selbstverständlich ist auch der umgekehrte Weg möglich,
mit dem Sie die Datensätze Ihrer Tabellen oder auch die Ergebnisse exportieren. Das
ist oftmals notwendig, wenn Sie Ihre Datensammlung oder beliebige Ergebnisse – auch
komplexer – Anfragen mit einem anderen Programm weiterverarbeiten müssen.
Das Gegenstück zu den bereits vorgestellten Methoden, Daten zu laden, ist der Befehl
SELECT INTO OUTFILE, der das Ergebnis einer SELECT-Anfrage in eine Datei auf dem Ser-
ver schreibt. Sie können alle Parameter, Schalter und Optionen verwenden, die Sie
auch für gewöhnliche Abfragen einsetzen. Sie müssen lediglich die Klausel INTO
OUTFILE zusätzlich angeben. Die Anfrage in Listing 7.40 zeigt, wie Sie alle Datensätze
der Tabelle »passagier« in eine Datei im tmp-Verzeichnis Ihres Datenbankenservers
speichern können. Auch hier wurde ein absoluter Pfad verwendet, da dieser eindeu-
tig ist und auch auf Dateien außerhalb des Datenbanken-Installationsverzeichnisses
verweisen kann.
mysql> SELECT * INTO OUTFILE-> '/tmp/allePassagiere.csv'-> FIELDS TERMINATED BY ';'
Index
771
Index
.NET Framework............................................... 92, 659
@-Zeichen ................................................................. 269
[mysqld] ..................................................................... 240
1NF .................................................................................. 82
2NF .................................................................................. 86
32 Bit............................................................................... 94
3NF .................................................................................. 86
64 Bit............................................................................... 94
A
Abbruchbedingung ................................................ 581
Abfrageerweiterung .............................................. 408
Abfrageverarbeitung....................................... 155, 157
Abhängigkeit
funktionale.............................................................. 59
transitive .................................................................. 86
Abhörversuch ........................................................... 514
Ablaufsteuerung ....................................................... 571
Aborted_connects.................................................. 298
Abstraktion .................................................................. 35
Modellierung .......................................................... 49
Absturz ............................................................... 287, 292
ACID-Eigenschaften ....................................... 172, 183
ACID-konform .................................................. 191, 333
ACTION_CONDITION ........................................... 620
ACTION_ORDER...................................................... 620
ACTION_ORIENTATION........................................ 621
ACTION_REFERENCE_NEW_ROW .................... 621
ACTION_REFERENCE_NEW_TABLE ................. 621
ACTION_REFERENCE_OLD_ROW ..................... 621
ACTION_REFERENCE_OLD_TABLE .................. 621
ACTION_STATEMENT ............................................ 621
ACTION_TIMING ..................................................... 621
ADD PARTITION............................................. 458, 459
Administrationsaufgaben ................................... 255
Administratorberechtigungen ................... 94, 473
Administratorkonto............................................... 223
AFTER ........................................................................... 614
AFTER DELETE........................................................... 617
AFTER INSERT ........................................................... 616
AFTER UPDATE ......................................................... 617
Aktualisierung � Update
Algebra
relationale ............................................................. 149
Alias........................................................................ 65, 616
ALL ................................................................................ 488
ALL PRIVILEGES ...................................................... 470
ALTER .................................................................. 479, 558
ALTER EVENT ................................................... 629, 732
ALTER FUNCTION .......................................... 558, 730
ALTER PROCEDURE ....................................... 544, 728
ALTER ROUTINE.............................................. 482, 538
ALTER TABLE ............................................................. 126
ALTER TABLE ADD FOREIGN KEY .................... 704
ALTER TABLE ADD PARTITION .......................... 744
ALTER TABLE ANALYZE PARTITION ................ 745
ALTER TABLE CHECK PARTITION ..................... 745
ALTER TABLE COALESCE PARTITION .............. 745
ALTER TABLE DROP FOREIGN KEY ................. 704
ALTER TABLE DROP PARTITION ....................... 745
ALTER TABLE EXCHANGE PARTITION............ 746
ALTER TABLE OPTIMIZE PARTITION ............... 746
ALTER TABLE REBUILD PARTITION ................. 746
ALTER TABLE REMOVE PARTITIONING ......... 745
ALTER TABLE REORGANIZE PARTITION ........ 746
ALTER TABLE REPAIR PARTITION .................... 746
ALTER TABLE TRUNCATE PARTITION............. 747
ALTER VIEW ....................................................... 539, 725
ANALYZE PARTITION ........................................... 460
ANALYZE_TABLE ..................................................... 477
AND ............................................................................... 573
Änderungsanomalie ................................................. 81
AND-Verknüpfung ................................................. 705
Anfrageüberprüfung ............................................ 470
Anmeldung................................................................ 726
Anmeldung � Login ............................................. 230
ANSI SQL
2003 SQL/PSM..................................................... 532
Antelope ..................................................................... 194
Anweisung
bedingte .................................................................. 572
API .................................................................................. 251
Application Programming Interface � API
Applikationsberechtigungen ............................ 506
apt ................................................................................. 103
ARCHIVE .................................................................... 204
ASCII ..................................................................... 232, 714
ASTEXT ........................................................................ 743
ASTEXT() ..................................................................... 394
Atomarität .................................................................. 172
atomarity .................................................................... 172
Attribut .................................................................. 56, 68
Aufwärmen................................................................. 312
Index
772
Ausfallsicherheit...................................................... 361
Ausführer.................................................................... 169
Ausführung................................................................ 543
Ausführungseinheit ............................................... 169
Ausführungsplan ........................................... 149, 164
Ausgabe
vertikale.................................................................. 120
Ausgabeparameter ................................................ 546
Austrittspunkt .......................................................... 553
Authentifizierung ................................................... 231
Autocommit-Modus ...................................... 175, 176
Auto-Increment ....................................................... 367
auto-increment-increment................................ 368
auto-increment-offset.......................................... 368
automysqlbackup ................................................... 291
Axmark, David............................................................ 41
B
Backtick ....................................................................... 478
Backup .......................................... 37, 271, 272, 361, 537
inkrementelles ..................................................... 278
logisches ........................................................ 274, 278
physisches.............................................................. 274
volles ........................................................................ 277
Barracuda.................................................................... 194
BASE ............................................................................. 678
base_dir ...................................................................... 244
bashrc ........................................................................... 228
Bash-Shell ........................................................... 212, 227
Bedienfehler ............................................................. 288
Bedingte Anweisung .............................................. 572
BEFORE ........................................................................ 614
BEFORE DELETE........................................................ 617
BEFORE INSERT ........................................................ 616
BEFORE UPDATE ...................................................... 616
BEGIN ................................................................... 176, 722
BEGIN WORK ............................................................. 176
BEGIN/END-Blöcke ................................................. 733
Begrenzungszeichen .............................................. 533
BENCHMARK.................................................... 313, 760
Benchmark ........................................................ 297, 312
Benutzer erzeugen................................................. 488
Benutzerdefinierte MySQL-Variable .............. 566
Benutzereingaben maskieren ............................ 523
Benutzergruppe ...................................... 215, 219, 233
Benutzerkonto
Betriebssystemebene.......................................... 215
Benutzeroberfläche ................................................ 256
Benutzerrechte......................................................... 229
Owner ...................................................................... 219
Benutzerzugang ...................................................... 229
Berechtigungen ............................................... 231, 467
auf Zeilenebene ................................................... 507
Berechtigungsebene .............................................. 472
Berechtigungstabelle.............................................. 257
Bereichsanfrage .............................................. 203, 387
Berkeley DB ................................................................. 43
Bezeichner ............................................................ 52, 112
Bezeichnerschema ................................................. 566
Beziehung .............................................................. 68, 72
1:1-Beziehung........................................................... 75
1:n-Beziehung......................................................... 76
Arten ........................................................................... 73
identifizierende ...................................................... 75
n:m-Beziehung ...................................................... 76
symmetrische......................................................... 76
BIN.................................................................................. 715
Binärdatei..................................................................... 39
Binärdistribution ..................................................... 255
Binäres Logging ....................................................... 538
Binär-Log ........................................................... 242, 288
Binary............................................................................. 92
bind_address ............................................................ 244
binlog_format .......................................................... 242
BIT_LENGTH .............................................................. 715
BLACKHOLE.............................................................. 206
Blattknoten................................................................ 383
BLOB ............................................................................. 335
Block ............................................................ 382, 541, 563
Blog .................................................................................. 33
Boolesche Volltextsuche � Volltextsuche
Buffer-Management ............................................... 152
Bug .................................................................................. 46
Build-Tools.................................................................. 214
Business Intelligence................................................ 32
C
CA ................................................................................... 517
Cache ................................................................... 160, 257
CALL..................................................................... 543, 728
CallableStatements ................................................ 655
Cardinality ................................................................. 414
CASE...................................................................... 577, 734
Catch-all-Partition .................................................. 448
Certificate Authority � siehe CA
CHANGE MASTER ................................................... 372
CHANGE MASTER TO ........................................... 740
CHAR ............................................................................. 715
CHAR_LENGTH ......................................................... 715
CHARACTER_LENGTH ........................................... 715
Index
773
CHARACTER_MAXIMUM_LENGTH................ 560
CHARACTER_OCTET_LENGTH ......................... 560
CHARACTER_SET_CLIENT ....... 562, 619, 621, 630
CHARACTER_SET_NAME ..................................... 561
CHECK .......................................................................... 293
CHECK PARTITION................................................. 460
CHECK TABLE .................................................... 558, 755
Chen-Notation............................................................ 73
Cipher........................................................................... 518
Clearing ....................................................................... 631
Client .............................................................................. 93
Client-Server-System ............................................... 39
CLOSE ........................................................................... 585
CLOSE CURSOR ......................................................... 737
cmake ........................................................................... 214
COALESCE .................................................................. 460
Codd, Edgar ........................................................... 34, 82
Code wiederverwenden ........................................ 529
Cold Copy � Offline-Backup
COLLATION_CONNECTION..... 562, 619, 621, 630
COLLATION_NAME ................................................ 561
COLUMNS .................................................................. 446
columns_priv........................................................... 497
COLUMNS-Partitionierung ................................. 452
COMMENT.................................................................. 543
COMMIT ............................................ 174, 558, 612, 722
Community ................................................................. 39
Compiler ..................................................................... 212
CONCAT........................................................................ 715
CONCAT_WS............................................................... 715
Condition................................................................... 594
Connector................................................................... 641
Connector/J .............................................................. 650
Connector/NET ....................................................... 659
consistency ................................................................. 172
Constraint ......................................................... 127, 266
CONTAINS SQL ................................................ 542, 554
Content
dynamisch generierter ....................................... 32
Content-Management-System ............................ 33
Continue-Handler ......................................... 590, 595
Crash Recovery................................................ 287, 295
CREATE ............................................................... 477, 558
CREATE DATABASE ....................................... 699, 747
CREATE EVENT................................................. 624, 732
CREATE FUNCTION ........................................ 552, 729
CREATE INDEX ......................................................... 704
CREATE PROCEDURE ........................... 540, 541, 727
CREATE ROUTINE .................................................... 481
CREATE SERVER....................................................... 764
CREATE TABLE .................................................. 113, 699
mit Partitionen.................................................... 743
Storage-Engine-Einstellungen ...................... 764
CREATE TABLESPACE............................................ 489
CREATE TEMPORARY TABLE .............................. 478
CREATE TRIGGER ..................................................... 731
CREATE USER ................................................... 488, 752
CREATE VIEW ................................................... 480, 725
CREATE_ROUTINE .................................................. 538
CREATE_TEMPORARY_TABLES ........................ 608
CREATED.................................................... 562, 619, 621
Cronjob............................................................... 532, 622
CRUD ............................................................................. 122
CSV ....................................................................... 205, 265
CSV-Storage-Engine ............................................... 270
CURRENT_TIMESTAMP ........................................ 625
Cursor ................................................................. 583, 585
öffnen ...................................................................... 585
verschachtelter................................................... 604
D
Daemon ................................................................ 39, 221
Data Definition Language � DDL
Data Dictionary .......................................................... 35
DATA DIRECTORY .................................................. 450
DATA_TYPE .............................................................. 560
Database Collation ....................................... 619, 630
DATABASE_COLLATION ............................. 562, 621
Dateiberechtigung.......................................... 219, 223
Daten............................................................................... 23
Repräsentation....................................................... 35
Datenabstraktion ...................................................... 34
Datenbank ............................................................. 23, 24
aktivieren................................................................ 231
deduktive ................................................................. 28
Index........................................................................ 130
mobile ....................................................................... 28
objektorientierte.................................................... 27
XML-Datenbank .................................................... 27
Datenbankabstraktionsschicht......................... 641
Datenbankapplikation.......................................... 148
Datenbankdesign............................................... 36, 67
Datenbankebene ..................................................... 473
Datenbankentwurf
Anforderungsanalyse ......................................... 50
konzeptioneller ...................................................... 51
logischer.................................................................... 52
physischer ................................................................ 52
Datenbankindex ............................................... 33, 130
Index
774
Datenbankmanagementsystem ................ 24, 229
relationales ............................................................. 26
Datenbankmodell
hierarchisches ........................................................ 25
Netzwerkdatenbankmodell .............................. 25
objektorientiertes ................................................. 27
objektrelationales ................................................ 27
relationales ............................................... 25, 55, 147
Datenbankmodellierung........................................ 49
Datenbankserver ....................................................... 34
Datenbankverwaltung .......................................... 149
Datendurchsatz........................................................ 312
Datenintegrität .......................................................... 36
Datenkommunikation ......................................... 530
Datensatz ................................................................ 25, 56
Datensicherheit ......................................................... 37
Datenstruktur ............................................................. 26
Datentypen ................................................................ 536
Datenverzeichnis .................................................... 224
Datum ......................................................................... 697
aktuelles .................................................................. 712
Datumsangabe
erzeugen .................................................................. 711
Formatierung ....................................................... 714
umwandeln ............................................................ 711
Datumsarithmetik .................................................. 710
Dauerhaftigkeit ......................................................... 172
Db.................................................................................. 630
DBD .............................................................................. 664
mysql ...................................................................... 664
DBI ................................................................................ 664
DBMS � Datenbankmanagementsystem
DDL.......................................................................... 52, 558
Deadlock ..................................................................... 184
DEALLOCATE PREPARE ................................. 558, 755
Debian.......................................................................... 212
Debugging ........................................................ 549, 580
DECLARE ............................................................ 565, 736
DECLARE CONDITION ........................................... 738
DECLARE CURSOR .......................................... 584, 736
DECLARE HANDLER ....................................... 591, 737
default-character-set.............................................. 272
Default-Wert............................................................. 568
DEFINER .................................................... 483, 562, 621
Definer .............................................. 552, 614, 619, 630
Deklarieren ................................................................ 565
DELETE ....................................................... 234, 477, 703
Delimiter..................................................................... 533
DESCRIBE .................................................................... 726
DETERMINISTIC .............................................. 542, 554
Deterministisch ....................................................... 542
DHE-RSA-AES256-SHA ........................................... 519
Dirty Read ................................................................... 179
Disjunktion.................................................................. 63
Distance() ................................................................... 395
Distributed Transaction Processing:
The XA Specification.......................................... 183
DNS ................................................................................. 29
DO ................................................................................. 627
Dokumentation ....................................................... 536
Downloadlink .............................................................. 91
DROP ................................................................... 479, 558
DROP DATABASE ........................................... 699, 747
DROP EVENT .................................................... 628, 733
DROP FUNCTION .................................................... 730
DROP INDEX ............................................................. 705
DROP PARTITION.................................................... 459
DROP PREPARE ......................................................... 755
DROP PROCEDURE ........................................ 544, 728
DROP SERVER ........................................................... 764
DROP TABLE .............................................................. 701
DROP TRIGGER ................................................ 618, 731
DROP USER ................................................ 235, 471, 752
DROP VIEW ................................................................. 725
DTD_IDENTIFIER ...................................................... 561
durability..................................................................... 172
Durchschnitt............................................................... 63
-DWITH_PARTITION_STORAGE_ENGINE=1... 445
E
Ebene
Globale ................................................................... 473
Editor
nano......................................................................... 237
Eigenschaft
multidimensionale ............................................ 394
Einbenutzerbetrieb
virtueller.................................................................. 172
Einfügeanomalie ........................................................ 81
Eingabeparameter .................................................. 546
Einschränkungen .................................................... 465
Eintrittspunkt............................................................ 553
Einwegfunktion ....................................................... 233
ELSEIF ............................................................................ 575
ELT .................................................................................. 716
Ends ............................................................................. 630
End-User License Agreement � EULA
ENGINE=InnoDB ..................................................... 189
Entität .............................................................. 67, 68, 69
existenzabhängige ............................................... 75
Entity-Relationship-Modell � ER-Modell
Index
775
enumeration .............................................................. 133
ENVELOPE ......................................................... 398, 743
Ergebnismenge ....................................................... 550
Ende......................................................................... 589
ER-Modell ............................................................... 51, 68
error code ................................................................... 139
error.log � Error-Log
error_log ..................................................................... 242
Error-Log ................................................... 282, 285, 292
Erzeugen von Cursors ........................................... 584
Escapen ........................................................................ 522
Escape-Sequenz....................................................... 769
Escape-Sequenz � Maskierungszeichen
Escape-Zeichen ......................................................... 523
EULA ............................................................................... 95
EVENT.................................................................. 481, 632
Event............................................................ 531, 538, 622
bearbeiten............................................................. 628
EVENT_MANIPULATION ..................................... 620
EVENT_OBJECT _TABLE ....................................... 620
EVENT_OBJECT_CATALOG ................................. 620
EVENT_OBJECT_SCHEMA ................................... 620
event_scheduler ...................................................... 623
Events........................................................................... 619
Event-Scheduler....................................................... 623
EVERY .......................................................................... 626
EXECUTE ......................... 243, 482, 538, 558, 726, 755
Execute at .................................................................. 630
Execution-Engine............................................ 155, 169
Exit-Handler .................................................... 590, 596
EXPLAIN ............................................................. 410, 558
EXPLAIN PARTITIONS................................... 461, 747
Export.......................................................................... 270
Linux-Befehl .......................................................... 227
EXPORT_SET.............................................................. 716
EXTENDED STATUS ................................................ 748
EXTERNAL_LANGUAGE ........................................ 561
EXTERNAL_NAME ................................................... 561
F
Faktor Mensch .......................................................... 510
Fallunterscheidung ............................... 571, 572, 576
false ............................................................................... 572
FEDERATED............................................................... 204
Fehler........................................................................... 590
Fehlermeldung ......................................................... 591
Fehlernummer ...................................... 590, 592, 767
Fernwartungssoftware .......................................... 516
FETCH .......................................................................... 586
FETCH INTO ............................................................... 737
Fetchen
mehrfaches ........................................................... 588
FIELD ............................................................................. 716
FILE............................................................................... 489
Privileg..................................................................... 271
FIND_IN_SET ............................................................. 716
Firewall ................................................................ 322, 515
FIRST............................................................................ 204
FLOOR ................................................................. 398, 542
FLUSH .................................................................. 257, 558
FLUSH HOSTS ........................................................... 747
FLUSH LOGS .............................................................. 289
FLUSH PRIVILEGES ........................................ 499, 754
FLUSH QUERY CACHE ........................................... 762
FLUSH TABLES WITH READ LOCK ..................... 371
flush-hosts ......................................................... 257, 258
flush-logs ............................................................ 257, 258
flush-privileges ......................................................... 257
flush-status................................................................. 257
flush-tables ................................................................. 257
flush-threads.............................................................. 257
FORMAT ....................................................................... 716
Format
dynamisches ........................................................ 198
statisches ............................................................... 198
Forum ............................................................................. 33
Forward Engineering ..................................... 80, 305
Free Software Foundation � FSF
Fremdschlüsselbeziehung .................................. 266
frm-Datei ..................................................................... 191
FROM_BASE64 .......................................................... 717
FSF ................................................................................... 45
ft_boolean_syntax ................................................ 407
ft_max_word_len .................................................. 407
ft_min_word_len................................................... 407
ft_query_expansion_limit ...................... 407, 409
ft_stopword_file..................................................... 406
Full-Table-Scan................................................ 354, 379
FULLTEXT ................................................................... 401
FUNCTION................................................................... 552
Fünf-Schichten-Modell .......................................... 147
Funktion
statistische ............................................................... 32
Funktionale Abhängigkeit..................................... 59
Funktionalität ............................................................ 68
G
Geoinformationssystem � GIS
Geo-Koordinaten ...................................................... 34
Geometrieobjekt erzeugen ................................. 394
Index
776
GEOMETRY................................................................. 392
GEOMETRYCOLLECTION ...................................... 392
GeomFromText........................................................ 743
Geplanter Task.......................................................... 622
Gespeicherte Funktionen .................... 531, 551, 552
Gespeicherte Programme ......... 282, 399, 529, 531
Gespeicherte Prozeduren ............................ 531, 539
bearbeiten.............................................................. 544
erzeugen ................................................................ 540
löschen .................................................................... 544
GIS.................................................................................. 392
GLOBAL .............................................................. 245, 246
Globale Ebene ........................................................... 473
Globale Transaktions-ID....................................... 363
globale Transaktions-ID � GTID
GNU General Public License � GPL
GNU/Linux......................................................... 39, 100
GPL ........................................................................... 45, 95
GRANT................................................ 234, 471, 491, 752
GRANT OPTION........................................................ 487
Groß- und Kleinschreibung ............................... 402
Grundinstallation ..................................................... 93
GTID .............................................................................. 363
Gültigkeitsbereich ................................................. 569
einer Variablen ................................................... 569
eines Handlers .................................................... 603
Gültigkeitsbereich � Scope
H
Handler....................................................................... 590
Gültigkeitsbereich ............................................. 603
Hardwareanforderungen ....................................... 92
HASH ................................................................... 237, 446
Hashausdruck ........................................................... 453
Hashfunktion............................................................ 232
Hashindex .................................................................. 382
Hashing ....................................................................... 453
lineares ................................................................... 455
HASH-Partitionierung........................................... 453
Hashtabelle ................................................................ 382
Hauptverzeichnis ................................................... 284
have_query_cache ................................................... 161
HELP............................................................................. 766
HEX................................................................................. 717
Hintergrundprozess
Daemon .................................................................. 102
Hochverfügbarkeit .................................................. 40
Homeverzeichnis .................................................... 237
Horizontale Skalierung ......................................... 677
Host............................................................................... 258
Hostname ................................................................... 231
Hot Copy � Online-Backup
I
ib_logfile0 .................................................................. 194
ib_logfile1 .................................................................. 194
ibdata1.......................................................................... 193
IDEF1X ............................................................................ 73
Identifier
vollständig qualifizierter ................................. 112
Identität
Benutzeridentifizierung.................................... 231
IF-THEN-ELSE ............................................................. 572
IF-THEN-ELSEIF-ELSE ..................................... 575, 734
Import................................................................. 264, 757
komprimierter ..................................................... 758
INDEX.................................................................. 130, 479
Index ............................................................................... 33
adaptiver Hashindex ........................................ 192
B-Baum ................................................... 191, 197, 383
clustered......................................................... 191, 387
gruppierter ............................................................ 387
Hashindex .................................................... 192, 203
nicht gruppierter ................................................ 388
non-clustered .............................................. 198, 388
Primärindex ........................................................ 380
räumlicher.................................................... 393, 394
R-Baum ................................................. 197, 389, 394
Sekundärindex ........................................... 381, 388
Spatial-Index........................................................ 394
INDEX DIRECTORY ................................................ 450
Indexstruktur ........................................................... 394
Information Hiding ............................................... 529
INFORMATION_SCHEMA ......... 252, 266, 298, 559
INFORMATION_SCHEMA.PARTITIONS ......... 464
Informationssystem................................................. 33
init.d ............................................................................. 226
Initialized .................................................................... 631
Inkonsistenz......................................................... 28, 36
InnoDB ........................................................ 173, 191, 325
reparieren .............................................................. 287
innodb_buffer_pool_size........... 192, 193, 325, 331
innodb_file_format ............................................... 194
innodb_file_per_table .................................. 192, 193
innodb_flush_log_at_trx_commit ................. 332
innodb_force_recovery ....................................... 296
innodb_log_file_size.............................................. 193
INOUT .......................................................................... 622
INOUT-Parameter ................................................... 549
IN-Parameter ............................................................ 546
Index
777
INSERT......................................................... 234, 477, 717
INSERT DELAYED ............................................ 201, 539
INSERT INTO ............................................................. 703
INSTALL PLUGIN...................................................... 763
Instanz .................................................................. 62, 236
Integrität
Datenintegrität ..................................................... 36
referentielle ............................................................ 125
INTERVAL................................................................... 626
Interval Field ............................................................ 630
Interval Value........................................................... 630
INVOKER .................................................................... 483
IP-Adresse................................................................... 231
IS_DETERMINISTIC ................................................. 561
ISAM............................................................................. 386
Isolation ............................................................... 172, 177
Isolationslevel................................................... 177, 178
ITERATE .............................................................. 579, 735
Iteratives Vorgehensmodell ................................. 53
J
Java ............................................................................... 650
Java Database Connectivity � JDBC
JavaScript .................................................................... 671
JDBC ............................................................................. 650
Join � Verbund
Join-Reihenfolge ...................................................... 168
K
Kapselung ................................................ 485, 507, 529
Kapselungsschicht ................................................. 507
Kardinalität
Relation .................................................................... 72
Kartografiesystem .................................................... 34
Katalog ......................................................................... 149
KEY ............................................................................... 446
key_buffer .................................................................. 338
key_len ........................................................................ 412
Key-Cache ................................................................... 333
KEY-Partitionierung ............................................... 455
KILL ............................................................................... 263
KILL CONNECTION................................................. 749
KILL QUERY ............................................................... 749
Kindknoten ................................................................ 383
Knoten ......................................................................... 361
Kommandozeile ............................................. 102, 107
Kommandozeilenparameter
dynamischer ......................................................... 243
statischer................................................................ 243
Kommentar ........................................ 52, 237, 535, 543
einzeiliger .............................................................. 536
mehrzeiliger.......................................................... 536
Kompatibilität.......................................................... 566
Kompilieren ........................................................ 92, 211
Kompilierung ............................................................ 212
Komprimierte Tabelle........................................... 194
Konfigurationsdatei ...................... 211, 224, 235, 321
Beispielkonfiguration ........................................ 321
globale .................................................................... 236
sichern ..................................................................... 281
Konfigurationsdatei � my.cnf
Konkurrierende Schreibvorgänge ...................... 37
Konnektor ................................................. 153, 641, 643
nativer .................................................................... 643
Konsistenz ......................................... 36, 172, 590, 613
Konsole ....................................................................... 243
Kontext ....................................................................... 245
Kontrollfluss .............................................................. 553
Konzeptionelles Schema ....................................... 50
Korrektheit ............................................................... 590
Korrelierte Subquery ............................................. 422
Korruption................................................................. 292
Krähenfuß-Notation................................................. 73
Kreuzprodukt ............................................................. 65
Künstlicher Schlüssel ............................................ 418
Kurzschreibweise .................................................... 242
L
LANGUAGE ................................................................ 542
LANGUAGE SQL ....................................................... 554
Larsson, Allan .............................................................. 41
LAST ............................................................................. 204
LAST_ALTERED ........................................................ 562
Lastverteilung ........................................................... 361
Latenz............................................................................ 311
Laufzeit........................................................................ 243
LCASE ............................................................................ 721
LEAVE .................................................................. 579, 734
LEFT................................................................................ 717
LENGTH........................................................................ 717
LIKE ............................................................ 400, 430, 717
LINE............................................................................... 392
Lineare KEY-Partitionierung .............................. 456
Linearer Zweierpotenz-Algorithmus .............. 455
Lineares Hashing..................................................... 455
LINEARRING .............................................................. 392
LINESTRING ...................................................... 392, 393
Linux-User ................................................................. 285
LIST................................................................................ 446
Index
778
LIST COLUMNS ......................................................... 452
LIST-Paritionierung ............................................... 450
Lizenz
Open-Source-Lizenz ............................................. 44
Lizenzmodell............................................................... 38
duales ........................................................................ 46
Lizenznehmer ............................................................. 44
LOAD
Systemwerte ......................................................... 273
LOAD DATA.............................................. 264, 539, 759
LOAD TABLE .............................................................. 539
LOAD_FILE ................................................................. 718
local .............................................................................. 269
LOCATE ........................................................................ 718
Lochkarte ...................................................................... 24
LOCK ............................................................................. 558
Lock ............................................................................... 184
LOCK TABLES.......................... 185, 186, 479, 539, 724
Lock-Management .................................................. 184
Locks ............................................................................. 184
lock-tables ................................................................. 280
log_bin........................................................................ 370
log_bin_basename ................................................. 242
log_bin_trust_function_creators ........... 538, 555
Logarithmen............................................................. 707
Logging
binäres .................................................................... 538
logisches ................................................................ 364
Logik
ternäre...................................................................... 116
Login ............................................................................ 230
Logischer Operator ................................................. 573
Log-Tabelle ................................................................. 615
Lokalität ...................................................................... 381
LOOP .................................................................... 579, 735
Löschanomalie ........................................................... 81
Lost Update ................................................................. 171
LOWER .......................................................................... 721
LPAD ............................................................................. 718
LTRIM ........................................................................... 718
M
make .............................................................................. 217
install ...................................................................... 249
MAKE_SET .................................................................. 718
Maskieren ................................................................... 522
von Benutzereingaben ..................................... 523
Maskierungszeichen .............................................. 239
Master-Master-Replikation � Replikation
Master-Slave-Replikation � Replikation
max_allowed_packet ................................... 242, 267
max_binlog_size..................................................... 289
max_connect_errors............................................. 258
max_connections................................................... 329
MAX_CONNECTIONS_PER_HOUR .................. 492
MAX_QUERIES_PER_HOUR ............................... 492
max_sp_recursion_depth.................................. 608
MAX_UPDATES_PER_HOUR.............................. 492
MAX_USER_CONNECTIONS............................... 492
MAXVALUE................................................................ 448
MBRContains ................................................... 398, 743
md5-Hash.................................................................... 514
Mehrbenutzersystem.............................................. 36
Mehrfaches Fetchen .............................................. 588
Mehrfachzuweisung .............................................. 567
Memcached ............................................................... 679
memcached .............................................................. 206
MEMORY .................................................................... 202
Memory-Tabelle ..................................................... 609
Mengentheorie ........................................................... 55
MERGE ......................................................................... 203
Metadaten........................................................... 25, 298
Minimale Systemanforderungen....................... 92
Mixed Format........................................................... 364
Modellentwurf ........................................................... 50
MODIFIES SQL DATA ..................................... 542, 554
mSQL ............................................................................... 41
Multidimensionale Eigenschaft ....................... 394
MULTILINESTRING ................................................. 392
MULTIPOINT ............................................................. 392
Multipoint.................................................................. 397
MULTIPOLYGON ..................................................... 392
Multiversion Concurrency Control.................. 191
Munin .......................................................................... 273
Mutex .......................................................................... 342
my.cnf........................................ 224, 235, 236, 237, 321
Block ........................................................................ 238
Optionen ................................................................ 239
my.cnf � Konfigurationsdatei
MYD-Datei ................................................................. 199
MYI-Datei ................................................................... 199
MyISAM ............................................................. 197, 386
innodb_buffer_pool_size................................ 325
räumlicher Index ................................................ 393
skip-external-locking ........................................ 323
myisam_sort_buffer_size ................................... 325
myisamcheck............................................................ 295
myisamchk ...................................................... 200, 756
myisamchk (Komprimierung) .......................... 763
myisampack (Komprimierung) ........................ 763
mysql ............................................................................ 255
Index
779
MySQL AB ........................................................ 38, 42, 43
MySQL Administrator ................................. 255, 308
MySQL Cluster ............................................................ 46
MySQL Community Server ........................... 38, 211
MySQL Enterprise Edition ..................................... 46
MySQL Performance Tuning Script ................. 326
MySQL Proxy ............................................................ 365
MySQL Query Browser .......................................... 255
MySQL Stored Program Language .......... 530, 532
MySQL Workbench ....... 68, 255, 302, 373, 532, 534
mysql.db .................................................................... 496
mysql_install_db.................................................... 220
mysql_secure_installation.................................. 222
mysql_upgrade ....................................................... 250
mysqladmin ..................................................... 255, 256
mysqlbinlog...................................................... 289, 758
mysqlcheck ....................................................... 255, 294
mysqld ...................................................... 236, 240, 242
MySQL-Daemon....................................................... 102
MySQLdb ................................................................... 669
mysqldump ..................... 255, 275, 278, 371, 537, 757
mysqlfailover ............................................................ 373
mysqlhotcopy.................................................. 285, 758
mysqli .......................................................................... 655
mysqlimport .................................................... 255, 267
MySQL-Konsole........................................................ 533
MySQL-Python ........................................................ 669
mysqlreplicate .......................................................... 373
mysqlrpladmin ........................................................ 373
mysqlrplcheck .......................................................... 373
mysqlrplshow ........................................................... 373
mysqlslap .................................................. 255, 297, 761
MySQLStartupItem.pkg ....................................... 106
MySQL-Variable
benutzerdefinierte............................................. 566
mytop.................................................................. 301, 761
N
Nagios .......................................................................... 261
Name ........................................................................... 630
Namensschema ...................................................... 566
Natürlichsprachliche Suche ............................... 402
Nebenläufigkeit ............................................... 170, 611
.NET Framework............................................... 92, 659
Netzwerk
absichern................................................................. 515
NEW .............................................................................. 616
Newline........................................................................ 265
NO SQL ................................................................ 542, 554
Node.js ......................................................................... 671
node-mysql ................................................................ 671
Non_unique .............................................................. 414
Non-clustered Index.............................................. 388
Non-repeatable Read ............................................. 180
Normalform ................................................................. 81
dritte .......................................................................... 86
erste ........................................................................... 82
weitere ...................................................................... 88
zweite ................................................................. 84, 86
Normalform:Adritte ................................................ 82
Normalform:Bdritte ......................................... 84, 86
Normalform:Cdritte ................................................ 86
Normalform:Ddritte................................................ 88
NoSQL .......................................................................... 675
NOT ................................................................................ 573
NOT DETERMINISTIC............................................. 542
NOT FOUND .............................................................. 594
NOT LIKE...................................................................... 717
NOT NULL.................................................................... 116
Not Only SQL ............................................................ 675
NOT REGEXP .............................................................. 719
NOT-Verknüpfung.................................................. 705
NOW() .......................................................................... 364
NUMERIC_PRECISION............................................ 561
NUMERIC_SCALE ..................................................... 561
Numerische Datentypen
(Ganzzahlen) .............................................. 696, 698
Numerische Datentypen (reelle Zahlen) ...... 696
Nutzungsrechte ......................................................... 44
O
Object Relational Mapping ................................. 641
Objektebene .............................................................. 474
OCTET_LENGTH ....................................................... 717
ODBC ........................................................................... 646
ODBC-Konnektor ................................................... 646
OFF ................................................................................ 247
Offline-Backup ......................................................... 276
OLAP................................................................................ 31
OLD ............................................................................... 616
OLTP ................................................................................ 31
ON ................................................................................. 247
ON COMPLETION PRESERVE .............................. 628
ON DELETE CASCADE ............................................. 127
ON SCHEDULE .......................................................... 628
Online Analytical Processing � OLAP
Online Transaction Processing � OLTP
Online-Backup.......................................................... 276
OPEN ............................................................................ 585
OPEN CURSOR ........................................................... 737
Index
780
Open Database Connectivity � ODBC
Open Geospatial Consortium ............................ 392
Open Group ............................................................... 183
Open Source ........................................................ 44, 311
Open Source Initiative ............................................ 45
OpenGIS Simple Features Specification
for SQL..................................................................... 392
Operator
logischer ................................................................. 573
Operatorgraph.......................................................... 149
Optimierer ................................................ 149, 155, 164
Optimierung .............................................................. 40
Kompilierung ....................................................... 212
OPTIMIZE .................................................................... 756
OPTIMIZE PARTITION........................................... 460
OPTIMIZE TABLE............................................ 199, 294
OPTIMIZE_TABLE .................................................... 477
optimizer_prune_level ......................................... 165
optimizer_search_depth...................................... 165
Optionen
Wert.......................................................................... 243
Zuweisung ............................................................. 243
Optionsdatei � Konfigurationsdatei ............. 235
Optionsname ............................................................ 239
OR .................................................................................. 573
Oracle ...................................................................... 38, 43
Originator .................................................................. 630
OR-Verknüpfung .................................................... 705
OS X 10.2.x ................................................................. 105
OUT ............................................................................... 622
OUTFILE...................................................................... 270
OUT-Parameter ........................................................ 548
P
PACK_KEYS ................................................................ 198
Paging .......................................................................... 325
Paketgröße ................................................................. 267
Paketmanager.......................................................... 249
apt............................................................................. 213
Parameter ......................................................... 239, 546
PARAMETER_STYLE................................................ 561
Parametrisierte Anweisung � Prepared
Statement
Parser............................................................................. 155
Partition
hinzufügen ............................................................ 458
partition ...................................................................... 445
PARTITION BY RANGE() ........................................ 447
Partition Lock Pruning.......................................... 461
Partition Pruning .................................................... 461
Partition Selection.................................................. 461
Partitionieren ........................................................... 443
zusammengesetztes.......................................... 456
Partitionierung
basierend auf mehreren Spalten.................. 452
horizontale ........................................................... 443
vertikale ................................................................. 444
Partitionierungsschlüssel ................................... 446
Partitionsfunktion ................................................. 445
Partitionsschlüssel ................................................. 445
Partitionsunterstützung...................................... 445
PASSWORD ..................................... 232, 455, 497, 748
Passwort
neu setzen ............................................................. 259
root ................................................................. 223, 258
Sicherheit ............................................................... 223
Passwort-Hashing.................................................... 514
PATH ................................................................... 107, 226
PDO ............................................................................... 655
Percona ........................................................................ 321
Percona Toolkit................................................ 318, 414
Percona XtraBackup .............................................. 286
Performance Schema
Aggregattabelle .................................................. 356
Einstellungen ....................................................... 344
history ..................................................................... 342
Messinstrument .................................................. 343
performance_schema (Datenbank)............ 339
PERFORMANCE_SCHEMA (Engine) ............ 339
performance_timers .......................................... 357
setup_actors......................................................... 344
setup_timers ......................................................... 357
Statusvariablen.................................................... 351
summary ............................................................... 356
Timer ....................................................................... 345
TRUNCATE ............................................................ 359
Performane Schema
Digest ...................................................................... 359
Normalisierung ................................................... 359
Statistiken ............................................................. 358
Zugriffsstatistiken.............................................. 358
Peripherie-Speicherverwaltung ......................... 152
Perl ....................................................................... 285, 664
Perl's Database Interface � DBI
perl-DBD-MySQL .................................................... 664
Pfad � Umgebungsvariable
Phantom-Read .......................................................... 181
PHP ............................................................................... 655
PHP Data Objects � PDO
PING .................................................................... 261, 748
Pipe ............................................................................... 102
Index
781
Plugin ................................................................... 251, 445
Plugin-API.................................................................... 251
Plugin-Status ............................................................. 252
POINT ......................................................... 392, 393, 742
Point-in-Time Recovery....................................... 290
POLYGON.................................................................... 392
Port............................................................. 239, 240, 322
Portabilität ................................................................. 592
POSITION .................................................................... 718
POSIX-Thread.............................................................. 92
possible_keys ............................................................. 411
POW ............................................................................. 398
PREPARE............................................................. 558, 754
Prepared Statement ............................. 524, 558, 644
Primärindex � Index
PRIMARY KEY............................................................ 417
Privater Schlüssel ..................................................... 517
Privilegientabelle .................................................... 223
priv-Tabelle ............................................................... 497
proc ............................................................................... 537
PROCESS..................................................................... 490
PROCESSLIST .................................................... 263, 748
procs_priv ................................................................. 497
Profildatei................................................................... 227
Profildatei � bashrc
Programmiersprache.............................................. 40
prozedurale ........................................................... 532
Projektion .................................................................... 60
Prozedurkopf ............................................................ 541
Prozess � Daemon
Prozessliste ................................................................ 214
pt .................................................................................... 318
pt-visual-explain ..................................................... 415
Python ........................................................................ 669
Q
QCache_free_blocks............................................... 163
QCache_free_memory.......................................... 163
Qcache_hits ............................................................... 163
QCache_inserts ........................................................ 163
Qcache_lowmem_prunes.................................... 163
Qcache_not_cached ............................................... 163
Qcache_queries_in_cache................................... 163
QCache_total_blocks ............................................. 163
Quellcode.............................................. 45, 91, 212, 229
Quelldistribution .................................................... 214
query_cache_size ............................................ 161, 325
query_cache_type.................................. 160, 161, 162
query_cache_wlock_invalidate ........................ 162
Query-Cache ...................................... 155, 157, 158, 335
QUOTE .......................................................................... 719
R
RANGE ......................................................................... 446
RANGE COLUMNS................................................... 452
RANGE-Partitionierung........................................ 447
Raumbezogene Erweiterung .............................. 392
Raymond, Eric ............................................................ 45
RDBMS........................................................................... 26
READ.............................................................................. 185
READ COMMITTED......................................... 178, 180
READ UNCOMMITTED .................................. 178, 179
read_buffer_size ..................................................... 324
read_rnd_buffer_size............................................ 325
READS SQL DATA ............................................ 542, 554
REBUILD PARTITION ............................................. 461
Rechte ................................................................. 467, 538
Rechtemanagement .............................................. 467
Recovery ....................................................................... 38
Redo.............................................................................. 296
Redundanz............................................................ 28, 36
Referentielle Integrität ......................... 125, 126, 191
REFRESH ..................................................................... 748
REGEXP.............................................................. 400, 719
Regulärer Ausdruck .............................................. 400
Rekursion .................................................................. 608
Rekursionstiefe ....................................................... 609
Rekursiv ...................................................................... 558
Relation ............................................................ 26, 55, 59
Relationale Algebra ................................... 55, 58, 149
Relationale-Algebra-Verwaltung ...................... 149
Relationenverwaltung ............................................ 151
Relationship ................................................................ 68
Relay-Log .................................................................... 364
RELEASE SAVEPOINT ..................................... 177, 723
RELOAD ............................................................. 257, 490
REORGANIZE PARTITION .................................... 459
REPAIR ................................................................. 293, 755
REPAIR PARTITION................................................ 460
REPAIR_TABLE ......................................................... 477
REPEAT ......................................................................... 719
REPEAT UNTIL ......................................... 579, 581, 735
REPEATABLE READ .......................................... 178, 181
REPLACE....................................................................... 719
REPLICATION CLIENT ........................................... 490
REPLICATION SLAVE..................................... 369, 491
Replikation ......................................................... 40, 361
asynchrone ........................................................... 363
Ausfallsicherheit .................................................. 361
Backup .................................................................... 291
Index
782
Replikation (Forts.)
Binär-Logging am Master-Knoten ............. 368
CHANGE MASTER ............................................... 372
Lastverteilung ...................................................... 361
logische ................................................................... 363
Master ..................................................................... 362
Master – Slave mit zwischen-
geschaltetem Slave ...................................... 366
Master-Master-.................................................... 367
Master-Slave- ....................................................... 365
mehrstufige Master-Slave-Replikation..... 366
semisynchrone..................................................... 363
Slave ......................................................................... 362
statementbasierte .............................................. 363
Topologie ...................................................... 362, 365
zeilenweise .................................................. 363, 364
REQUIRE ..................................................................... 492
RESET QUERY CACHE............................................. 762
RESIGNAL.......................................................... 602, 739
Restrukturierung....................................................... 29
RETURN ...................................................................... 730
RETURNS ..................................................................... 552
REVERSE ...................................................................... 719
Reverse Engineering ..................................... 80, 304
Dekompilieren ....................................................... 44
REVOKE ...................................................... 471, 493, 753
RIGHT ............................................................................ 717
RLIKE............................................................................. 719
ROLLBACK ................................................. 175, 558, 723
Rollback ....................................................................... 176
ROLLBACK TO SAVEPOINT .......................... 176, 723
ROUTINE_BODY....................................................... 561
ROUTINE_CATALOG ............................................. 560
ROUTINE_COMMENT............................................ 562
ROUTINE_DEFINITION.......................................... 561
ROUTINE_NAME..................................................... 560
ROUTINE_SCHEMA ............................................... 560
ROUTINE_TYPE ....................................................... 560
ROUTINES ................................................................... 559
ROUTINES-Tabelle................................................... 559
RPAD............................................................................. 718
RPM .............................................................................. 104
RTRIM........................................................................... 718
Ruby ............................................................................. 667
Ruby on Rails............................................................ 667
ruby-mysql................................................................ 667
Rückgabe..................................................................... 541
Rückgabeparameter ............................................... 548
Rückgabewert ........................................................... 552
atomarer ................................................................. 551
Rumpf .................................................................. 541, 553
S
Sakila .............................................................................. 39
SAVEPOINT ................................................................ 723
Savepoint .................................................................... 176
Schema
konzeptionelles ..................................................... 50
Schleife ................................................................ 571, 579
Schlüssel ................................................................. 58, 59
Fremdschlüssel ............................................... 68, 76
künstlicher .............................................................. 58
künstlicher Primärschlüssel ..................... 60, 114
Primärschlüssel .............................................. 59, 69
Schlüsselkandidat ................................................ 59
Superschlüssel ....................................................... 59
zusammengesetzter ............................................ 84
Schnellstart-Tutorial............................................... 211
Schnittstelle ...................................................... 40, 640
Schreibsperre
externe ..................................................................... 241
Schwachstellen ........................................................ 247
Scope ................................................................... 244, 569
SCP ................................................................................ 284
SECURITY_TYPE ........................................................ 561
Segmentverwaltung ............................................... 152
Sekundärindex � Index
SELECT .............................................. 120, 476, 558, 701
Select
ungebundenes ............................................. 551, 622
SELECT INTO ............................................ 558, 567, 736
SELECT INTO OUTFILE.......................................... 760
SELECT VERSION ............................................ 250, 727
select_type.................................................................. 412
Selection Push-Down ............................................. 167
SELECT-Statement
ungebundenes .................................................... 607
Selektion ...................................................................... 60
Semikolon .................................................................. 268
Semisynchrone Replikation ............................... 363
Seq_in_index............................................................ 414
SERIALIZABLE ............................................................ 182
Server .................................................................... 93, 242
Serverhardware ....................................................... 284
Server-ID ..................................................................... 370
Serverport ................................................................... 515
Servervariable
anzeigen................................................................. 262
SESSION.............................................................. 245, 246
Session......................................................................... 244
Sessionkontext ........................................................ 246
Sessionvariable � Sitzungsvariable
Index
783
SET ...................................................... 245, 566, 726, 736
SET AUTOCOMMIT ................................ 176, 558, 723
SET GLOBAL TRANSACTION ISOLATION
LEVEL ....................................................................... 178
SET SESSION TRANSACTION ISOLATION
LEVEL ....................................................................... 178
SET TRANSACTION ISOLATION LEVEL............ 724
Shell
History ................................................................... 230
Kommandozeileninterpreter ......................... 212
SHOW .................................................................. 558, 749
SHOW CHARACTER SET ....................................... 770
SHOW COLLATION ................................................ 770
SHOW CREATE .......................................................... 545
SHOW CREATE EVENT ................................... 631, 733
SHOW CREATE FUNCTION ................................. 730
SHOW CREATE PROCEDURE ...................... 562, 729
SHOW CREATE TRIGGER ...................................... 621
SHOW CREATE VIEW............................................. 480
SHOW DATABASES ............................... 110, 491, 699
SHOW ENGINES ....................................................... 763
SHOW ERRORS ........................................................ 766
SHOW EVENTS ................................................. 629, 733
SHOW FUNCTION STATUS ................ 559, 562, 730
SHOW GRANTS................................................ 495, 754
SHOW MASTER STATUS ............................... 371, 742
SHOW OPEN TABLES.............................................. 727
SHOW PLUGINS ....................................................... 762
SHOW PROCEDURE STATUS ............. 559, 562, 729
SHOW PROFILE......................................................... 761
SHOW SLAVE STATUS............................................ 742
SHOW STATUS ......................................................... 298
SHOW TABLES................................................. 608, 701
SHOW TRIGGERS ............................................. 618, 731
SHOW VARIABLES .......................................... 245, 726
SHOW VIEW .............................................................. 480
SHOW WARNINGS ......................................... 119, 766
SHUTDOWN .............................................................. 491
Sicherheit........................................................... 467, 529
Sicherheits- und Benutzerkonzept ................. 503
Sicherheitsschicht.................................................. 505
Sicherheitsupdate ................................................... 247
Sicherung.................................................................... 537
Sicht ............................................................ 508, 537, 632
aktualisierbare .......................................... 509, 635
eingeschränkte .................................................... 633
updatefähige ........................................................ 635
SIGNAL .............................................................. 600, 738
single-transaction .................................................. 280
Sitzungsvariable ............................................. 244, 245
Skalierung
horizontale ........................................................... 677
vertikale ................................................................. 677
skip_external_locking ........................................... 241
Skript
Absicherung........................................................... 221
Initialisierung ....................................................... 221
Startskript ............................................................. 225
Socket........................................................ 239, 240, 322
Software
Free Software ......................................................... 45
proprietäre .............................................................. 44
quelloffene .............................................................. 44
Solaris ............................................................................ 42
sort_buffer_size .................................... 247, 324, 336
Sort-Cache .................................................................. 336
SOUNDEX ................................................................... 720
SOUNDS LIKE ............................................................ 720
SOURCE .............................................................. 534, 760
Sourceforge ............................................................... 291
SPACE ........................................................................... 720
Spaltenebene ............................................................ 474
Spatial Extension .................................................... 392
SPECIFIC_NAME ..................................................... 560
Speichermedium
externes .................................................................. 284
Speicherort ................................................................ 449
Speicherschema......................................................... 26
Sperre ........................................................................... 184
Sperre � Lock
Sperren
von Zeilen .............................................................. 186
Spion ............................................................................ 230
Sprache........................................................................... 52
Sprechende Namen................................................... 51
Sprechende Variablennamen ............................ 566
SQL .................................................................................. 26
SQL SECURITY.................................................. 483, 543
SQL SECURITY DEFINER........................................ 543
SQL SECURITY INVOKER ...................................... 543
SQL_CACHE ............................................. 160, 761, 762
SQL_DATA_ACCESS ................................................ 561
SQL_MODE ............................................... 562, 619, 621
SQL_NO_CACHE............................................. 160, 762
SQL_PATH ................................................................... 561
SQL-Einschleusung................................................. 520
SQLEXCEPTION ........................................................ 593
SQL-Injection ............................................................ 520
SQL-States ......................................................... 592, 767
SQLWARNING........................................................... 595
SQRT ............................................................................. 398
Index
784
SSH ................................................................................ 516
SSL.................................................................................. 516
ssl-ca .............................................................................. 517
ssl-cert ........................................................................... 517
ssl-key............................................................................ 517
Stallman, Richard ...................................................... 45
Standardfunktionen ............................................. 707
Standardkonfiguration ......................................... 212
Standardwert............................................................ 568
START SLAVE ............................................................. 741
START TRANSACTION.................. 176, 558, 612, 722
Starten
automatisch ......................................................... 225
manuell................................................................... 225
Starts............................................................................ 630
Statement ............................................................ 111, 619
STATUS ............................................. 261, 630, 727, 748
Statusvariablen
accounts ................................................................. 353
View.......................................................................... 353
STOP SLAVE ............................................................... 742
Storage-Engine ......................................... 123, 155, 187
BLACKHOLE .......................................................... 252
Speichermanagement........................................ 40
Stored Functions .............................................. 531, 551
Stored Procedures .................................. 282, 531, 539
STRCMP ........................................................................ 721
String .......................................................................... 400
String-Datentypen ................................................. 697
SUBPARTITION BY KEY() ..................................... 456
Subquery.................................................................... 420
korrelierte .............................................................. 422
SUBSTR ....................................................................... 720
SUBSTRING ............................................................... 720
SUBSTRING_INDEX ............................................... 720
Suche
natürlichsprachliche ................................ 131, 402
Sun Microsystems .................................................... 42
SUPER ................................................ 245, 258, 489, 538
Surrogatschlüssel � Künstlicher Schlüssel
Swapping .................................................................... 325
Syntaxfehler .............................................................. 541
Syntax-Highlighting .............................................. 535
System R...................................................................... 147
System V ..................................................................... 226
Systemanforderungen
minimale .................................................................. 92
Systemdienst .................................................... 221, 225
Systemleiche .............................................................. 511
T
Tabelle ............................................................................ 55
komprimierte ....................................................... 194
partitionierte, erzeugen................................... 445
reparieren .............................................................. 293
sperren ..................................................................... 185
temporäre ............................................................ 607
virtuelle .................................................................. 632
Tabelle optimieren � OPTIMIZE TABLE
Tabellen-Cache ......................................................... 258
Tabellendump ................................................. 278, 279
Tabellenebene .......................................................... 474
Tabellenname............................................................. 56
Tabellenoptimierung ............................................. 257
Table ............................................................................. 619
table_open_cache................................................... 325
tables_priv ................................................................. 497
Tablespace.................................................................. 194
tail.................................................................................. 283
tar .......................................................................... 212, 284
Task
geplanter ............................................................... 622
TCP/IP ............................................................................ 93
TEMPORARY............................................................. 607
Terminal ..................................................................... 107
Terminalfenster........................................................ 215
Ternäre Logik ............................................................. 572
Text-Datentypen ..................................................... 697
Texteditor .................................................................. 534
Textsammlung ........................................................ 401
Thread................................................................. 262, 328
thread_cache_size .................................................. 325
Time zone.................................................................. 630
Timing ......................................................................... 619
TO_BASE64 ................................................................. 721
TO_DAYS(datum).................................................... 449
Transaktion ......................................... 37, 170, 171, 611
Transaktionsanweisung ....................................... 558
Transaktionsbefehl ................................................ 621
Transitive Abhängigkeit......................................... 86
Transparenz ............................................................... 617
Treiber ......................................................................... 641
TRIGGER............................................................. 482, 619
Trigger ................................................ 531, 538, 613, 619
TRIGGER_CATALOG.............................................. 620
TRIGGER_NAME ..................................................... 620
TRIGGER_SCHEMA................................................ 620
TRIM .............................................................................. 721
true................................................................................. 572
TrueWORM ................................................................. 277
Index
785
TRUNCATE................................................................. 703
TRUNCATE TABLE .................................................. 479
Trunkierung .............................................................. 431
Tuning.......................................................................... 312
Tupel ............................................................................... 57
Tupelverwaltung ...................................................... 151
tx_isolation (Variable) .......................................... 178
Type ............................................................................. 630
U
Überladen .................................................................. 570
Ubuntu Linux .......................................................... 100
UCASE............................................................................ 721
Umgebungsvariable ............................. 107, 226, 256
Pfadangaben ........................................................ 225
Pfadeinstellungen .............................................. 228
Umkreissuche .................................................. 392, 395
UML................................................................................. 73
Unbounded Select........................................... 551, 622
Undo ................................................................... 288, 296
Undo-Handler.......................................................... 590
Ungebundenes Select .................................... 551, 622
Ungebundenes SELECT-Statement ................. 607
UNHEX .......................................................................... 721
Unified Modeling Language � UML ................. 73
UNINSTALL PLUGIN ............................................... 763
Union ............................................................................. 63
UNIQUE-Schlüssel.................................................. 446
UNIREG .......................................................................... 41
UNIX_TIMESTAMP(datum)................................ 449
UNLOCK TABLES ............................ 186, 539, 558, 725
Unterpartition ......................................................... 456
UNTIL............................................................................ 581
UPDATE ..................................................... 234, 477, 703
Statement .............................................................. 259
Update.......................................................................... 247
UPGRADE.................................................................... 756
Upgrade .............................................................. 248, 251
UPPER............................................................................ 721
Uptime ......................................................................... 262
Urheberrecht............................................................... 44
USAGE ......................................................................... 490
USE ............................................................................... 699
user (Tabelle) ............................................................ 496
Usermanagement .......................................... 229, 235
V
V8-Engine ................................................................... 672
VALUES ......................................................................... 118
VALUES IN() ................................................................ 451
VALUES LESS THAN................................................ 447
Variable .............................................................. 269, 565
globale .................................................................... 244
Gültigkeitsbereich .............................................. 569
lokale ....................................................................... 244
Verbindung
aktive....................................................................... 244
verschlüsselte ........................................................ 516
Verbindung � Session
Verbindungsüberprüfung.................................. 469
Verbund ................................................................. 63, 64
Vereinigung................................................................. 63
Verifizierung .............................................................. 231
Vermittlungsschicht............................................. 646
Verschachtelte Anfrage � Subquery
Verschlüsseln ............................................................ 515
Verschlüsselungsalgorithmus............................ 518
Versionierung
Versionsnummer .................................................. 43
Vertikale Skalierung............................................... 677
Verwendung von Cursors.................................... 585
Verzahnungen von Operationen ..................... 170
View ............................................................ 508, 537, 632
Virtuelle Tabelle ...................................................... 632
Virtueller Einbenutzerbetrieb ............................ 172
Volltextindex.................................................... 131, 401
Volltextsuche ........................................ 401, 404, 739
Abfrageerweiterung ......................................... 408
boolesche Operatoren ..................................... 404
IN BOOLEAN MODE.......................................... 404
Länge der Wörter............................................... 407
MATCH() AGAINST()......................................... 402
natürlichsprachliche Abfrage ...................... 402
Probleme und Einschränkungen................. 409
Relevanzwert....................................................... 403
Stoppwörter......................................................... 406
Stoppwörter-Liste.............................................. 406
Vorgehensmodell
iteratives ................................................................... 53
W
wait_timeout ............................................................ 245
Waiting for next activation ................................. 631
Waiting for scheduler to stop ............................. 631
Waiting on empty queue ...................................... 631
Warm Copy ................................................................. 277
Warnung .................................................................... 590
Wartungsarbeiten.................................................... 531
Web 2.0 ........................................................................... 33
Index
786
Web-Programmierung .......................................... 655
WEIGHT_STRING..................................................... 722
Well-Known Binary � WKB
Well-Known Text � WKT
WHILE.......................................................... 579, 582, 735
Widenius, Michael .................................................... 41
Wiederherstellung .................................................. 273
Wiederherstellungsmethode ............................. 281
Wiederkehrende Aufgaben ................................ 530
Wiederverwendung
von Code................................................................. 529
Wildcard ...................................................................... 120
Wildcard-Character................................................. 431
Winkelfunktionen.................................................. 706
WITH............................................................................ 492
WITH GRANT OPTION ........................................... 471
--with-partition ........................................................ 445
WKB............................................................................... 393
WKT............................................................................... 393
Workflow ..................................................................... 511
WRITE ........................................................................... 185
Wurzelknoten ........................................................... 383
X
X509 .............................................................................. 519
XA-Transaktionen ................................................... 183
XML ................................................................................. 27
XOR ............................................................................... 573
XOR-Verknüpfung ................................................. 706
Xtrabackup................................................................. 758
xtrabackup ................................................................. 287
Y
YEAR(datum)............................................................. 449
Z
Zahlensysteme ......................................................... 707
Zeichenkette ............................................................ 400
Zeiger .................................................................. 584, 585
Zeile sperren ............................................................. 186
Zeilenebene ...................................................... 474, 507
Zeit ................................................................................ 697
aktuelle .................................................................... 712
Zeitangabe
erzeugen.................................................................. 711
Formatierung........................................................ 714
umwandeln............................................................ 711
Zeitarithmetik .......................................................... 710
Zeiteinheiten ........................................................... 708
Zeitformate............................................................... 709
Zeitstempel........................................................ 537, 625
Zertifikat ...................................................................... 517
Zugriff
gekapselter........................................................... 504
Zugriffsberechtigungssystem........................... 469
Zugriffsphase ........................................................... 469
Zusammengesetztes Partitionieren................ 456
Zustand
konsistenter .......................................................... 287
Zuweisung.................................................................. 566
Zuweisungszeichen................................................ 242
Zwischentabelle .......................................................... 77