mysql – das umfassende handbuch - cloud object storage · mysql-version 5.7 zu aktualis ieren,...
TRANSCRIPT
LeseprobeIn dieser Leseprobe geben Ihnen die Autoren vorab eine generelle Einführung in Datenbanken. Im Anschluss erfahren Sie, wie Sie die Anforderungen an Ihre Datenbankanwendung identifizieren und in ein Datenbankmodell überführen. Zum Abschluss steigen Sie in die Administration von MySQL ein.
Stefan Pröll, Eva Zangerle, Wolfgang Gassler
MySQL – Das umfassende Handbuch808 Seiten, gebunden, mit DVD, 3. Auflage 2015 49,90 Euro, ISBN 978-3-8362-3753-6
www.rheinwerk-verlag.de/3843
»Vorwort« »Datenbanken – Eine allgemeine Einleitung« »Datenbankmodellierung« »MySQL administrieren«
Inhalt
Index
Die Autoren
Leseprobe weiterempfehlen
Wissen, wie’s geht.
17
1Vorwort
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 Admi-
nistrationshandbuch 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 bzw. in den Materialien zum Buch
(siehe den Stichpunkt »Die DVD bzw. die Materialien zum Buch« im weiteren Verlauf
3753.book Seite 17 Donnerstag, 30. April 2015 1:08 13
Vorwort
18
des Vorworts) finden Sie die notwendigen Daten, um jederzeit neu anfangen zu kön-
nen, falls Sie sich mal einen gröberen Schnitzer leisten.
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, also noch fortgesetzt wird. Diese Pfeile dürfen Sie nicht
selbst eingeben. Der MySQL-Client schreibt diese Pfeile selbständig nach einem Zei-
lenumbruch. 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.7 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.
3753.book Seite 18 Donnerstag, 30. April 2015 1:08 13
Vorwort
19
Besondere Formatierungsübereinkünfte gelten auch für die Referenz am Ende dieses
Buches, in der wir alle besprochenen Befehle und Kommandos auflisten.
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. Hier lernen
Sie (ab Abschnitt 2.1, »Einführung in den Datenbankentwurf«), wie Sie die Anforde-
rungen an ein Datenbanksystem herausarbeiten und umsetzen. Auf der DVD bzw. in
den Materialien zum Buch finden Sie einen sehr umfangreichen 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.
3753.book Seite 19 Donnerstag, 30. April 2015 1:08 13
Vorwort
20
Die DVD bzw. die Materialien zum Buch
Die beiliegende DVD enthält nicht nur alle Versionen der aktuellen, stabilen Version
5.7 von MySQL für Windows, Mac und Linux, sondern auch im Buch vorgestellte
Skripte und Tools, die Sie sofort einsetzen können. Sollten Sie die E-Book-Ausgabe
lesen – oder Ihr PC oder Ihr Notebook hat, wie im Jahre 2015 beinahe üblich, kein
DVD-Laufwerk mehr eingebaut – dann können Sie die Zusatzmaterialien auch direkt
von der Website des Rheinwerk Verlags herunterladen.
Link zum Zusatzmaterial
Den Inhalt der DVD können Sie über den folgenden Link herunterladen (ganz unten
auf der Website zum Buch unter »Materialien zum Buch � Materialübersicht«):
https://www.rheinwerk-verlag.de/3843/
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 auszu-
probieren. Die darin enthaltenen Flug-, Passagier- und Buchungsdaten sind möglichst
realistisch gehalten. Sie finden zwei Versionen der Daten des Flughafenszenarios 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 eini-
gen Millionen Datensätzen besonders zum Testen von Optimierungen und Tuning-
Maßnahmen. Wie Sie diese Daten importieren, erfahren Sie in Abschnitt 4.2, »Die Bei-
spieldatenbank 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 dritten Auflage
Im Dezember 2014 ereilte uns drei Autoren die freudige Kunde, dass die Bestände
unserer zweiten Auflage beinahe ausverkauft waren. Einige Tage später war es dann
so weit: Die zweite Auflage war nicht mehr lieferbar, die Nachfrage hatte das Angebot
übertroffen. Obwohl wir schon längst geplant hatten, unser Buch auf die aktuellere
MySQL-Version 5.7 zu aktualisieren, war diese Nachricht für uns das Startsignal, doch
etwas konkreter über eine Aktualisierung nachzudenken.
3753.book Seite 20 Donnerstag, 30. April 2015 1:08 13
Vorwort
21
In dieser dritten Auflage des MySQL-Handbuchs behandeln wir die aktuellste Version
von MySQL. Zum Zeitpunkt des Schreibens dieser Auflage war MySQL 5.7 noch nicht als
Produktivversion veröffentlicht. Wie bereits in der vorherigen Auflage stützen wir uns
daher auf die aktuelle Entwicklerversion MySQL 5.7.6. An dieser Version mag noch das
ein oder andere angepasst und gefeilt werden. Für uns als Endbenutzer zählen jedoch
die neuen Features und die wichtigsten Änderungen. Diese sind bereits in der Entwick-
lerversion verfügbar, so dass wir Ihnen die neuesten Entwicklungen zeigen können.
Der Versionssprung von MySQL 5.6 auf MySQL 5.7 ist diesmal nicht so fundamental
wie von MySQL 5.5. auf MySQL 5.6. Trotzdem gibt es einige Neuerungen, insbesondere
im Hinblick auf Sicherheit, Performance und Skalierbarkeit, die wir Ihnen im Detail
erläutern möchten. Selbstverständlich haben wir auch alle Programmierschnittstellen
und Beispiele aktualisiert und den einen oder anderen Fehler ausgemerzt.
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 im Bereich der Linux-Serveradministration und als Developer
bei privaten Unternehmen arbeitete. Seit 2011 ist er wissenschaftlicher Mitarbeiter
und Doktorand bei einem auf IT-Sicherheit spezialisierten Forschungszentrum. Dort
beschäftigt er sich mit aktuellen Fragen in den Bereichen Digital Preservation, Scien-
tific Data und e-Science. Zusätzlich zu seiner Forschungstätigkeit ist er Vortragender
für das Fach Digital Preservation an der Technischen Universität Wien. In seiner Frei-
zeit treibt er gelegentlich Sport, hört leidenschaftlich gerne Soul-, Funk- und Jazzmu-
sik, 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
Entwicklung von neuen Methoden zur Personalisierung – sogenannten Recommen-
der-Systemen – und der damit verbundenen intelligenten Datenspeicherung. Die
von ihr entwickelten Techniken und Verfahren wurden bereits auf zahlreichen
internationalen Konferenzen veröffentlicht.
3753.book Seite 21 Donnerstag, 30. April 2015 1:08 13
Vorwort
22
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
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.
3753.book Seite 22 Donnerstag, 30. April 2015 1:08 13
25
1Kapitel 1
Datenbanken – eine allgemeine Einleitung
Datenbanken sind die unsichtbaren Helden der elektronischen Daten-
verarbeitung, der Datenverwaltung und des Internets. Sie speichern
und verarbeiten Informationen und stellen diese zuverlässig wieder
zur Verfügung.
Datenbanken spielen eine herausragende Rolle in der modernen IT-Landschaft. Kaum
eine Anwendung kommt ohne sie aus. Sie sind der unsichtbare Motor des modernen
Internets, wie wir es heute kennen. Das folgende Kapitel stellt die Entwicklung von
Datenbanksystemen im Allgemeinen vor, zeigt aktuelle Anwendungs- und Einsatzge-
biete auf und beschreibt, welche Leistungen ein Datenbanksystem ausmachen – und
warum Datenbankmanagementsysteme unverzichtbar für uns geworden sind.
Im zweiten Teil dieses Kapitels dreht sich alles um MySQL, das erfolgreichste Open-
Source-Datenbanksystem der Welt, und dessen Entstehungsgeschichte und Eigen-
schaften.
1.1 Grundlagen von Datenbanken
Menschen lieben Daten. Überall dort, wo Menschen arbeiten, fallen Daten an. Daten,
die gespeichert, verarbeitet und wieder abgerufen werden müssen. Aus diesem
Grund sind Datenbanken aus der modernen Welt nicht mehr wegzudenken. Der fol-
gende Abschnitt bietet einen kurzen Überblick über die geschichtliche Entwicklung
von Datenbanken.
1.1.1 Die Geschichte von Datenbanken
Seit der Erfindung der Schrift zeichnet die Menschheit Daten auf, um diese auch spä-
teren Generationen verfügbar zu machen. Nur durch die Errungenschaft, einmal
gewonnene Erkenntnisse auch für die Nachwelt zu erhalten, war der technische Fort-
schritt in dieser Geschwindigkeit möglich. Doch was hat das mit Datenbanken zu tun?
Während mangels geeigneter Datenerfassungsgeräte früher auf handgeschriebene
Listen und Tabellen zurückgegriffen werden musste, nahm im Zuge der Industriali-
3753.book Seite 25 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
26
sierung die Verbreitung von halb- und vollautomatischen Geräten zur Speicherung
von Daten stark zu und trieb somit die Entwicklung der Vorgänger moderner Daten-
banksysteme mit an.
Bald waren die Datenmengen händisch nicht mehr zu erfassen und machten auto-
matisierte Verfahren notwendig, um der Datenmenge Herr zu werden. Als Vorläufer
von Datenbanken kann die Lochkartentechnologie gesehen werden. Diese Maschi-
nen ermöglichten das maschinelle Verarbeiten vieler gleichartiger Daten. Erst durch
diese mechanische Errungenschaft waren datentechnische Großereignisse wie
Volkszählungen biblischen Ausmaßes überhaupt zu bewältigen.
Durch diese Erfindung weiteten sich die Anwendungsgebiete der mechanischen
Datenverarbeitung immer weiter aus, da immer mehr Daten archiviert und verarbei-
tet werden konnten. Da kam die Entwicklung der digitalen Informationsverarbei-
tung gerade recht, denn sie erlaubte es, Daten noch schneller zu verarbeiten, als die
mechanischen Vorgänger Löcher zu stanzen vermochten. Dennoch war es noch ein
weiter Weg, bis Datenbanken auch als solche bezeichnet werden konnten. Bis dahin
war die Struktur der zu speichernden Informationen gewissermaßen durch die Hard-
ware vorgegeben. Ein Lochkartenlesegerät konnte nur genau jene Lochkarten lesen,
für die es auch gebaut worden war. Die Lochkarten selbst waren meist für genau
einen Zweck – zum Beispiel für eine Volkszählung – entworfen worden und für eine
andere Aufgabe, zum Beispiel die Verwaltung einer Bibliothek, völlig ungeeignet.
Erst mit der Entwicklung digitaler Rechner konnten sich auch Datenbanken als sol-
che weiterentwickeln. Das Speichern einmal digitalisierter Daten bot ganz neue Mög-
lichkeiten, mit Daten umzugehen und diese weiterzuverarbeiten. Es gab und gibt
unzählige Einsatzbereiche für Rechner, und immer noch kommen neue hinzu. Mit
der voranschreitenden Entwicklung der Computer, von hausgroßen Rechneranlagen
bis zum Personal Computer, entwickelten sich auch Datenbanken immer weiter. Je
größer der verfügbare Speicherplatz wurde, desto größer wurden die Datenbanken,
die die anwachsende Datenfülle speicherten.
Doch was ist eine Datenbank eigentlich? Unter einer Datenbank versteht man eine
Sammlung von zusammengehörenden Daten, die für eine bestimmte Aufgabe ge-
speichert und wieder abgerufen werden sollen. Heutzutage sind damit meist Daten in
elektronischer Form gemeint. Um diese Daten elektronisch abspeichern, verarbeiten
und wieder ausgeben zu können, wird eine Verwaltungssoftware benötigt, die eben-
diese Aufgaben auf Geheiß des Anwenders übernimmt. Diese Art von Software wird
als Datenbankmanagementsystem bezeichnet. Im allgemeinen Sprachgebrauch wer-
den die Begriffe »Datenbank« und »Datenbankmanagementsystem« zwar oft syno-
nym verwendet, sie bezeichnen aber tatsächlich unterschiedliche Dinge.
Die Datenbank an sich ist lediglich die Sammlung der Datensätze, samt zusätzlichen
Informationen über die Daten. Diese Informationen über die Daten sind selbst wie-
derum ebenfalls Daten. Daten, die selbst wiederum Daten beschreiben, also Daten
3753.book Seite 26 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
27
1über Daten, werden auch als Metadaten bezeichnet. Dabei handelt es sich zum Bei-
spiel um Informationen wie den Datentyp, die Gültigkeitsdauer des Datensatzes und
dergleichen.
Die Datenbank selbst stellt keine Möglichkeiten zur komfortablen Bearbeitung und
Verwaltung der Datensätze bereit. Diesen Part übernimmt – neben vielen anderen
Aufgaben – ein Datenbankmanagementsystem wie MySQL. Dieses Datenbank-
managementsystem ist die einheitliche und einzige Schnittstelle zwischen der
Datenbank selbst und dem Anwender, der mit der Datenbank interagieren möchte.
Ein Datenbankmanagementsystem kann zudem aus mehreren Datenbanken beste-
hen bzw. diese enthalten.
1.1.2 Moderne Datenbanken und Datenmodelle
Die Anfänge elektronischer Rechenmaschinen waren wie so viele technologische
Entwicklungen militärischen Ursprungs. Als die Rechner jedoch immer kleiner und
günstiger wurden, begann sich auch die private Industrie immer mehr für Computer
zu interessieren, da nicht nur die Rechner selbst, sondern auch der notwendige Spei-
cher immer leistungsfähiger wurde. Durch die neuen Impulse der Zusammenarbeit
militärischer wie privater Institutionen wurden Modelle entwickelt, um die Daten-
speicherung für allgemeine Zwecke zu ermöglichen.
Ein Modell beschreibt, wie die Daten innerhalb der Datenbank organisiert werden. So
entstand Mitte der 1960er Jahre das hierarchische Datenbankmodell, mit dessen Hilfe
Datensätze in einer baumartigen Struktur angeordnet werden konnten. Eine Struk-
tur gibt die Form vor, wie Daten gespeichert werden. Sie können sich die Struktur
eines Datenbankmodells wie eine Schablone vorstellen, in die später die Daten einge-
passt werden. Um mit einem solchen System arbeiten zu können, mussten Anwen-
der sehr genau über Interna des Datenbanksystems Bescheid wissen.
Kurz darauf entstand das Netzwerkdatenbankmodell, das bereits zwischen der Daten-
beschreibungssprache und der Datenmanipulationssprache unterschied. Somit gab es
je eigene Befehle für das Abfragen, Einfügen und Ändern der Daten und andere Befehle
für das Verwalten der Datenstrukturen im System. Das Netzwerkdatenbankmodell lie-
ferte daher die theoretische Grundlage für moderne Datenbankmanagementsysteme.
Der nächste Entwicklungsschritt war das relationale Datenbankmodell, das um 1970
von Edgar Codd erfunden wurde und bis heute das wichtigste Datenbankmodell dar-
stellt, das sich derzeit im Einsatz befindet. Dieses Modell stellt Daten in Tabellen dar
und setzt diese zueinander in Beziehung. Diese Beziehungen zwischen den Tabellen
werden auch als Relationen bezeichnet. Durch die Art und Weise, wie diese Daten
zueinander in Beziehung stehen, lassen sich Sachverhalte der realen Welt innerhalb
einer Datenbank abbilden. Details über Relationen finden Sie in Kapitel 2, »Daten-
bankmodellierung«.
3753.book Seite 27 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
28
Datenbanken, die das relationale Datenbankmodell einsetzen, werden konsequen-
terweise als relationale Datenbankmanagementsysteme (RDBMS) bezeichnet. MySQL
setzt ebenfalls das relationale Datenbankmodell ein und ist daher auch ein RDBMS.
Über welche Eigenschaften das relationale Datenbankmodell verfügt und warum
dieses Modell so erfolgreich ist, werden wir in den folgenden Abschnitten noch aus-
führlich behandeln.
Durch das relationale Datenbankmodell gelang die Trennung der Struktur der Daten-
sätze – der Abbildung eines Konzepts der realen Welt – von der Art und Weise, wie die
Daten tatsächlich physisch auf dem Speichermedium abgelegt werden. Dieser Schritt
war ein Meilenstein in der Entwicklung moderner Datenbanksysteme, denn von nun
an mussten die Anwender nicht mehr genau über die konkrete Speichertechnik
Bescheid wissen, sondern nur mehr über die Struktur und das Konzept der Daten, die
sie abfragen und speichern wollten. Daher hat die Idee des relationalen Datenbank-
modells viel zur Vereinfachung der Arbeit mit Datenbanken beigetragen.
Im Bereich der Datenbanken drängt sich der Vergleich mit einer Bibliothek auf, in der
Bücher (Daten) systematisch (Modell) abgelegt sind. Jedes Buch ist mit einem eige-
nen Datensatz im Katalog der Bibliothek vermerkt. Darin finden sich Eigenschaften
wie ISBN, Titel und Autoren zu jedem Werk. Die Ablage der Bücher erfolgt nach einem
ganz bestimmten System, damit sie auch wieder aufgefunden werden können. Wenn
Sie sich ein Buch ausleihen möchten, müssen Sie nicht zwingend wissen, wie der Bib-
liothekskatalog organisiert ist. Diese Aufgabe übernimmt der Bibliothekar, der genau
weiß, in welchem Regal er ein bestimmtes Werk findet. In diesem Beispiel über-
nimmt der Bibliothekar die Aufgaben des relationalen Datenbankmanagement-
systems. In der Ausleihe können Sie den Bibliothekar nach einem bestimmten Werk
fragen, das er dann für Sie in den Regalen der Bibliothek suchen wird. Je genauer Sie
Ihre Suchanfrage formulieren, umso schneller wird der Bibliothekar das gesuchte
Werk finden; wichtig ist lediglich, dass Sie und der Bibliotheksangestellte dieselbe
Sprache sprechen. Sie müssen sich verständigen können, um Ihr Ziel zu erreichen.
Die Sprache, die für die Interaktion mit relationalen Datenbanken eingesetzt wird,
heißt Structured Query Language (SQL). Sie ist ein allgemeines Werkzeug, mit dem
Befehle formuliert werden, die auch für Personen ohne technischen Hintergrund
relativ leicht erlern- und anwendbar sind. Die Structured Query Language ist eine
sehr mächtige Sprache, mit deren Hilfe das Speicherschema der Daten definiert,
Daten in der Datenbank gespeichert und wieder abgerufen werden können. SQL
ermöglicht jedoch nicht nur die Beschreibung des Datenschemas, sondern wird auch
dazu verwendet, Datensätze einzufügen, zu ändern und zu löschen. Die Sprache SQL
ermöglicht zudem sehr komplexe Abfragen, indem die Beziehungen der gespeicher-
ten Daten ausgenutzt werden können. Die Sprache selbst ist ein universelles Werk-
zeug, das für sämtliche Interaktionen mit dem Datenbankmanagementsystem
eingesetzt wird. Viele Datenbanksysteme »sprechen« daher SQL. Was Sie mit SQL in
3753.book Seite 28 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
29
1Kombination mit MySQL alles umsetzen können, erfahren Sie unter anderem in
Kapitel 3, »Schnellstart-Tutorial«.
Nach und nach wurden weitere Datenbankmodelle entwickelt, um verschiedenen
Anforderungen Rechnung zu tragen. So ist zum Beispiel das objektorientierte Daten-
bankmodell die Reaktion auf neue Errungenschaften in der modernen Softwareent-
wicklung, in der das objektorientierte Programmierparadigma Einzug gehalten
hatte. Objektorientierte Datenbanken übernehmen Konzepte wie Objekte, Klassen,
Vererbung und Kapselung und ermöglichen die direkte Zusammenarbeit mit objekt-
orientierten Programmiersprachen, da die von Programmen erzeugten Objekte
direkt in der Datenbank abgelegt werden können. Diese Art von Datenbankmanage-
mentsystemen konnte sich jedoch nie wirklich durchsetzen und hat nur in Nischen
Anwendung gefunden.
Zwischen dem relationalen Datenbankmodell und dem objektorientierten Daten-
bankmodell gibt es noch eine Hybridform – das objektrelationale Datenbankmodell.
Dabei handelt es sich um relationale Datenbanksysteme, die um bestimmte Fähig-
keiten erweitert wurden, die dem objektorientierten Paradigma entlehnt sind. Zu
den Vorteilen dieses Modells zählen vor allem die Möglichkeiten, benutzerdefinierte
Datentypen anzulegen und Eigenschaften von Datensätzen weiterzuvererben.
Dadurch ist das Datenmodell selbst sehr flexibel, und bestehende Datenstrukturen
können wiederverwendet werden. Die Daten selbst sind jedoch weiterhin in relatio-
nalen Tabellen und nicht als eigene Objekte in der Datenbank gespeichert. Dieses
Modell hat sich jedoch kaum etabliert. Es gibt noch eine Vielzahl weiterer Datenbank-
modelle, die für aktuelle Systeme im Einsatz sind. Dazu zählen zum Beispiel XML-
Datenbanken, die Daten als XML-Dokumente abspeichern.
In den letzten Jahren ist ein regelrechter Hype um ein weiteres Datenbankmodell
bzw. eine Familie von Datenbanktypen entstanden: NoSQL-Datenbanken. Dabei
handelt es sich um verschiedene Ansätze für hochskalierbare Datenbanklösungen,
die nicht nur SQL als Abfragesprache einsetzen. NoSQL-Datenbanken unterscheiden
sich vom klassischen relationalen Datenbankmodell und setzen teils völlig unter-
schiedliche Abfragesprachen ein. Mit der neuesten Version von MySQL – der Version
5.7, wie wir sie in diesem Buch vorstellen – kann jedoch eine Brücke zwischen den
scheinbar verschiedenen Welten geschlagen werden. MySQL bietet ganz aktuell eine
neue Schnittstelle, die beide Modelle verbindet. Dazu erfahren Sie später mehr in
Kapitel 13, »NoSQL mit MySQL«.
Es gibt weitere Differenzierungen, die nicht nach dem eingesetzten Modell, sondern
nach dem Einsatzzweck der Datenbanken unterscheiden. Dazu zählen beispielsweise
deduktive Datenbanken, die durch das Ableiten von Regeln neues Wissen aus vorhan-
denen Daten generieren können, mobile Datenbanken, die speziell für tragbare End-
geräte geeignet sind, und verteilte Datenbanken. All diese Entwicklungen sind an
spezielle Einsatzszenarien angepasst und verfügen ebenfalls über eigene Modelle.
3753.book Seite 29 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
30
1.1.3 Vorteile
Doch wozu benötigt man überhaupt Datenbanken? Könnten Daten nicht einfach in
Dateien oder Tabellen abgespeichert werden? Schließlich ist ein Datenbankmanage-
mentsystem doch auch nur eine Schnittstelle zu Dateien, denn die Datenbank selbst
ist auch auf der Festplatte – wie alles dort – in Dateien gespeichert. Der Gedanke
klingt zunächst vielleicht plausibel. Angenommen, Sie sind in einem Verein für die
Mitgliederverwaltung zuständig. Für jedes Mitglied erfassen Sie den Namen und die
Adresse, das Geburtsdatum und weitere persönliche Details. Das ist auch bei vielen
Mitgliedern kein Problem, denn schließlich müssen die Daten auf jeden Fall mindes-
tens einmal erfasst werden. Die Daten von neuen Vereinskollegen fügen Sie einfach
am Ende der Datei hinzu, die Angaben zu ausgetretenen Mitgliedern löschen Sie, und
Änderungen bearbeiten Sie sowieso direkt in der Datei.
Stellen Sie sich nun vor, dass in der Vereinssitzung beschlossen wird, zukünftig beim
monatlichen Vereinstreffen jenen Mitgliedern ein Ständchen zu singen, die im laufen-
den Monat Geburtstag gefeiert haben. Dazu bittet Sie der Vorstand um eine Liste. Als
vereinsinterner Datenadministrator suchen Sie nun monatlich in Ihrer Datei all jene
Kollegen, deren Geburtsmonat in den vorgegebenen Zeitraum passt, und kopieren
jene Zeilen der Datei in eine neue Datei. Das Schöne an dieser Methode ist, dass Sie jede
dieser monatlichen Dateien im nächsten Jahr wiederverwenden können, wenn Sie die
Liste immer aktuell gehalten haben. Ihre Methode ist effektiv, aber nicht effizient, da
dadurch Daten doppelt – man sagt auch redundant – abgelegt werden, nämlich einmal
in der ursprünglichen Gesamtliste und ein weiteres Mal in den monatlichen Änderun-
gen. Obwohl Festplattenspeicher gegenwärtig sehr günstig zu haben ist, ist das dop-
pelte Ablegen von Daten jeglicher Art ein großes Problem, da es zu Inkonsistenzen
führen kann. Wann immer sich ein Datensatz in einer Datei ändert, müssen diese
Änderungen in alle anderen Kopien nachgezogen werden, wodurch der Aufwand wei-
ter vergrößert wird. Zusätzlich ist diese Methode äußerst fehleranfällig, da nun meh-
rere Dateien in der exakt gleichen Art und Weise aktualisiert werden müssen.
Dasselbe Problem tritt immer dann auf, wenn nicht nur eine Liste von allen Mitglie-
dern in der gegebenen Reihenfolge benötigt wird, sondern eine aufbereitete Darstel-
lungsform der vorhandenen Daten. Selbst bei sehr einfachen Aufgaben ist der
Einsatz einer einfachen Datei völlig ungeeignet. Jede neue Sichtweise auf die Daten
macht eine komplette Restrukturierung der vorhandenen Daten notwendig. Da
stößt jeder noch so fleißige Verein bald an seine Grenzen.
Wenn Sie nun einwerfen, dass gängige Tabellenverarbeitungsprogramme genau für
solche Aufgaben geeignet sind, haben Sie teilweise recht. Doch bei komplexeren Aufga-
ben, wie der Filterung nach speziellen Eigenschaften der Datensätze, Kombinationen
aus unterschiedlichen Datenquellen und der Automatisierung von Routineaufgaben,
übersteigt der Aufwand, den die Wartung solcher Tabellen benötigt, bald deren Nut-
zen. Die meisten Tabellenverarbeitungsprogramme sind nicht oder nur sehr einge-
3753.book Seite 30 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
31
1schränkt mehrbenutzerfähig, weswegen Sie sich die Arbeit nur schwer mit Kollegen
aufteilen können, ohne sich gegenseitig bei der Arbeit einzuschränken oder zu stören.
Datenbanken dienen nicht nur zur Speicherung und Verarbeitung einfacher Listen
und Tabellen. Es gibt eine Vielzahl weitaus komplexerer Anwendungsfälle, in denen
solche einfachen Mechanismen nicht mehr ausreichen.
Auch im Internet spielen Datenbanken eine herausragende Rolle. Durch die weite
Verbreitung dieses relativ jungen Mediums wurde die Datenbanktechnik letztend-
lich unersetzlich. Inzwischen kann mit Fug und Recht behauptet werden, dass Daten-
banken das Rückgrat des World Wide Webs sind. Nicht nur, dass Datenbanken zur
Namensauflösung im Domain Name System (DNS) eingesetzt werden, die für jede
Browseranfrage benötigt wird, sondern sie sind auch im Hintergrund von dynami-
schen Webseiten im Einsatz. Ohne diese Technologie gäbe es keine personalisierten
Webseiten, keine Onlineshops, keine Foren und Blogs und auch keine sozialen Netz-
werke. Spätestens durch diese Entwicklung wird die Bedeutung moderner Daten-
bankmanagementsysteme offensichtlich.
Ganze Industrien und Wirtschaftszweige verlassen sich auf Datenbanken, die An-
wendern auf Anfrage Informationen zur Verfügung stellen. Dazu zählen zum Bei-
spiel sämtliche Onlineshops sowie praktisch alle Online-Reservierungssysteme, wie
sie von Fluglinien und Reisebüros verwendet werden, als auch alle Webdienste, die
ihren Usern dynamisch generierte Inhalte zur Verfügung stellen. Diese Inhalte sind
in einer Datenbank gespeichert und werden je nach den Bedürfnissen der Anwender
abgefragt und aufbereitet. Die Registrierung auf einer Webseite hat oftmals den
Zweck, dass das System Benutzer eindeutig erkennen und ihnen somit personali-
sierte Inhalte zur Verfügung stellen kann. Wenn Sie sich nun für Ihre Lieblingsseite
registrieren, kann das System Ihnen genau jene Themen auf die Startseite des Web-
portals liefern, für die Sie sich brennend interessieren. Basierend auf statistischen
Daten, die auch von anderen Usern gesammelt wurden, erfahren Sie beispielsweise
auch von Themen, für die sich Personen mit einem ähnlichen Profil ebenfalls inte-
ressiert haben. Die Daten dazu sind in Datenbanken gespeichert und jederzeit in
beliebiger Kombination abrufbar. Genau das ist die Stärke von Datenbanksystemen.
Die digitale Datenverarbeitung durchdringt unser alltägliches Leben mehr, als uns
bewusst ist, und Datenbanken stellen die Schlüsseltechnologie für all diese Errun-
genschaften und auch für die Schattenseiten der digitalen Datenspeicherung zur
Verfügung. Der Grund für den Erfolg von Datenbanken ist schnell erklärt: Datenban-
ken verarbeiten Daten unglaublich schnell.
Überblick über die Vorteile
� Datenbanken speichern Daten zuverlässig, schnell und systematisch und stellen
diese in sehr hoher Geschwindigkeit wieder zur Verfügung, sofern das zugrunde-
liegende Datenmodell hinreichend optimiert ist.
3753.book Seite 31 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
32
� Der Zugriff auf verschiedenste Daten in relationalen Datenbanksystemen erfolgt
anhand einheitlicher Standards. Die Abfragesprache SQL ermöglicht komplexe
Abfragen von unterschiedlichsten Datenbeständen und hängt nicht von der
Beschaffenheit der zu speichernden Daten an sich ab.
� Zusätzlich erhöhen Datenbanksysteme die Flexibilität und die Möglichkeiten der
Datenbearbeitung enorm. So können Datenbestände für die unterschiedlichsten
Fragestellungen herangezogen werden, da sich die Daten nach Belieben kombinie-
ren und weiterverarbeiten lassen.
� Aufgrund spezieller Datenstrukturen – den Indizes – erfolgt der Zugriff auf Daten
im Normalfall außerordentlich schnell. Es gibt spezielle Suchalgorithmen für die
unterschiedlichsten Aufgaben, und Datenbankmanagementsysteme lassen sich
sehr vielseitig auf benötigte Anforderungen hin optimieren. Selbst Millionen von
Einträgen können so in Sekundenbruchteilen durchsucht werden.
� Datenbanksysteme sind eine Möglichkeit zur Abstraktion. Der Anwender muss
nicht über konkrete Interna Bescheid wissen, sondern er kann sich ganz auf die
Logik der zu speichernden Daten konzentrieren. Der Datenbankadministrator legt
das Design des Datenbankenschemas fest. Dadurch bestimmt er, wie die Tabellen-
strukturen aussehen und die Beziehungen der Tabellen untereinander gestaltet
sein müssen.
� Auch Programme können transparent auf Datenbanken zugreifen. Datenbanken
bieten einheitliche Schnittstellen, mit deren Hilfe mit verschiedensten Program-
miersprachen auf reichhaltige Datenschätze zugegriffen werden kann.
1.1.4 Nachteile von Datenbanksystemen
Wie alle Dinge des täglichen Lebens haben auch Datenbankensysteme gewisse Nach-
teile, die wir der Vollständigkeit halber auch erwähnen müssen. Datenbankensys-
teme sind komplexe Applikationen, die nicht ohne Einarbeitungszeit, Schulung und
auch Aufwand implementiert werden können. Daher erzeugen Datenbanken immer
einen gewissen Overhead, der berücksichtigt werden muss. Nicht für alle Anwendun-
gen ist ein Datenbankenmanagementsystem zwingend erforderlich, in manchen Fäl-
len sind einfachere oder pragmatischere Ansätze vielleicht sogar sinnvoller.
1.1.5 Einsatzgebiete
Im folgenden Abschnitt stellen wir typische Einsatzgebiete von MySQL vor. Prinzipi-
ell lässt sich sagen, dass es heute kaum mehr Bereiche gibt, in denen keine Datenban-
ken eingesetzt werden. Die Einsatzszenarien von Datenbankmanagementsystemen
sind vielfältig, und Sie können MySQL in den unterschiedlichsten Szenarien erfolg-
reich verwenden.
3753.book Seite 32 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
33
1Online Transaction Processing
Datenbanken dienen nicht nur der einfachen Speicherung von statischen Daten, son-
dern spielen ihre Stärken insbesondere bei sich häufig ändernden Daten aus, die
nahezu in Echtzeit bereitgestellt werden müssen. Ein klassisches Beispiel dafür ist das
weltumspannende Bankennetzwerk. Wann immer Sie Ihre Bankkarte einsetzen, um
Geld abzuheben, damit im Internet einzukaufen oder elektronisch im Geschäft zu
bezahlen, überprüft ein Datenbanksystem die Gültigkeit der Karte, die Kontostände
und den Abhebungsrahmen und führt gegebenenfalls sofort die Abbuchung durch.
Für einen Buchungsvorgang sind mehrere Schritte notwendig: Zunächst muss ge-
prüft werden, ob Sie berechtigt sind, mit dieser Karte Geld abzubuchen, und ob die
eingegebene PIN korrekt ist. Danach wird Ihr Kontostand um den Einkaufsbetrag ver-
ringert, und das Konto des Verkäufers wird um denselben Betrag erhöht. Diese
Schritte werden zusammengefasst und als Transaktion bezeichnet. Nur wenn alle
Zwischenschritte erfolgreich durchgeführt wurden, gilt die Transaktion als erfolg-
reich. Die Überprüfung dieser Schritte erfolgt online – also prompt –, weswegen diese
Art des Datenbankeinsatzes als Online Transaction Processing (OLTP) bezeichnet wird.
Bei dieser Art von Transaktion kommt es neben der möglichst hohen Geschwindig-
keit vor allem auf die Korrektheit und die Sicherheit der Daten an, damit Ihr Geld
weder verschwinden noch sich ohne Grund vermehren kann. Diese Art der Datenver-
arbeitung ist weitverbreitet.
Online Analytical Processing
Im Gegensatz zum bereits genannten OLTP hat das Online Analytical Processing
(OLAP) die Datenanalyse und Auswertung zum Ziel. Wenn Sie im Supermarkt einkau-
fen, werden ebenfalls mehrere datenbankgestützte Aufgaben durchgeführt. Zum
einen wird der Lagerbestand für jedes von Ihnen gekaufte Produkt angepasst, zum
anderen werden die Umsätze in der Buchhaltung automatisch erfasst. Außerdem
weiß Ihr Supermarkt nun, welche Produkte Sie besonders gerne gemeinsam einkau-
fen (beispielsweise Chips und Bier); und falls Sie eine Kundenkarte besitzen, kann das
System gleich den Werbeflyer für den kommenden Monat zusammenstellen (auf
dem Chips besonders günstig angepriesen werden, der erhöhte Bierpreis jedoch tun-
lichst nicht beworben wird).
Stellen Sie sich die vorher genannten Transaktionen eines Supermarkts vor. Bei einer
großen Supermarktkette mit vielen Filialen in Ihrer Region fällt an einem vorweih-
nachtlichen Einkaufssamstag eine unglaubliche Menge an Daten an, die genauestens
analysiert werden will, um das Kundenverhalten zu untersuchen. Dabei dienen die
einzelnen Transaktionen als Grundlage für das Erstellen eines Gesamtbildes, um so
vorherrschende Trends in der Gesamtheit der Daten und der Veränderungen dieser
Daten erkennen zu können. Anhand der gewonnenen Datensätze und mit Hilfe des
OLAP-Verfahrens können nun genaueste Analysen über umgesetzte Waren erstellt
3753.book Seite 33 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
34
und dadurch zukünftige Budgets, die Warenhaltung und viele weitere wertvolle
Daten mehr erstellt werden. Zusätzlich lassen sich so Trends erkennen, die vorher
unbekannt waren. Dieses Anwendungsprinzip von Datenbanken ist somit ein wich-
tiges Werkzeug betrieblicher Informationssysteme, der sogenannten Business Intelli-
gence.
Da sehr viele einzelne Datensätze zu aussagekräftigen Kennzahlen zusammenge-
fasst werden müssen, kommen Aggregatfunktionen zum Einsatz. Diese verdichten
große Mengen zusammengehörender Daten zu einer einzelnen Maßzahl, die dem
Management eines Betriebs als Basis für Entscheidungen dient. MySQL unterstützt
alle wichtigen Aggregatfunktionen, wie das Minimum/Maximum in einer Reihe von
Werten, Summenbildung, Durchschnittswerte und viele statistische Funktionen.
Backend für Web-Auftritte
Der Großteil moderner Webseiten besteht nicht mehr aus handgeschriebenen
HTML-Dateien, sondern aus dynamisch generierten Inhalten, die je nach Benutzer-
anfrage automatisch zu darstellbaren Webseiten zusammengefügt werden. Diese
Inhalte werden in Datenbanken gespeichert und individuell abgerufen. Die Technik
bietet enorme Vorteile gegenüber statischen Seiten, da die Inhalte von der Struktur
getrennt gespeichert und somit in immer neuen Konstellationen wiederverwendet
werden können.
Praktisch alle Onlineshops setzen Datenbanken ein, in denen Informationen über
die zu verkaufenden Produkte gespeichert sind. Die Datensätze enthalten sämtli-
che Beschreibungen über das Produkt, den aktuellen Preis, den Lagerbestand und
vieles mehr. Zusätzlich sind die Produkte in Kategorien eingeordnet. Verwendet ein
potentieller Kunde das vorgegebene Menü auf der Webseite, um den Warenkatalog
zu durchstöbern, werden Abfragen an das Datenbankmanagementsystem gestellt.
Typische Produktmenüs bilden meistens Produktkategorien ab, in denen ähnliche
Produkte zusammengefasst sind. Anhand der aktuell gewählten Kategorie wird
eine Abfrage an das DBMS gestellt, das daraufhin eine Liste von passenden Produk-
ten zurückliefert. Das Webportal generiert anschließend aus dieser Liste eine
Ansicht von Produkten. Selbstverständlich können Kunden auch nach Begriffen
oder konkreten Produkten suchen. Auch in diesem Fall beantwortet die Datenbank
Abfragen und stellt dynamisch Ergebnismengen zusammen, die den Anforderun-
gen des Kunden entsprechen.
Doch nicht nur für die Abfrage von Daten, die dann auf Webseiten dargestellt wer-
den, kommen Datenbanken zum Einsatz. In den letzten Jahren hat sich vielerorts im
Web auch eine soziale Komponente durchgesetzt, das sogenannte Web 2.0, das
Anwender nicht nur zum Konsumenten, sondern auch zum Produzenten macht,
indem User zum Beispiel ihre Meinung zu Produkten auf der Webseite hinterlassen
können. In Form von Kommentaren oder Bewertungen können Benutzer eines
3753.book Seite 34 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
35
1Onlineshops ihre persönliche Erfahrung mit einem Produkt kundtun. Auch diese
Information wird in der Datenbank gespeichert und mit dem Produkt, auf das sich
die Meinung bezieht, verknüpft. All diese Informationen werden zusammen mit
dem Kundenprofil, den Artikeln, für die sich der Kunde interessiert hat, den tatsäch-
lichen Einkäufen und vorhandenen Rechnungen im Hintergrund von der Datenbank
verwaltet und stehen so dem Anbieter zur Verfügung.
Nachrichtenportale funktionieren nach einem ähnlichen Prinzip. Die Inhalte der
Meldungen sind in verschiedene Ressorts eingeteilt. Je nachdem, für welche Art von
Informationen sich ein User interessiert, werden diese Meldungen unterschiedlich
kombiniert und für ihn aufbereitet. Ist der Anwender bei der Portalseite registriert,
kann er direkt auf der Startseite mit jenen Meldungen begrüßt werden, die seinen
Interessen entsprechen und zu seinem Nutzerprofil passen. Dasselbe gilt natürlich
auch allgemein für Blogs, Content-Management-Systeme, Foren und dergleichen.
Die Datenbank stellt die Inhalte dynamisch bereit.
Informationssysteme
Datenbanken sind besonders für eine Aufgabe geschaffen: das möglichst schnelle
Auffinden von Informationen. Datensätze bestehen aus verschiedenen Datenfeldern
mit verschiedenen Formaten und Eigenschaften. Zum Beispiel werden Zeitangaben
in einem speziellen Datumstyp gespeichert. Solche und andere Eigenschaften kön-
nen Datenbankmanagementsysteme ausnutzen, um besonders schnell nach ihnen
zu suchen. Dazu wird ein sogenannter Datenbankindex angelegt, der ähnlich wie das
Stichwortverzeichnis in einem Buch dazu dient, Datensätze, die ein bestimmtes Kri-
terium erfüllen, besonders schnell aufzufinden. Das Besondere daran ist, dass dieser
Index nicht zur Datenbasis selbst gehört, sondern losgelöst von ihr als eigenständi-
ges Nachschlagewerk existiert.
Ein Telefonbuch ist beispielsweise ein Index von Personen und den Telefonnum-
mern, unter denen diese Personen erreichbar sind. Wenn Sie einen Freund anrufen
wollen, finden Sie seine Nummer schnell, da die Namen alphabetisch geordnet sind.
Sie schlagen das Telefonbuch in der Mitte auf und entscheiden, ob der Nachname
alphabetisch vor oder nach der aufgeschlagenen Seite auffindbar sein muss. Sie
nähern sich dem Namen an, indem sie den Teilbereich des Telefonbuchs erneut hal-
bieren und so fortfahren, bis Sie den Namen ihres Freundes gefunden haben. Dieses
Verfahren nennt sich binäre Suche, und wenn Sie sich nicht ungeschickt anstellen,
sind Sie nach nur wenigen Schritten am Ziel angelangt.
Doch was, wenn Sie in Ihrer Jackentasche einen Zettel mit nur einer Telefonnummer
finden und den dazugehörenden Namen herausfinden wollen, zum Beispiel von der
Bekanntschaft von gestern Abend? Dann müssen Sie, da das Telefonbuch nach
Namen sortiert ist, jede Seite und jeden Eintrag einzeln durchgehen, und das wird
wahrscheinlich sehr viel Zeit in Anspruch nehmen.
3753.book Seite 35 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
36
Eine Datenbank kann jedoch mehrere, verschiedene Indizes anlegen, zum Beispiel
auch nach der Telefonnummer in aufsteigender Reihenfolge, und ist somit nach nur
wenigen Schritten beim richtigen Namen angelangt. Vorausgesetzt, Sie haben die
richtige Telefonnummer erhalten.
Das Suchen und Auffinden beschränkt sich jedoch nicht nur auf die textuelle Suche.
Ein junges, jedoch sehr populäres Einsatzgebiet ist das Indizieren von Geo-Koordina-
ten, wie sie bei sämtlichen Kartografiesystemen zum Einsatz kommen. So lassen sich
Orte von besonderem Interesse in der Nähe eines gegebenen Ausgangspunkts schnell
auffinden, kürzeste Distanzen zwischen Städten berechnen und viele weitere Aufga-
ben lösen, die Sie davor bewahren, sich zu verlaufen. Weitere Informationen und
Details finden Sie in Abschnitt 9.2.8, »GIS und raumbezogene Indizes«.
1.1.6 Anforderungen an ein Datenbankmanagementsystem
Wie Sie im vorigen Abschnitt über die Einsatzgebiete von Datenbanksystemen gele-
sen haben, müssen Datenbanksysteme eine Vielzahl von verschiedenen Aufgaben
bewältigen. Um diesen Problemstellungen gerecht zu werden, gibt es Anforderungen
an relationale Datenbankmanagementsysteme, die erfüllt werden müssen. Der
Erfinder des relationalen Datenbankmodells – Edgar Codd – hat dreizehn Regeln defi-
niert,1 die diese Anforderungen festlegen bzw. eine relationale Datenbank definieren.
Die wichtigsten dieser Regeln fassen wir im folgenden Abschnitt zusammen. Es gilt
zu beachten, dass diese Regeln ein ideales Datenbanksystem beschreiben. Kein
DBMS kann all diese Regeln zu 100 % erfüllen.
Datenabstraktion
Der Hauptzweck von Datenbanken ist die Verwaltung von sehr vielen Daten. Diese
müssen zuverlässig auf dem Dateisystem des Datenbankservers gespeichert werden
und jederzeit abrufbar sein. Der Datenbankserver ist jener Rechner, auf dem die Soft-
ware des Datenbankmanagementsystems läuft. Wie genau das System die Daten
physisch auf das Speichermedium schreibt, wird durch das Datenbanksystem vor
dem Benutzer verborgen (Regel 8), da er für die Verwaltung der Daten nicht wissen
muss, wie das genau geschieht. Ein DBMS realisiert daher immer auch eine Abstrak-
tion. Auch um den Zugriff auf die gespeicherten Daten oder die Erstellung eines Inde-
xes, um Daten wiederzufinden, muss sich der Anwender nicht direkt kümmern, das
übernimmt ebenfalls das Datenbanksystem.
Damit ein Datenbankmanagementsystem wie MySQL als relationales Datenbank-
managementsystem (RDBMS) bezeichnet werden kann, muss es alle internen Ver-
1 Diese Regeln werden oft als die zwölf Regeln von Codd bezeichnet, da sie von 0 bis 12 nummeriert
sind. Da die Regel 0 mitgezählt wird, ergeben sich rechnerisch dreizehn Regeln.
3753.book Seite 36 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
37
1waltungsaufgaben mit den genannten relationalen Methoden ausführen können
(Regel 0). Details zum relationalen Datenbankmodell erfahren Sie noch im Laufe der
Einleitung. Der Anwender muss sich daher nur mit dem abstrakten Modell befassen.
Datenbanksysteme werden zur Lösung von realen Problemen eingesetzt. Dazu
muss der Anwender ein solches Problem so beschreiben, dass es in ein Datenmodell
übersetzt werden kann. Ein solches Modell beschreibt also einen konkreten Vorgang
abstrakt, mit Hilfe einer definierten Beschreibungssprache. Wie diese Aufgabe dann
intern vom Datenbanksystem umgesetzt wird, ist noch nicht festgelegt. Die Reprä-
sentation der Daten ist auch davon unabhängig (Regel 9).
Als Modell dient bei MySQL das relationale Datenbankmodell, das die einzelnen Enti-
täten in tabellarische Schemas (Regel 1) zusammenfasst und diese miteinander in
Beziehung setzt. Jede einzelne Zeile einer Tabelle muss dabei eindeutig identifizierbar
sein (Regel 2), damit sie wieder aufgefunden werden kann. Jede Zeile besteht aus min-
destens einer Spalte. Eine solche Spalte, die auch als Attribut bezeichnet wird, nimmt
die Werte in sich auf. Kann für einen Eintrag in einer Zeile bzw. Spalte kein eindeutiger
Wert angegeben werden, so kann diese Zelle der Tabelle in vielen Fällen leer gelassen
werden. Dabei ist jedoch wichtig, dass dieser leere Wert (der als NULL bezeichnet wird),
vom Datenbanksystem richtig interpretiert wird (Regel 3). Schließlich ist es ein großer
Unterschied, ob ein Wert schlicht nicht bekannt ist, oder ob er fehlt.
Für das Einfügen, Löschen und Ändern der Datensätze muss ein relationales Daten-
banksystem Funktionen zur Verfügung stellen (Regel 7), nur so können die Daten
auch eingegeben und verwaltet werden. Zudem muss das System verschiedene Ope-
rationen unterstützen, damit Sie mit den Daten auch arbeiten können. Diese Opera-
tionen sind mengenorientiert und basieren auf der relationalen Algebra. Sie werden
diese in der Einführung noch kennenlernen. Die Eigenschaften des Datenbanksys-
tems samt allen Tabellen werden im sogenannten Data Dictionary gespeichert
(Regel 4), das selbst wiederum eine Tabelle ist. Für alle Interaktionen mit dem Daten-
banksystem wird eine Abfragesprache, beispielsweise SQL, verwendet (Regel 5).
Datenintegrität
Die Tabellen und damit die Daten innerhalb einer Datenbank sind nicht für sich iso-
liert gespeichert, sondern stehen in Beziehungen zueinander. An diese Beziehungen
können Bedingungen geknüpft sein, die jederzeit eingehalten werden müssen
(Regeln 10, 11 und 12). Unter Datenintegrität versteht man, dass die Datenbasis sich
jederzeit in einem korrekten, das heißt konsistenten Zustand befindet. Die bekann-
testen Integritätsbedingungen sind Fremdschlüsselbeziehungen. Trigger können
ebenfalls dazu eingesetzt werden, solche Integritätsbedingungen einzuhalten. Auch
diese Technologie lernen Sie in diesem Buch kennen (siehe Abschnitt 11.6, »Trigger«).
3753.book Seite 37 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
38
Vermeidung von Redundanzen und Inkonsistenzen
In der Datenverarbeitung stellen Datensätze in doppelter und mehrfacher Ausfüh-
rung ein großes Problem dar, da sie schnell zu einem inkonsistenten Datenbestand
führen. Sie sollten sie daher im Allgemeinen vermeiden, da das Erhalten von mehre-
ren Kopien desselben Objekts erstens eine Speicherplatzverschwendung darstellt
und sich zweitens bei Aktualisierungen beinahe zwangsläufig Fehler einschleichen,
deren Ursache im Nachhinein nicht mehr rekonstruiert werden kann. Ein gutes
Datenbankdesign vorausgesetzt, verfügen Datenbanksysteme über Mechanismen,
um unnötige Mehrfachabspeicherungen und sich daraus ergebende Ungereimthei-
ten im Datenbestand zuverlässig zu vermeiden. Wie Sie ein solides Datenbanken-
schema entwerfen, beschreiben wir in Abschnitt 2.4, »Datenbankdesign«.
Redundanzen lassen sich jedoch nicht immer vermeiden, insbesondere wenn es auf
eine sehr hohe Abfrageleistung ankommt. Die Mehrfachabspeicherung erlaubt näm-
lich unter bestimmten Umständen eine deutliche Erhöhung der Abfragegeschwin-
digkeit. Daher handelt es sich immer um einen Tradeoff zwischen Effizienz und
Geschwindigkeit der Abfragebeantwortung. Mehr dazu finden Sie in Kapitel 9, »Ab-
frageoptimierung«.
Paralleler Zugriff, Transaktionen und Mehrbenutzerbetrieb
Moderne Datenbanksysteme sind immer Mehrbenutzersysteme. Das bedeutet, dass
mehrere Abfragen verschiedener Benutzer gleichzeitig verarbeitet werden können,
ohne dass sich diese Datenbankabfragen gegenseitig stören. Das ist wichtig, da eine
Datenbank oft eine Vielzahl von Abfragen gleichzeitig bearbeiten können muss und
die Anwender nicht lange auf die Beantwortung ihrer Abfragen warten sollen.
Stellen Sie sich ein weltweites Banksystem vor, bei dem immer nur ein Kunde zu
einem bestimmten Zeitpunkt Geld abheben kann. Wird Geld von einem Konto auf
ein anderes transferiert, kann dieser Prozess nur entweder ganz oder gar nicht durch-
geführt werden. Es darf keinen unvollständigen bzw. nicht abgeschlossenen Geld-
transfer geben. Daher fasst man die dazu notwendigen Schritte in eine Reihenfolge
von Einzelschritten zusammen, die als Transaktion bezeichnet wird. Die so zusam-
mengefassten Operationen können nur entweder alle gemeinsam erfolgreich abge-
schlossen werden, oder die Transaktion gilt als fehlgeschlagen. Innerhalb eines
solchen Blocks von einzelnen Schreib- und Leseoperationen gilt daher das Prinzip
alles oder nichts. Nur wenn alle Schritte für sich erfolgreich durchgeführt wurden,
dürfen die Veränderungen am Datenbestand dauerhaft gespeichert werden. Damit
durch konkurrierende Schreibvorgänge kein Durcheinander in der Datenbasis ent-
steht, arbeitet MySQL mit einem Sperrensystem, das wir in Abschnitt 5.3.3, »Lock-
Management«, ausführlich vorstellen.
3753.book Seite 38 Donnerstag, 30. April 2015 1:08 13
1.1 Grundlagen von Datenbanken
39
1Datensicherheit und Datenschutz
Eng mit der Parallelität eines Datenbanksystems ist die Anforderung der Daten-
sicherheit verbunden. Da mehrere Personen dasselbe Datenbanksystem gleichzeitig
verwenden können, ist die Behandlung von Benutzerrechten eine äußerst wichtige
Anforderung an Datenbanksysteme. Nicht alle Benutzer dürfen auch alle Daten, die
im System gespeichert sind, einsehen, denn sie gehören unterschiedlichen Nutzer-
gruppen an. In einer Firma sind die Gehaltslisten zum Beispiel nur von der Personal-
abteilung einsehbar, nicht aber für die Lagerverwaltung. Diesen Nutzergruppen
müssen Benutzerrechte zugewiesen werden können, die eine bestimmte Granulari-
tät aufweisen. In MySQL können Sie genau festlegen, welcher Benutzer auf welche
Datenbanken und Tabellen zugreifen und welche Operationen er auf diesen Daten
ausführen darf.
In diesem Zusammenhang spricht man auch von verschiedenen Sichten (Views;
Regel 6) auf das System. Darunter versteht man, dass Daten je nach Anforderung
unterschiedlich aufbereitet werden können, unter anderem anhand der gesetzten
Benutzerrechte. Näheres dazu finden Sie in Kapitel 10, »Sicherheit«.
Backup und Recovery
Kein System ist fehlerfrei, und somit muss immer mit der Möglichkeit eines System-
crashs gerechnet werden. Damit ein solcher Absturz der Datenbanksoftware nicht
alle Daten unwiederbringlich vernichten kann, verfügen Datenbanksysteme über
Schutzmechanismen, mit deren Hilfe zumindest der Großteil der gespeicherten
Datensätze wiederhergestellt werden kann.
Die vorbeugende Variante wird als Backup bezeichnet. Ein Datenbankmanagement-
system muss die Möglichkeit bieten, regelmäßig Sicherungen aller Daten anzulegen
und diese im Bedarfsfall auch wieder zurückzuspielen. Wie Sie mit MySQL Backups
anlegen und diese auch wieder herstellen, erklären wir in Abschnitt 7.4, »Richtig
sichern – Backups und Strategien«, genau.
Tritt ein Systemfehler, ein Stromausfall oder ein Hardwaredefekt auf, so muss auch
unter diesen Umständen die Konsistenz der Datenbasis gewahrt bleiben, denn auch
nach einem Systemabsturz dürfen keine inkorrekten Daten in der Datenbank vor-
handen sein. Stellen Sie sich vor, während einer Banküberweisung kommt es zu
einem Stromausfall im Rechenzentrum und das zu überweisende Geld wäre im digi-
talen Nirwana verschwunden. Solche Szenarien müssen unter allen Umständen ver-
hindert werden. Dazu bietet MySQL sogenannte Recovery-Verfahren, die anhand von
Log-Dateien und Schnappschüssen den Zustand der Datenbank wiederherstellen
können. Die Funktionsweise dieses datentechnischen Rettungsrings in Form von
Backups erläutern wir in Abschnitt 7.4, »Richtig sichern – Backups und Strategien«.
3753.book Seite 39 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
40
1.2 MySQL
MySQL ist ein relationales Datenbankmanagementsystem. Es handelt sich dabei
nicht nur um irgendein Datenbanksystem unter vielen, sondern laut dem markigen
Slogan der Unternehmenswebseite um »die populärste Open-Source-Datenbank der
Welt«2. Ob MySQL wirklich so erfolgreich ist und was es so besonders macht, erfahren
Sie in den folgenden Abschnitten.
Zuerst stellen wir die Features und Eigenschaften von MySQL vor. Danach werden die
verschiedenen Versionen dieses relationalen Datenbanksystems und ihre Vor- und
Nachteile in Abschnitt 1.2.3, »Open Source und Lizenzen«, näher betrachtet. Im sel-
ben Abschnitt erfolgt ein kurzer Überblick über Open-Source-Software im Allgemei-
nen und das duale Lizenzmodell im Speziellen, da dieses auch von MySQL eingesetzt
wird. Den Abschluss des einleitenden Kapitels bildet die Geschichte über die Entste-
hung des Datenbanksystems.
1.2.1 Einleitung und Vorstellung
Das Datenbankmanagementsystem, um dessen Administration es in diesem Buch
geht, trägt den offiziellen Namen MySQL Community Server und wird oft einfach als
MySQL bezeichnet. Darunter versteht man die Open-Source-Version, die kostenlos
von der Webseite des Herstellerunternehmens Oracle (früher MySQL AB) herunter-
geladen werden kann. Innerhalb dieses Buches ist immer die MySQL Community
Server Edition gemeint, wann immer von MySQL die Rede ist.
Der Name MySQL besteht aus dem Vornamen (My) der Tochter des Co-Gründers
Michael »Monty« Widenius und der Abkürzung SQL, die wenig überraschend für
Structured Query Language steht. Die offizielle Aussprache von MySQL lautet übri-
gens »Mei Ess Kju Ell«, und nicht »Mei-sikwel«, wie man aufgrund der offiziellen Aus-
sprache des Standards SQL annehmen könnte. Das Maskottchen von MySQL – ein
Delphin – hört auf den Namen Sakila.
Abbildung 1.1 Das MySQL-Maskottchen Sakila
2 http://www.mysql.de/about/
3753.book Seite 40 Donnerstag, 30. April 2015 1:08 13
1.2 MySQL
41
1Die Features von MySQL
Einer der Hauptvorteile von MySQL ist die einfache Bedienung des Systems. Wie Sie
im Laufe dieses Buches noch sehen werden, ist MySQL verglichen mit Konkurrenzpro-
dukten trotz seines großen Funktionsumfangs und trotz seiner Leistungsfähigkeit
einfach zu erlernen. Zusätzlich werden Sie sehen, dass Sie schnell und unkompliziert
Hilfestellungen zu Fragen finden werden, da MySQL erstens ein von der Community
betreutes Open-Source-Projekt ist und zweitens auch von der Firma selbst sehr gut
dokumentiert wird. In den meisten Fällen können Sie sich sicher sein, dass ein Prob-
lem, über das Sie eventuell gestolpert sind, bereits bekannt ist und eine Lösungsbe-
schreibung im Internet nur darauf wartet, von Ihnen entdeckt zu werden. Wie Sie
MySQL innerhalb nur weniger Minuten herunterladen und installieren, erfahren Sie
in Abschnitt 3.3, »MySQL installieren«. Sie werden überrascht sein, wie schnell Sie
eine laufende Version von MySQL benutzen können.
MySQL ist ein äußerst vielseitiges und flexibles Datenbankmanagementsystem. Es
wurde in den Sprachen C und C++ geschrieben und ist daher auf fast allen gängigen
Plattformen verfügbar, die einen C- beziehungsweise C++-Compiler zur Verfügung
haben. Doch keine Angst, im Normalfall müssen Sie MySQL nicht selbst kompilieren.
Für die am weitesten verbreiteten Betriebssysteme liegt die Software als vorkompi-
lierte Binärdatei vor, die Sie nur noch herunterladen und installieren müssen. Details
dazu erfahren Sie in Kapitel 6, »Manuelle Installation, Plugins und Upgrades«. Die
Möglichkeit, MySQL sowohl auf einem Windows-PC als auch auf einem Mac sowie
auf allen gängigen Serversystemen wie den meisten Unix-Derivaten – zu denen auch
GNU/Linux3 zählt – zu installieren und einzusetzen, trägt zur großen Verbreitung
von MySQL bei.
MySQL ist ein Client-Server-System. Darunter versteht man ein Konzept der Arbeits-
teilung von Computersystemen. Auf dem Server läuft MySQL als Prozess (Daemon),
der auf Anfragen von Clients wartet. Auf den Clients selbst läuft keine Datenbank. Sie
warten lediglich auf die Beantwortung ihrer Anfragen durch den Server und bearbei-
ten diese dann selbständig weiter. Es ist die besondere Architektur von MySQL, die
aus verschiedenen Schichten besteht, die für die hohe Flexibilität von MySQL und
seine vielseitige Anwendungsfälle verantwortlich ist. Details über die Bestandteile
und deren Funktionsweise erfahren Sie in Kapitel 5, »Architektur«.
MySQL selbst ist nicht besonders anspruchsvoll, was seine Arbeitsumgebung angeht.
Es lässt sich sogar auf älterer Hardware installieren und betreiben. Natürlich dürfen
Sie keine Höchstleistungen auf einem veralteten System erwarten, doch die Anforde-
rungen, die MySQL an ein System stellt, sind gering. So können Sie MySQL zum Bei-
spiel in Embedded-Umgebungen mit wenig Rechenleistung genauso einsetzen wie
in Großrechnern, wie sie etwa in Datawarehouse-Lösungen üblich sind, die sehr viel
3 Wird oft einfach auch als »Linux« bezeichnet.
3753.book Seite 41 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
42
Rechenpower zur Verfügung stellen. MySQL ist auch in dieser Hinsicht äußerst flexi-
bel und lässt sich sehr gut skalieren; es wächst mit seinen Anforderungen mit.
Doch MySQL ist nicht nur unterschiedlichen Einsatzgebieten gewachsen, sondern es
bietet auch eine äußerst flexible Möglichkeit, Daten je nach Anforderungen unter-
schiedlich zu verwalten. MySQL speichert Ihre Daten mit Hilfe einer sogenannten
Storage-Engine. Dabei handelt es sich um jene Softwaremodule, die sich um die kon-
krete Speicherung der Daten kümmern und viele weitere wichtige Eigenschaften
festlegen. Je nachdem, welche konkreten Anforderungen Sie an Ihre Datenbankan-
wendung haben, kann beispielsweise die Sicherheit Ihrer Daten einen höheren Stel-
lenwert haben als die Geschwindigkeit, mit der Sie auf diese Daten zugreifen können.
MySQL unterstützt durch seinen modularen Aufbau verschiedene Storage-Engines,
die Sie je nach vorliegendem Einsatzszenario auswählen können. Die verschiedenen
Storage-Engines bieten unterschiedliche Funktionen. Sie können je nachdem, ob bei-
spielsweise Geschwindigkeit oder Transaktionssicherheit für Sie wichtiger ist, ent-
scheiden, welche Storage-Engine eingesetzt werden soll. Diese Wahl können Sie für
jede Tabelle einzeln treffen, was eine Besonderheit von MySQL ausmacht. In
Abschnitt 5.4, »Storage-Engines«, stellen wir die einzelnen Storage-Engines, ihre Ein-
satzfelder sowie ihre Vor- und Nachteile ausführlich dar und erklären sie im Detail.
MySQL eignet sich sowohl für kleine, private Projekte, etwa um Ihre persönlichen
Daten zu verwalten, als auch für geschäftskritische Großprojekte, in denen es auf
Hochverfügbarkeit und Hochleistung ankommt. MySQL ist der Motor vieler bekann-
ter Firmenauftritte im Netz und als Datenspeicher, der mit einer unglaublichen
Datenmenge fertig wird, äußerst erfolgreich im Einsatz. Hätten Sie gewusst, dass
zum Beispiel eine der meistfrequentierten Webseiten der Welt, Wikipedia, auf
MySQL setzt? Erreicht wird die außergewöhnliche Leistungsfähigkeit unter anderem
durch Indextechniken, Optimierungen und Replikation. Datenbankindizes dienen
dem schnellen Suchen und Sortieren der Datensätze. Optimierungen befassen sich
mit der möglichst effizienten Abfrage der Ergebnismenge, und unter Replikation ver-
steht man die mehrfache Datenabspeicherung zur Leistungs- und Sicherheitssteige-
rung eines Datenbanksystems auf mehreren Rechnern. Lassen Sie sich von diesen
Begriffen nicht abschrecken! Sie werden darüber in Kapitel 8, »Replikation und Hoch-
verfügbarkeit«, noch ausführlich lesen.
MySQL kann in Kombination mit so gut wie allen aktuellen Programmiersprachen
eingesetzt werden, egal ob C, C++, Java oder PHP. Somit ist es höchst komfortabel, das
Datenbanksystem über Schnittstellen in Softwareprojekten zu nutzen. Die vielfälti-
gen Funktionen, die in MySQL bereits integriert sind, können so oft vom Programm-
code selbst auf das Datenbanksystem ausgelagert werden und Ihre Anwendungen
erheblich beschleunigen. Wie Sie MySQL mit verschiedenen APIs und Programmier-
sprachen nutzen, erläutern wir ausführlich in Kapitel 12, »Softwareentwicklung mit
MySQL«.
3753.book Seite 42 Donnerstag, 30. April 2015 1:08 13
1.2 MySQL
43
1Zusammenfassung
Hier noch einmal die Vorteile von MySQL im Überblick:
� einfach zu erlernen und zu bedienen
� flexibel und vielseitig
� skalier- und anpassbar
� hochleistungsfähig
� hochverfügbar
� stabil
� sicher
� einsatzerprobt
� Open Source
� kostenlos bzw. günstig in der Anschaffung
� ständige Weiterentwicklung durch die Firma und die Community
1.2.2 Die Geschichte von MySQL
MySQL erblickte 1995 das Licht der Welt, als es von den beiden Schweden David
Axmark und Allan Larsson und dem Finnen Michael Widenius, nach dessen Tochter
das System benannt ist, ins Leben gerufen wurde.4 In den 1980er Jahren arbeitete
Widenius bei einem schwedischen Telekommunikationsunternehmen und entwi-
ckelte dort ein Tool zur Kommunikation mit einem Datenbankenvorläufer (UNI-
REG). Dieses System sprach eine sogenannte ISAM-Speicher-Engine an, mit deren
Hilfe sehr effizient auf in Dateien gespeicherte Informationen zugegriffen werden
konnte. Etwa zur selben Zeit wurde SQL populär, und es gab auch schon einige Daten-
banksysteme, die diese Sprache einsetzten. Eines dieser Systeme war mSQL, das
jedoch noch keine ausgereiften Zugriffsstrukturen besaß. Die Idee von Widenius war
es, die Vorteile seines Systems (effizientes Auffinden von Datensätzen) mit der einfa-
cheren Bedienung und der Flexibilität von mSQL zu verbinden.
Da sich beide Projekte aber aufgrund unterschiedlicher Entwicklungsstadien nicht so
einfach kombinieren ließen, implementierte Widenius kurzerhand ein eigenes Sys-
tem, das er aber mit mSQL kompatibel gestaltete. Dieses neue Projekt trug den
Namen – Sie ahnen es bereits – MySQL. Durch die Ähnlichkeit der beiden Systeme
waren zum einen Drittanbietertools verfügbar, außerdem wurde potentiellen
Umsteigern der Wechsel zu MySQL erleichtert. Im Jahr 1995 war es so weit: Das Unter-
nehmen MySQL AB5 wurde gegründet,6 und im Jahr darauf erschien auch die erste
4 http://dev.mysql.com/doc/refman/5.7/en/history.html
5 AB steht für Aktiebolag, die schwedische Form der Aktiengesellschaft.
6 http://dev.mysql.com/tech-resources/interviews/david-axmark.html
3753.book Seite 43 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
44
(interne) Version der Software. Im Oktober 1996 erschien bereits die Version mit der
Nummer 3.11.1 für das Betriebssystem Solaris, wenig später folgte die Version für
Linux. Von da an ging die Entwicklung stetig voran, und immer neue Features wur-
den hinzugefügt.
Da die Entwickler selbst viel mit Open-Source-Werkzeugen und -Programmen arbei-
teten, hatten sie sich von Anfang an entschieden, MySQL ebenfalls unter dieses Para-
digma zu stellen und jedermann frei und offen zur Verfügung zu stellen. Diese
Entscheidung hat sicherlich – neben dem technischen Know-how – zum überwälti-
gen Erfolg des Datenbankmanagementsystems beigetragen.
Doch die Entwickler sind einem weiteren Prinzip treu geblieben: MySQL sollte inner-
halb von 15 Minuten nach dem Herunterladen installiert und einsatzbereit sein.
Auch diese Vorgabe trägt mit Sicherheit zu der weiten Verbreitung von MySQL bei,
da dieser Grundsatz bis heute gültig ist. Wie Sie im Installationskapitel sehen werden,
haben Sie in wenigen Minuten ein lauffähiges System zur Hand, das Sie für die unter-
schiedlichsten Zwecke einsetzen können.
Inzwischen hat sich MySQL zu einem sehr ausgereiften System entwickelt, das über
viele leistungsfähige Eigenschaften verfügt. Jeder Versionsschritt brachte neue Fea-
tures mit sich, und inzwischen kann sich MySQL durchaus mit den großen, kommer-
ziellen Datenbanksystemen messen – oft ist es der Konkurrenz auch haushoch
überlegen. Aktuell trägt MySQL die Versionsnummer 5.7. Diese Version dient diesem
Buch als Ausgangspunkt.
Auch die Sprache SQL selbst wird – wenn auch gemächlich – weiterentwickelt.
Ursprünglich wurde SQL im Unternehmen IBM in den frühen 1970er Jahren entwi-
ckelt und reifte im Laufe der Jahre zu einem internationalen Standard heran. Die
aktuelle Sprachversion, die auch MySQL einsetzt, lautet SQL3.
Die Übernahmen von Sun und Oracle
Ursprünglich wurde die Software vom Unternehmen MySQL AB entwickelt, das von
den drei Gründern Axmark, Widenius und Larsson ins Leben gerufen worden war. In
den letzten Jahren ging immer wieder ein Rauschen durch den virtuellen Blätter-
wald, als Gerüchte über den möglichen Kauf von MySQL durch Sun Microsystems die
Runde machten.
Diese Gerüchte bestätigten sich dann 2008: Der Riese Sun schluckte MySQL AB.7 Für
eine Milliarde Dollar wollten die beiden Unternehmen symbiotisch fusionieren. Sun
hatte bis dato keine eigene nennenswerte Datenbankanwendung in seinem Soft-
warestack, ist dafür aber mit seinen Frameworks und Programmen in großen Rechen-
7 http://www.heise.de/open/artikel/Da-kommt-zusammen-was-zusammengehoert-221434.html
3753.book Seite 44 Donnerstag, 30. April 2015 1:08 13
1.2 MySQL
45
1zentren weitverbreitet. Diesen noch fehlenden Datenbankbereich könnte MySQL
durch die Übernahme erschließen, so die Überlegung damals.
Die nächste Überraschung ließ nicht lange auf sich warten, denn im April 2008
kaufte einer der größten Datenbankhersteller der Welt – Oracle – den Serverspezialis-
ten Sun8 und schluckte so MySQL gleich mit – als Beifang quasi. Bei Oracle hatte man
bereits länger ein Auge auf das Open-Source-Projekt geworfen, denn schon vorher
mischte der Datenbankengigant Oracle mit, als er 2005 einen Kooperationspartner
von MySQL kaufte.9
Da Oracle selbst auf Datenbanken spezialisiert ist, war die Sorge groß, dass das Ende
von MySQL nun endgültig gekommen wäre. Denn welcher Hersteller eines kommer-
ziellen Produkts möchte nicht gerne die Konkurrenz loswerden, die ihr Produkt in
einer ähnlichen Sparte kostenlos anbietet? Doch für Oracle bietet MySQL die Mög-
lichkeit, sein Portfolio um ein weiteres Open-Source-Projekt zu erweitern, schließlich
umfasst es schon – wie bereits erwähnt – InnoDB und auch Berkeley DB10 sowie wei-
tere Projekte. Bisher gibt es daher wenig Grund zur Sorge, denn inzwischen schreiben
wir das Jahr 2015, und MySQL ist nach wie vor eines der beliebtesten Systeme und bei
weitem das erfolgreichste Datenbankprojekt im Open-Source-Sektor.
Versionen von MySQL
Die aktuelle Version von MySQL trägt die Versionsnummer 5.7. Wenn Sie auf der
Downloadseite von MySQL den Community Server herunterladen möchten, sehen
Sie, dass die Versionen noch genauer angegeben sind. Zum Zeitpunkt des Schreibens
an diesem Buch war dies beispielsweise die Entwicklerversion mit der Nummer 5.7.6.
Wie Sie sehen, besteht das Versionierungsschema von MySQL-Releases aus drei Zah-
len und einem Suffix.
Die erste Ziffer bezeichnet die Hauptversion des Servers; sie wird nur dann erhöht,
wenn sich das Dateiformat – also grundlegende Eigenschaften, wie Daten abgespei-
chert werden – ändert. Die zweite Ziffer steht für den Release Level und steigt mit neu
eingeführten Features an. Zusammengenommen mit der Hauptversion ergeben
diese beiden Ziffern die Nummer der Release-Serie. Die dritte Ziffer kennzeichnet die
Versionsnummer innerhalb einer Release-Serie und wird bei kleineren Änderungen
hochgezählt.
Das Suffix kann entweder als Alpha, Beta oder RC angegeben werden und bezeichnet
das Entwicklungsstadium der Software. Alpha-Versionen sind noch nicht ausgiebig
getestet und noch offen für Änderungen; im Gegensatz dazu sind Beta-Versionen
bereits vollständig getestet, und es werden keine Änderungen in der Feature-Liste
8 http://www.oracle.com/us/corporate/press/018363
9 http://www.oracle.com/innodb/index.html
10 http://www.oracle.com/sun/sun-faq.pdf
3753.book Seite 45 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
46
mehr akzeptiert. Die höchste Entwicklungsstufe ist RC, der Release Candidate, und
bezeichnet weitgehend stabile Versionen. Ist kein Suffix angegeben, dann handelt es
sich bei der vorliegenden Version um ein stabiles Produktions-Release, das für den
geschäftskritischen Einsatz empfohlen wird.
Zusätzlich dazu gibt es das sogenannte Developer Release, das die neuesten Features
der aktuellen Entwicklungen enthält. Diese Version ist im Allgemeinen nur für den
Testbetrieb gedacht und um neue Funktionen testen zu können. Es wird nicht emp-
fohlen, Development-Versionen in Produktivumgebungen einzusetzen.
1.2.3 Open Source und Lizenzen
MySQL ist eines der bekanntesten Open-Source-Softwareprojekte, doch was bedeutet
das eigentlich?
Als Autor besitzt man an seinen Werken das Urheberrecht, das das geistige Eigentum
des Autors schützt. Das gilt für alle Werke, egal, ob es sich bei einem Werk um einen
Buchtext, wie diesen hier, um Musiknoten oder eben auch um Software handelt. Der
Programmierer einer Software, oder ein ganzes Unternehmen, das die Software ent-
wickelt, ist der Urheber dieses Programms und hat damit das Recht, über die Verwen-
dung seines Produkts zu bestimmen. Die Vergabe bestimmter Nutzungsrechte ist
mit Hilfe von Lizenzen geregelt, die genau festlegen, welche Rechte ein Lizenzneh-
mer damit zugestanden bekommt. Der Lizenznehmer muss nicht per se für die
Lizenz bezahlen, bei Open-Source-Projekten werden diese meist kostenfrei vergeben.
Man unterscheidet bei Software generell zwischen Closed Source und Open Source.
Erstere wird auch als proprietäre Software bezeichnet, und man versteht darunter
Programme, deren Quellcode nicht veröffentlicht wird. Solche Programme sind
nicht notwendigerweise, aber meistens kostenpflichtig. Ein Lizenznehmer hat in die-
sem Fall keine Möglichkeit, die Funktionsweise eines Programms genau zu studieren
und gegebenenfalls an seine Bedürfnisse anzupassen. Diese Einschränkung ist nicht
nur technischer Natur, schließlich können die meisten Programme dekompiliert
werden, sondern oftmals ist es laut Lizenzvertrag sogar ausdrücklich verboten.
Das Gegenteil davon ist Open-Source-Software, die – wie der Name schon andeutet –
unter einer Lizenz steht, bei der der Quellcode offen, das heißt lesbar zur Verfügung
steht. Open-Source-Software wird im Deutschen auch als freie Software bezeichnet,
wobei die Betonung auf der Freiheit der Lizenznehmer liegt und nicht auf dem Preis.
Es gibt eine Vielzahl verschiedener Lizenzmodelle im Bereich der freien Software, die
das Wort »Freiheit« oftmals unterschiedlich auslegen oder betonen. Eine der am wei-
testen verbreiteten und auch wichtigsten Open-Source-Lizenzen ist die GNU General
Public License, unter der auch MySQL in der Community-Version vertrieben wird.
Daher werden wir dieses Modell im nächsten Abschnitt genauer vorstellen, da es für
3753.book Seite 46 Donnerstag, 30. April 2015 1:08 13
1.2 MySQL
47
1Sie wichtig ist, um sich für die richtige Version von MySQL zu entscheiden und zu
evaluieren, welches Lizenzmodell für Ihre Projekte das richtige ist.
GNU General Public License
Die GNU General Public License wird auch als GPL bezeichnet und ist ein Lizenzmo-
dell für freie Software. Das GNU in diesem Namen steht für »GNU is not Unix«, und
es handelt sich dabei um ein rekursives Akronym, da der Buchstabe G selbst wiede-
rum für GNU steht. Das GNU-Projekt wurde Anfang der 1980er Jahre gegründet und
hat bis heute zum Ziel, die Zusammenarbeit von Programmierern und Kreativen
weiter zu fördern und deren Werke unter eine offene Lizenz und somit der Allge-
meinheit zur Verfügung zu stellen, ohne den Urheber seiner Rechte zu berauben. Der
Initiator dieses Lizenz-Projekts war Richard Stallman, der die gemeinnützige Free
Software Foundation (FSF) gegründet hat, die sich zum Ziel gesetzt hat, freie Software
zu fördern.
Neben dieser Stiftung existieren weitere Interessensgemeinschaften, wie beispiels-
weise die Open Source Initiative, die Ende der 1990er Jahre von Eric Raymond ins
Leben gerufen wurde, um den Gedanken frei verfügbarer Software besser zu ver-
markten. Der Hintergrund ist, dass das Wort »free« im Englischen nicht nur »Frei-
heit«, sondern auch »kostenlos« bedeutet. Da aber Open-Source-Produkte nicht
zwangsläufig kostenlos sein müssen, ist der Begriff der Free Software teilweise irre-
führend und für Unternehmen eventuell abschreckend.
Die Verbreitung des Quellcodes einer Software bietet viele Vorteile. Obwohl Open-
Source-Software auch kommerziell vertrieben werden kann, ist das meistens nicht
der Fall. Die Software ist überwiegend auch kostenlos verfügbar und kann somit risi-
kolos ausprobiert und getestet werden. Erweist sich ein Projekt als erfolgreich und
nützlich, wächst der Nutzerkreis und zieht dadurch auch immer mehr Entwickler an,
die das Projekt mit ihrer Mitarbeit weiter vorantreiben und somit verbessern. Der
Quellcode ist für jedermann verfügbar und darf ausdrücklich nach Belieben ange-
passt und verändert werden, solange die Referenz auf den Urheber und die einge-
setzte Lizenz erhalten bleibt. Durch diese Veränderungen erweitert sich oftmals der
Funktionsumfang, und somit wächst der Anwenderkreis erneut, wodurch die Soft-
ware selbst vielseitiger werden kann.
Auch beugt die internationale Zusammenarbeit von Entwicklern mit unterschied-
lichen technischen Hintergründen der Betriebsblindheit vor, da durch die Arbeits-
teilung komplexe Abläufe aus verschiedensten Blickwinkeln betrachtet werden. Das
führt dazu, dass im Allgemeinen Bugs sehr schnell entdeckt und auch behoben wer-
den, da der Quellcode von vielen unabhängigen Entwicklern eingesehen wird. Diese
Unabhängigkeit wirkt sich außerdem auf die Sicherheit der Software aus, denn die
Entwickler kontrollieren sich zwangsläufig gegenseitig.
3753.book Seite 47 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
48
Das duale Lizenzmodell
Wie wir bereits eingangs erwähnt haben, wird das Datenbanksystem MySQL unter
zwei verschiedenen Lizenzen angeboten. Je nachdem, welche Anforderungen Sie an
MySQL haben, müssen Sie sich für die kostenlose Community Edition von MySQL
oder die kommerzielle Variante von MySQL entscheiden.
Da die Open-Source-Version von MySQL unter der GPL-Lizenz steht, müssen Sie, falls
Sie selbst ein Softwareprojekt entwickeln, das auf MySQL aufbaut, dieses wiederum
unter die GPL stellen. Das bedeutet, dass auch der von Ihnen entwickelte Code öffent-
lich und frei zugänglich sein muss. Falls Sie Ihren Code jedoch nicht der Allgemein-
heit zur Verfügung stellen wollen und Sie trotzdem MySQL in Ihr Softwareprojekt
integrieren wollen oder müssen, dann ist die kommerzielle Variante die richtige Ver-
sion für Sie. Diese Version steht nicht mehr unter der GPL und zwingt Sie daher auch
nicht, den Quellcode Ihrer Anwendung ebenfalls unter die GPL zu stellen. Zusätzlich
sind Support-Pakete inkludiert, durch die Sie professionelle Unterstützung und wei-
tere Vorteile von Oracle erhalten.
Durch die Übernahme von Oracle wurde das kommerzielle Lizenzmodell vereinheit-
licht und vereinfacht.11 Nach wie vor gibt es von der kommerziellen Version die Vari-
anten MySQL Standard Edition12 und MySQL Enterprise Edition13. Diese beiden
Produkte unterscheiden sich im Umfang der mitgelieferten Tools zur Überwachung
und zur Analyse Ihrer MySQL-Installationen. Zusätzlich dazu wird MySQL Cluster14
angeboten, das sich an kommerzielle Anbieter mit Bedarf an verteilten Datenbanken
und mit der Anforderung an Hochverfügbarkeit und Hochgeschwindigkeit richtet.
Eine allgemeine Übersicht über die kommerziellen Produkte finden Sie auf der
MySQL-Website.15
Gemeinsam ist allen drei kommerziellen Versionen von MySQL, dass seit der Über-
nahme durch Oracle nun alle Versionen für den kommerziellen Einsatz ein umfang-
reicheres Supportpaket enthalten und diese Angebote vereinheitlicht wurden. Die
Preise werden pro Jahr und pro Server berechnet, wobei die Preise zusätzlich nach der
Anzahl der CPUs pro Server gestaffelt sind. Ab vier CPUs pro Server erhöht sich der
Preis. Ob Ihre CPU mehrere Kerne enthält, ist dabei unerheblich; für MySQL zählen
die Sockel, nicht die Anzahl der Kerne. In diesem Buch werden Sie jedoch ausschließ-
lich die sogenannte Community Edition kennenlernen, da sie am weitesten verbrei-
tet und kostenlos verfügbar ist.
Falls Ihr Projekt weder kommerziell ist noch unter der GPL, sondern unter einer ande-
ren Free-and-Open-Source-Lizenz steht, können Sie MySQL Client Libraries unter
11 http://blogs.oracle.com/mysql/2010/11/get_the_facts_mysql_licensing_and_pricing.html
12 http://www.mysql.com/products/standard/
13 http://www.mysql.com/products/enterprise/
14 http://www.mysql.com/products/cluster/
15 http://www.mysql.com/products/
3753.book Seite 48 Donnerstag, 30. April 2015 1:08 13
1.2 MySQL
49
1bestimmten Voraussetzungen trotzdem einsetzen. Da die MySQL Client Libraries
selbst unter der GPL stehen, dürften Sie sie nicht selbst anpassen, ohne Ihre eigene
Software ebenfalls unter die GPL zu stellen. Die sogenannte FOSS License Exception16
ist eine Ausnahme, die es Ihnen erlaubt, die Client Libraries zu verwenden, auch wenn
Ihre Software unter einer Lizenz steht, die nicht kompatibel mit der GPL ist. Eine Liste
der erlaubten Lizenzen finden Sie ebenfalls unter dem oben genannten Link zur FOSS
License Exception. Falls Sie die MySQL-Bibliotheken lediglich verwenden und nicht
selbst anpassen möchten, können Sie sie selbstverständlich einsetzen, ohne Ihre Soft-
ware unter eine andere Lizenz stellen zu müssen.
Innovationen und aktuelle Entwicklungen
Zusätzlich zu den Standardprodukten bietet MySQL Zugang zu innovativen Features,
die sich noch in der frühen Testphase befinden. Diese speziellen Versionen und Plug-
ins finden Sie unter den MySQL Labs17. Dabei handelt es sich um teilweise sehr inte-
ressante Features und Projekte, die aber noch nicht reif für den Einsatz in kritischen
Systemen sind. Daher finden Sie auf diesen Seiten auch immer den ernstgemeinten
Hinweis »Warning! For testing purposes only!«. Zu den neuesten Entwicklungen zäh-
len beispielsweise ein HTTP-Plugin, mit dem Sie MySQL auch per REST-Schnittstelle
ansprechen können, oder auch verschiedene JSON-Funktionen und Konnektoren.
Wir haben uns aus mehreren Gründen dagegen entschieden, diese spannenden
Funktionen auch in dieses Buch aufzunehmen. Zum einen sind diese Features teils
sehr speziell und benötigen umfangreiche Vorarbeiten, die den Umfang dieses
Buches sprengen würden. Zum anderen sind diese Features eben oft noch nicht aus-
gereift und ändern sich dementsprechend oft. Trotzdem lohnt sich für interessierte
Leser der Besuch von MySQL Labs und auch der einschlägigen Blogs, wie beispiels-
weise dem High Availability Blog18.
Forks und verwandte Projekte
Steht der Quelltext einer Software unter einer Open-Source-Lizenz wie der GPL, kann
dieser Code von Interessierten frei eingesehen, studiert und verändert werden. Fea-
tures, die im Original nicht vorgesehen waren, können so eingearbeitet werden, oder
eine Software wird gänzlich an die speziellen Bedürfnisse eines Einsatzgebietes ange-
passt. Manchmal gehen diese Adaptionen so weit, dass sie sich vom Ausgangscode
derart weiterentwickelt haben, um als eigenes Projekt angesehen werden zu können.
Eine solche Abspaltung wird als Fork (englisch für »Gabel«, vergleiche »Gabelung«)
bezeichnet. Einer der bekanntesten MySQL-Forks ist MariaDB19. Während der Un-
16 http://www.mysql.de/about/legal/licensing/foss-exception/
17 http://labs.mysql.com/
18 http://www.mysqlhighavailability.com/
19 http://www.mariadb.org/
3753.book Seite 49 Donnerstag, 30. April 2015 1:08 13
1 Datenbanken – eine allgemeine Einleitung
50
sicherheiten nach Oracles Übernahme von MySQL entschied sich Monty Widenius,
eine Version abzuspalten, um sie getrennt von MySQL voranzutreiben. Seiner
Namensgebung blieb er treu und taufte seine neue Abspaltung von MySQL nach sei-
ner zweiten Tochter Maria20. Dieser Fork ist vollständig kompatibel mit MySQL, kann
ohne Anpassungen eingesetzt werden und bietet weitere Features, auf die wir in die-
sem Buch aus Platzgründen jedoch nicht eingehen können. Neben MariaDB gibt es
weitere Forks wie etwa Drizzle21 oder Percona Server22.
1.3 Zusammenfassung
In dieser Einführung haben Sie die Grundlagen von Datenbanksystemen und deren
Entwicklung kennengelernt. Im Laufe der rasanten Entwicklung der Datenbanktech-
nologie kamen verschiedene Datenmodelle zum Einsatz, die sich mehr oder weniger
bewährt haben. Das relationale Datenbankmodell konnte sich aufgrund seiner prak-
tischen Eigenschaften weitgehend durchsetzen. Details über dieses Modell erfahren
Sie im nächsten Kapitel.
Für Datenbanksysteme gibt es eine Vielzahl von Einsatzszenarien, die wir kurz vorge-
stellt haben. MySQL ist für alle diese Aufgaben sehr gut geeignet, da es ein sehr viel-
seitiges relationales Datenbankmanagementsystem ist. Im restlichen Kapitel haben
Sie über die Entstehungsgeschichte von MySQL gelesen und eine Einführung in die
Welt der Open-Source-Software erhalten. Im folgenden Kapitel geht es nun mit dem
Schnellstart-Tutorial weiter, in dem Sie »hands on« mit MySQL arbeiten werden.
20 https://kb.askmonty.org/en/why-is-the-project-called-mariadb/
21 http://www.drizzle.org/
22 http://www.percona.com/software/percona-server
3753.book Seite 50 Donnerstag, 30. April 2015 1:08 13
51
2
Kapitel 2
Datenbankmodellierung
Dieses Kapitel behandelt die Grundlagen der Datenbankmodellierung.
Sie lernen, wie Sie jene Anforderungen, die Sie an Ihre Datenbank-
anwendung 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 – nachvollzie-
hen 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 umgewan-
delt werden. Unter diesem Vorgang der Abstraktion versteht man das Modellieren
eines Prozesses der realen Welt mit Hilfe eines Datenbankenmodells. Ein solcher Aus-
schnitt der Umwelt ist beispielsweise die Adress- und Mitgliedsverwaltung eines Ver-
eins, das Management eines Unternehmens oder das Betreiben eines Newsportals im
3753.book Seite 51 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
52
Web. Der Datenbankentwurf beschäftigt sich also mit der Frage, wie ein Ausschnitt
der Wirklichkeit in einer Datenbank abgebildet werden kann.
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 Verallgemeine-
rung und dient der Vereinfachung komplexer Sachverhalte. Der Datenbankentwurf
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 darüber sammeln, welche Anforderungen genau Ihr Datenbankma-
nagementsystem umsetzen muss. Innerhalb dieses Prozesses erstellen Sie ein struk-
turiertes 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,
nachvollziehbar und vollständig sind. Ob Sie dabei spezielle Tools, Mindmaps, Kartei-
3753.book Seite 52 Donnerstag, 30. April 2015 1:08 13
2.1 Einführung in den Datenbankentwurf
53
2
karten 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 Kapi-
tel erinnern, dann muss ein Datenbanksystem die Anforderungen der Vereinsverwal-
tung unterstützen. Dazu müssen die notwendigen Objekte abstrahiert werden. In
dem Beispiel handelt es sich bei diesen Objekten um die Daten der Vereinsmitglieder.
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 Mitglieds-
daten 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 darzustellen. Die im vorherigen Schritt gewonnenen Informationen ü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 irrelevant, 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 standar-
disiertes Datenbankmodell.
Um eine einheitliche Beschreibung der gewonnenen Anforderungen zu ermögli-
chen, werden unterschiedliche Modellierungsverfahren eingesetzt. Diese Verfah-
ren erlauben eine genauere Beschreibung der mit Hilfe des Datenbanksystems zu
lösenden Aufgaben. Das bekannteste dieser Modelle ist sicherlich das Entity-Relati-
onship-Modell (ER-Modell), das wir im Laufe des Kapitels noch detailliert beschrei-
ben werden.
3753.book Seite 53 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
54
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,
welche Funktion das betreffende Objekt erfüllt. Vermeiden Sie auf jeden Fall nichts-
sagende Bezeichnungen wie »tabelle1« oder »testDB«, denn Sie werden in wenigen
Wochen nicht mehr wissen, was die betreffende Tabelle bzw. Datenbank ursprüng-
lich 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 eng-
lische oder deutsche Sprache wählen möchten. Mischen Sie aber keine Sprachen,
denn das führt zu Missverständnissen und ist verwirrend. Apropos Kommentare:
Verwenden Sie Kommentare so oft und ausführlich wie möglich!
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 Daten-
modell, das Gegenstände aus der realen Welt in Tabellen und Beziehungen zwi-
schen Tabellen, sogenannte Relationen, übersetzt. Hier erfolgt also die Übersetzung
des unabhängigen ER-Modells in jene Sprache, die von MySQL verstanden wird. Die-
ser 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-
bankenmodell«.
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
3753.book Seite 54 Donnerstag, 30. April 2015 1:08 13
2.1 Einführung in den Datenbankentwurf
55
2
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, »Abfrageoptimierung«.
2.1.5 Der Datenbankentwurf im Überblick
Die vier Phasen des Datenbankentwurfs lauten:
1. Anforderungsanalyse
2. konzeptioneller Entwurf
3. logischer Entwurf
4. physischer Entwurf
In der Anforderungsanalyse wird genau untersucht, welches Problem mit einem
Datenbankensystem gelöst werden soll. Man erfasst, welche Daten gespeichert wer-
den müssen, und legt die Beziehungen der Daten fest. In diesem Buch werden Sie
später ein Beispiel zur Flugdatenverwaltung kennenlernen. Die Anforderungsana-
lyse dazu umfasst beispielsweise die Frage, welche Details der Flüge, Flugzeuge, Mit-
arbeiter oder Flughäfen gespeichert werden müssen und wie genau diese Daten
aussehen. Im konzeptionellen Datenbankentwurf kommt bereits eine eigene Spra-
che ins Spiel: Das Entity-Relationship-Modell sorgt für eine einheitliche grafische
Beschreibung der Daten und ihrer Beziehungen. In diesem Schritt entsteht ein
Schaubild der Flughafendatenbank, das eine Übersicht der zu verwaltenden Daten
schafft. Es ist sehr wichtig, dass alle beteiligten Personen unmissverständlich kom-
munizieren können, wozu sich Bilder bekanntlich am besten eignen. Im logischen
Entwurf wird das vorerst abstrakt gehaltene Modell mit MySQL realisiert. In diesem
Schritt legen Sie die Tabellen für Flugzeuge, Mitarbeiter und vieles mehr an. Im vier-
ten und letzten Schritt erfolgt das Feintuning, damit Ihre Abfragen möglichst schnell
Ergebnisse liefern.
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ön-
nen. Je weiter der Entwicklungsprozess jedoch fortgeschritten ist, desto aufwendiger
werden diese Änderungen. Daher sollten Sie jeder Phase besondere Aufmerksamkeit
widmen, um zeit- und kostenintensive Überarbeitungen zu vermeiden. Natürlich
müssen Sie insbesondere bei der Anforderungsanalyse und beim konzeptionellen
Design intensive Rücksprache mit Ihrem Team halten, damit Sie alle Aspekte berück-
sichtigen können, die Ihnen selbst vielleicht verborgen sind. In Abbildung 2.1 sehen
Sie diese vier Phasen schematisch dargestellt.
3753.book Seite 55 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
56
Abbildung 2.1 Die vier Entwurfsphasen
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 gespei-
Anforderungsanalyse
Konzeptioneller Entwurf
Logischer Entwurf
Physischer Entwurf
3753.book Seite 56 Donnerstag, 30. April 2015 1:08 13
2.2 Ein konkretes Beispiel: Flughafenverwaltung
57
2
chert werden und wie die verschiedenen Elemente eines Modells zueinander in Bezie-
hung 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 – also 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 und optimieren zu können, muss in Ihrer Datenbank ein vollständiger Flug-
plan vorhanden sein. Auch er wird mit Ihrem System verwaltet. Die Flüge werden
ebenfalls 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 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 Flug-
platz 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 Daten-
banksystem. 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.
3753.book Seite 57 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
58
2.3 Das relationale Datenbankenmodell
Das relationale Datenbankmodell ist die theoretische Grundlage sehr vieler aktueller
Datenbankmanagementsysteme, und es wird auch bei MySQL eingesetzt. Das rela-
tionale 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 Abfrageoperatio-
nen auf beweisbare Operationen der Mengenlehre zurückführen und liefern daher
korrekte Ergebnisse. Da detaillierte Kenntnisse des mathematischen Formalismus
jedoch nicht zwingend notwendig sind, um gute Datenbankdesigns zu entwickeln,
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 Excel oder Apache 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
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 Datenbankmanagement-
system 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 dersel-
ben 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 Beispiel in Tabelle 2.1 für eine Tabelle im Flughafenszenario. 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 Tabel-
lenüberschriften, die gleichzeitig die Spaltennamen darstellen. Jede dieser Spalten
steht für eine Eigenschaft des abzubildenden Objekts – in diesem Fall ist dieses
Objekt ein Passagier. Diese Eigenschaften werden auch als Attribute bezeichnet, und
sie fassen jene Informationen über konkrete Passagiere zusammen, die für die Ver-
waltung des Flughafens notwendig sind. In diesem Ausschnitt sind diese Attribute
3753.book Seite 58 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
59
2
die eindeutige Passnummer, der Vor- und der Nachname des Passagiers sowie des-
sen 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
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, also 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
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
3753.book Seite 59 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
60
Beispiel um die Verbindung mehrerer Tabellen (Kreuzprodukt), um Sortierreihenfol-
gen 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 ...
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 Sie 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 später im Tutorial noch sehen werden. Dieser Mechanismus wird sehr häufig ein-
gesetzt, da er leicht zu handhaben ist und von MySQL unterstützt wird. Generell
3753.book Seite 60 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
61
2
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, »Das relationale Datenbanken-
modell«, 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 Abfragen an das definierte
Datenbankenschema gestellt werden. Sie stellt verschiedenste 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 Mengen und Teilmengen. Sie
können sich eine Tabelle auch als Menge im mathematischen Sinn vorstellen,
deren Elemente die einzelnen Datensätze sind. Auf diese Menge werden verschie-
dene Operationen angewendet, die als Ergebnis ebenfalls eine Menge zurücklie-
fern. Diese Ergebnismengen sind wiederum Ausschnitte oder Kombinationen der
Ausgangstabellen. Der folgende Abschnitt soll einen kurzen Überblick über die
Materie der relationalen Algebra vermitteln.
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, Vorname und Nachname. 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
3753.book Seite 61 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
62
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
Datensatz nämlich nicht nur durch diese drei Attribute identifiziert werden, sondern
es ist viel weniger notwendig. Selbst eine Kombination aus Passnummer und Vor-
name oder auch eine aus 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 Menschen
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 Beispiel
eine Adressverwaltung planen, wie sie für eine Kundenverwaltung eingesetzt 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 Eindeu-
tigkeit ist, wie wir bereits erörtert haben, jedoch notwendig, um die Datensätze zuver-
lässig voneinander unterscheiden zu können. In diesen Fällen können Sie sich mit
einem künstlichen Primärschlüssel behelfen, den das System selbständig und auto-
matisch 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, indem neu angelegte Daten-
sätze fortlaufend durchnummeriert werden. Dadurch stellt das System sicher, dass
jeder Datensatz anhand dieses künstlichen Schlüssels identifiziert 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.
3753.book Seite 62 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
63
2
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 Spal-
ten aus der Tabelle auszulesen, beschränken Sie sich auf den Vor- und den Nach-
namen, das Geburtsdatum sowie die Anschrift der Kunden. Der Übersichtlichkeit
halber fassen 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
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 Abfrage rele-
vant sind. Die Projektion blendet also nicht benötigte Spalten einfach aus (siehe
Tabelle 2.2).
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
3753.book Seite 63 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
64
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-
ben , dem kleinen Sigma, gekennzeichnet, darauf folgen eine Liste der Selektions-
bedingungen und, in runden Klammern, die Angabe der Tabelle mit den Daten:
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 Abfrage wie folgt formulieren:
Geburtsdatum > Juni ( Vorname, Nachname, Geburtsdatum, Anschrift (Passagierliste))
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
Ergebnismenge.
3753.book Seite 64 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
65
2
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 Abfrage auch umgekehrt gestellt werden, indem zuerst die Selektion durchge-
führt wird. In diesem Beispiel wird demnach zuerst die Abfrage 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-
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).
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
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
3753.book Seite 65 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
66
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
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.
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
Tabelle 2.8 Buchungstabelle
3753.book Seite 66 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
67
2
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: . Die
Verbundoperation verbindet jene Zeilen miteinander, die denselben Attributwert in
beiden Tabellen in der entsprechenden Spalte haben. Die Schreibweise für diese Ope-
ration lautet:
Tabelle A A.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 P.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 zusammenge-
hören, deren Passnummern identisch sind.
Mathematisch gesehen ist ein Join das Kreuzprodukt der zwei Tabellen. Dabei werden
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ül-
len. Dies zeigt die Kombination beider Tabellen, wobei die zusammengehörenden
P12345123 1111 17A 99.0
P54321123 3333 33C 99.0
Passnummer Flugnummer Sitzplatz Preis
Tabelle 2.8 Buchungstabelle (Forts.)
3753.book Seite 67 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
68
Zeilen nun in einer einzigen Zeile der Ergebnistabelle bzw. -menge zusammengefasst
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 P.Passnummer = B.Passnummer Buchungen B)
Das Zwischenergebnis dieses Joins (gekennzeichnet durch das =) wird in der Formel
mit »PassagierBuchung« bezeichnet und liefert die folgende 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 PB.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
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
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
3753.book Seite 68 Donnerstag, 30. April 2015 1:08 13
2.3 Das relationale Datenbankenmodell
69
2
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)
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
P.Passnummer = B.Passnummer Buchungen B)) (PB.Flugnummer = F.Flugnummer Flug F))
Es gibt verschiedene Arten von Joins bzw. Verbundoperationen, mit denen Sie Tabel-
len verbinden können. Aus Platzgründen konnten wir in diesem Buch nicht detail-
lierter auf die verschiedenen Join-Varianten eingehen.
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
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«
Vorname Nachname Ziel
Ada Betha VIE
Edgar Zetmann VIE
Tabelle 2.12 Das Ergebnis
3753.book Seite 69 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
70
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 Abfrageoptimierung machen, werden Sie
das sich 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
Abschnitt 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-
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 in späteren Abschnitten noch detaillierter kennenlernen werden.
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-Relationship-
Modell (ER-Modell), das bereits in den 1970er Jahren erfunden und später immer wie-
der verfeinert wurde. Es handelt sich dabei um eine grafische Beschreibung der Bezie-
hungen zwischen den Tabellen einer Datenbank. Es besteht grundlegend aus den
drei genannten Elementen:
� Entitäten (Objekte bzw. Tabellen)
� Beziehungen (zwischen Tabellen über ihre Attribute)
� Attribute (Eigenschaften bzw. Spalten)
3753.book Seite 70 Donnerstag, 30. April 2015 1:08 13
2.4 Datenbankdesign
71
2
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 oftmals mit Hilfe von Rauten dargestellt, die
diese Klassen miteinander verbinden. Zusätzlich gibt es Attribute, die sowohl die
Entitätsklassen 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.
Daher ist es ein guter Rat, Flüge als Einheit zusammenzufassen. Ein Flug besteht aus
einer Reihe von Eigenschaften bzw. Daten: Flugnummer, Fluglinie, Abflugzeit, An-
kunftszeit und weiteren Informationen. Die Tabelle »flug« wird mit einem ER-Dia-
gramm dargestellt (siehe Abbildung 2.2). Die Attributnamen sind in diesem Beispiel
schon an ein reales Datenbankdesign angepasst.
Abbildung 2.2 ER-Diagramm der Tabelle »flug«
3753.book Seite 71 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
72
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
Bezeichnung ist im Titel des Kästchens dargestellt und dient auch der zugrunde-
liegenden Tabelle als Bezeichner.
Unterhalb der Titelleiste sind alle Attribute aufgelistet, die einen Flug beschreiben. In
diesem Beispiel zählt 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 Attribut-
bezeichnung 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 ein-
zelne Flug, der später in dieser Tabelle gespeichert werden soll, durch ihn eindeutig
unterschieden 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 Wichtigkeit 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
65.535 sind, in sich auf. INT hingegen kann Zahlen bis zu 4.294.967.295 speichern.
SMALLINT hat daher einen kleineren Wertebereich und benötigt somit auch weniger
Speicherplatz. Genauso verhält es sich mit der spiegelbildlichen Spalte nach der
Tabelle »flug«. Diese beiden Attribute stellen Beziehungen zu dem Abflugs- bzw.
3753.book Seite 72 Donnerstag, 30. April 2015 1:08 13
2.4 Datenbankdesign
73
2
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 Bild sagt mehr als tausend Worte
Ein ER-Diagramm enthält viele weitere Informationen über die jeweiligen Entitäten,
die Sie übersichtlich ablesen können. So erkennen Sie in Abbildung 2.2 beispielsweise
anhand des gelben Schlüsselsymbols (1) auf einen Blick, dass die Spalte flug_id der
Primärschlüssel ist. Fremdschlüssel, die Teil des Primärschlüssels sind, werden mit
einem roten Schlüsselsymbol kenntlich gemacht. Des Weiteren sehen Sie am blauen
Rautensymbol (2), dass es sich um gewöhnliche Spaltenelemente handelt. Rote Rau-
ten (3) kennzeichnen Fremdschlüssel auf andere Tabellen. Ist die Raute ausgefüllt,
so wie in Abbildung 2.2 an Ziffer 2, dann muss dieser Wert immer vorhanden, bzw.
gesetzt sein. Sogenannte NULL-Werte sind also nicht erlaubt. Ist die Raute nicht aus-
gefüllt, sondern nur umrandet (4), dann darf dieser Wert auch leer gelassen werden;
in diesem Fall kann das Feld den Wert NULL annehmen. Die genaue Bedeutung dieses
Konzepts lernen Sie noch im Detail in Abschnitt 3.5.2, »Tabellen anlegen, Daten ein-
fügen und löschen«, kennen (im Hinweiskasten »Was es mit NULL auf sich hat«). Ein
Beispiel für einen solchen optionalen Wert sehen Sie in Abbildung 2.3, wo der Sitz-
platz nicht immer festgelegt sein muss. Details zur Bedeutung der hier kurz angeris-
senen Konzepte erfahren Sie im Laufe der folgenden Kapitel.
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 Passagiere diese Flüge buchen können. Diese
einfache Aussage liefert gleich Rückschluss auf zwei Objekte, die jeweils in einer eige-
nen Entität zusammengefasst werden können: Passagiere und Buchungen. Abbil-
dung 2.3 zeigt die Tabelle der Buchungen, die nach demselben Prinzip angelegt wird:
3753.book Seite 73 Donnerstag, 30. April 2015 1:08 13
2 Datenbankmodellierung
74
Zuerst identifizieren Sie das konkrete Objekt, das Sie modellieren wollen. In diesem
Fall ist das die Flugbuchung. Als Nächstes legen Sie die Attribute fest, deren Werte Sie
innerhalb dieser Tabelle speichern wollen. Dazu zählen in diesem Szenario die fol-
genden 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 automa-
tisch durch Hochzählen vergibt.
Abbildung 2.3 ER-Diagramm der Buchungstabelle
Mit diesen fünf Attributen kann festgehalten werden, für welchen Flug eine Buchung
erfolgt ist. Den Attributen ist wieder je ein Datentyp zugeordnet. Die Buchungsiden-
tifikationsnummer (buchung_id), die Flugidentifikationsnummer (flug_id) und die
Passagieridentifikationsnummer (passagier_id) sind vom Datentyp INT, sie enthal-
ten demnach Ganzzahlenwerte. Die Spalte sitzplatz ist vom Typ CHAR, also ein
String-Typ, der in diesem Beispiel vier Stellen in sich aufnehmen kann; die Anzahl
der Stellen wird in Klammern nach der Datentypdefinition angezeigt. Das vierte
Attribut, 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, weswegen 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
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
zwischen den beiden Tabellen an, der gedanklich bereits getroffen wurde: Eine Flug-
3753.book Seite 74 Donnerstag, 30. April 2015 1:08 13
2.4 Datenbankdesign
75
2
buchung 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 zugeord-
net wird. Hier bezieht sich jedes Element einer Tabelle auf ein Element einer anderen
Tabelle und umgekehrt. Im mathematischen Sinne entspricht diese Beziehung einer
bijektiven Abbildung, die jedem Attribut der Ursprungstabelle genau ein Attribut der
Zieltabelle zuordnet und umgekehrt. Im Allgemeinen tritt dieser Beziehungstyp nur
sehr selten auf. Das hat den Grund, dass 1:1-Beziehungen nur dann notwendig sind,
wenn eine Tabelle mit sehr vielen Attributen in zwei Teiltabellen unterteilt werden
soll. Anderenfalls könnten alle Attribute zweier Tabellen, die in diesem 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 umgekehrt. 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 Ab-
schnitt 9.4, »Partitionierung«. Der Vollständigkeit halber stellen wir die 1:1-Beziehung
im Folgenden trotz ihrer relativ geringen Bedeutung kurz vor.
Die Tabelle mit den Passagierdaten hat viele Attribute, für die Abfertigung werden je-
doch nur wenige Details eines Passagiers benötigt. Dazu zählen die Passnummer, der
Vor- und der Nachname eines Passagiers. Daher ist es sinnvoll, die Passagierdaten
aufzuteilen, da beispielsweise beim Boarding nur die Stammdaten benötigt werden,
nicht jedoch die weiteren Details. Eine Tabelle »passagier« enthält durch diese Parti-
tionierung die grundlegenden Daten der Passagiere, die bei jedem Buchungs- und
Boardingvorgang benötigt werden. Eine zweite Tabelle, »passagierdetails«, enthält
die weiteren Daten, die nur während des Bestellvorgangs notwendig sind. Dazu zäh-
3753.book Seite 75 Donnerstag, 30. April 2015 1:08 13
261
7
Kapitel 7
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 –
dem Server-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
3753.book Seite 261 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
262
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 Umgebungs-
variablen 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 ihrem jeweiligen
Namen 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 legen Sie mit mysqladmin schnell und unkompliziert Datenbanken
an, 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 erstellt MySQL sofort eine neue und leere Datenbank. 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.
1 http://dev.mysql.com/downloads/workbench/5.2.html und http://dev.mysql.com/downloads/
gui-tools/5.0.html
3753.book Seite 262 Donnerstag, 30. April 2015 1:08 13
7.2 Der Name ist Programm: »mysqladmin«
263
7
Any 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
3753.book Seite 263 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
264
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 -u root -p
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 Leeren
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 Kom-
mandozeile eingegeben werden muss.
Seit der Version 5.6 können Sie Passwörter auch interaktiv ändern, damit keine sen-
siblen Daten in der History der Kommandozeile gespeichert werden. Verwenden Sie
dazu einfach den Befehl aus Listing 7.8, und lassen Sie das neue Passwort einfach weg.
3753.book Seite 264 Donnerstag, 30. April 2015 1:08 13
7.2 Der Name ist Programm: »mysqladmin«
265
7
Das System wird Sie auffordern, ein neues Passwort einzugeben, das nicht am Bild-
schirm 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 den ALTER USER-Befehl aus Listing 7.9.
Dieser Befehl wurde in der Version 5.7.6 neu eingeführt und erlaubt es, Benutzer-
daten wie beispielsweise Passwörter zu ändern. Die Variante für ältere Versionen von
MySQL stellen wir kurz in Abschnitt 6.2, »Usermanagement«, vor.
mysql> ALTER USER 'wolfgang'@'localhost' IDENTIFIED BY 's3HrGeHE!m';
Listing 7.9 Das Passwort eines Benutzers ändern
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
ALTER USER-Klausel angeben. Im obigen Beispiel wird das Kennwort des Users »wolf-
gang« auf den neuen Wert s3HrGeHE!m gesetzt. Nachdem Sie dieses Passwort geändert
haben, werden die Benutzerrechte neu geladen. Sie können die Berechtigungen auch
manuell neu laden. Innerhalb des Clients verwenden Sie FLUSH PRIVILEGES, außerhalb
des Clients bewerkstelligen Sie das mit dem Befehl aus Listing 7.10:
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.
Für MySQL-Versionen vor 5.7.6 genügte es, das UPDATE-Statement, wie es im Beispiel
in Listing 7.11 dargestellt ist, einzusetzen:
mysql> UPDATE mysql.user SET-> Password=PASSWORD('geheim')-> WHERE User='testuser';
Listing 7.11 Ein Passwort im Client neu setzen
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
3753.book Seite 265 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
266
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.12 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.12 MySQL anhalten
Daraufhin wird der Serverprozess beendet. Sie können den Server nun erneut mit der
Option --skip-grant-tables starten, siehe Listing 7.13:
bash# mysqld_safe --skip-grant-tables &
Listing 7.13 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-networking starten. Den
Befehl dazu sehen Sie in Listing 7.14.
bash# mysqld_safe --skip-grant-tables --skip-networking &
Listing 7.14 Starten des MySQL-Dienstes ohne Passwort und ohne Netzwerkunterstützung
Verwenden Sie nun den Befehl aus Listing 7.15, um sich ohne Passwortabfrage vom
lokalen Rechner aus anzumelden:
bash# mysql -u root
Listing 7.15 Wie gewohnt anmelden
Beachten Sie, dass hier der bekannte Parameter -p nicht gesetzt wird, da Sie kein Pass-
wort angeben werden. Sie landen im MySQL-Client und verfügen dort über alle Privi-
legien. 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 be-
kannte ALTER USER-Befehl zum Einsatz:
mysql> ALTER USER 'wolfgang'@'localhost' IDENTIFIED BY 's3HrGeHE!m';
Listing 7.16 Das Passwort neu setzen
Als Nächstes müssen Sie die Berechtigungstabelle neu laden. Verwenden Sie dazu
den Befehl aus Listing 7.17:
3753.book Seite 266 Donnerstag, 30. April 2015 1:08 13
7.2 Der Name ist Programm: »mysqladmin«
267
7
mysql> FLUSH PRIVILEGES;
Listing 7.17 Die Berechtigungstabelle neu laden
Nach diesem Schritt sollten Sie sich aus dem Client abmelden und den MySQL-Ser-
ver, der mit --skip-grant-tables manuell gestartet wurde, stoppen. Verwenden Sie
für diese Aufgabe wieder den Befehl aus Listing 7.18:
bash# /etc/init.d/mysql stop
Listing 7.18 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.19:
bash# /etc/init.d/mysql start
Listing 7.19 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.20:
bash# mysqladmin -u root -p pingmysqld is alive
Listing 7.20 Ein Lebenszeichen
In Produktivumgebungen sollten Sie selbstverständlich ein automatisches Überwa-
chungstool wie Nagios2 einsetzen. Solche Programme laufen selbständig und benach-
richtigen 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.
2 http://www.nagios.org/
3753.book Seite 267 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
268
Einen kurzen Überblick über den aktuellen Status holen Sie mit dem in Listing 7.21
dargestellten Aufruf ein:
bash# mysqladmin status -u root -pEnter password:Uptime: 1195 Threads: 1 Questions: 10 Slow queries: 0 Opens: 33Flush tables: 1 Open tables: 26 Queries per second avg: 0.8
Listing 7.21 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 Abfragen und
Tabellen. Dazu zählen auch die Anzahl der abgearbeiteten Anfragen (Questions) und
insbesondere auffällige, das bedeutet langsame Abfragen (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 Abfragen 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 Abfragen 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
Befehl aus Listing 7.22:
bash# mysqladmin extended-status -u root -p
Listing 7.22 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.23.
+-----------------------------------+----------+| Variable_name | Value |+-----------------------------------+----------+| Aborted_clients | 2 || Aborted_connects | 0 || Bytes_received | 464524 || Bytes_sent | 9194415 |
3753.book Seite 268 Donnerstag, 30. April 2015 1:08 13
7.2 Der Name ist Programm: »mysqladmin«
269
7
.
.
.| Open_files | 128 || 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.23 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 (siehe Listing 7.24). Sie erhalten jene Zeile mit der angegebenen Variab-
len (hier Opened_tables) zurück.
bash# mysqladmin extended-status -u root -p | grep Opened_tables| Opened_tables | 1735 |
Listing 7.24 Eine spezielle Variable herausfiltern
Wenn Sie sich für die aktuell laufenden Queries und Verbindungen interessieren,
dann benutzen Sie den Befehl aus Listing 7.25:
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.25 Aktive Prozesse anzeigen
3753.book Seite 269 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
270
Sie erhalten prompt eine Auflistung der aktuellen Abfragen. Mit dieser praktischen
Methode können Sie beispielsweise sehr lange dauernde Abfragen identifizieren und
entsprechend darauf reagieren. So brechen Sie beispielsweise mit dem Befehl KILL
eine Abfrage, die zu lange läuft, ab, wie in Listing 7.26 gezeigt:
mysql> KILL QUERY 260;
Listing 7.26 Eine Abfrage abbrechen
Geben Sie bei diesem Befehl die Id der betreffenden Abfrage an, um diese zu been-
den. Sie bekommen diese Id mit Hilfe des Befehls aus Listing 7.25 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.27:
mysql> KILL CONNECTION 1;
Listing 7.27 Eine Verbindung trennen
Wenn Sie über die Berechtigung SUPER verfügen, können Sie alle gelisteten Abfragen
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 wir jedoch 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
3753.book Seite 270 Donnerstag, 30. April 2015 1:08 13
7.3 Daten importieren und exportieren
271
7
Einlesen erfolgt sehr schnell, weswegen dieser Befehl auch für sehr große Daten-
mengen 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 Daten-
satz, sofern einzeln angegeben, auch eine eigene Abfrage an den Server gestellt 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.28,
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.28 Eine CSV-Datei laden
Der in Listing 7.28 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
Newline-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
der in Listing 7.29 dargestellte Fehler angezeigt:
ERROR 13 (HY000): Can't get stat of '/tmp/daten.csv' (Errcode: 2)
Listing 7.29 Die Linux-Berechtigungen sind inkorrekt.
Ein weiterer Fehler, der ebenfalls häufig auftritt, ist in Listing 7.30 dargestellt. Hier
wurde die Datei nicht gefunden. Überprüfen Sie daher den Pfad der Datei.
3753.book Seite 271 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
272
ERROR 29 (HY000): File '/tmp/daten.csv' not found (Errcode: 13)
Listing 7.30 Die Datei wird nicht gefunden.
Beachten Sie, dass in diesem Beispiel die Dateien, die Sie laden möchten, auf dem Ser-
ver liegen müssen. Allgemein sollten Sie am besten absolute Pfade angeben, damit
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, sehen Sie
in Listing 7.37. Natürlich müssen Sie auch bei diesem Importvorgang bereits festge-
legte Constraints berücksichtigen. Andernfalls kann beispielsweise die Fehlermel-
dung aus Listing 7.31 auftreten.
ERROR 1452 (23000): Cannot add or update a child row: a foreignkey constraint fails
Listing 7.31 Eine Fremdschlüsselbeziehung wird verletzt.
Dieser Fehler kann dann auftreten, wenn Tabellen untereinander Fremdschlüssel-
beziehungen 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.32 anzeigen lassen:
mysql> SHOW CREATE TABLE flug;
Listing 7.32 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.33 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.33 Fremdschlüssel abfragen
Durch diese SELECT-Abfrage in Listing 7.33 bekommen Sie eine Liste aller Fremd-
schlüssel der Tabelle »flug« zurück. Damit Sie die Tabellen nicht manuell eintippen
3753.book Seite 272 Donnerstag, 30. April 2015 1:08 13
7.3 Daten importieren und exportieren
273
7
müssen, hängt dieser Befehl mittels CONCAT die Tabellen- und Spaltennamen aneinan-
der, 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.34 dargestellt.
+-------------------+------------------------+| 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.34 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.
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 entsprechend
auf einen passenden Wert. Den Befehl dazu finden Sie in Abschnitt 6.3.4, »Servervari-
ablen setzen und ändern«.
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 Pro-
gramm 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
3753.book Seite 273 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
274
eine Excel-Tabelle eingetragen und als CSV-File exportiert. In Listing 7.35 sehen Sie
einen Ausschnitt der CSV-Datei:
87; 748654;90A;19800;88; 748654;90B;8123;89; 748654;90C;33122;
Listing 7.35 Die CSV-Datei mit den glücklichen Gewinnern
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.36 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.36 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.37 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.37 Datenimport mit »mysqlimport«
3753.book Seite 274 Donnerstag, 30. April 2015 1:08 13
7.3 Daten importieren und exportieren
275
7
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.
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.38:
87; 748654;90A;sehr;19800;88; 748654;90B;wenig;8123;89; 748654;90C;euphorisch;33122;
Listing 7.38 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.39 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.39 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 Daten-
3753.book Seite 275 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
276
berechtigungen achten. Wenn Sie jedoch local angeben, werden die Dateisystem-
berechtigungen 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
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.40. 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.40 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 – Abfragen 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-Abfrage 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 OUT-
FILE zusätzlich angeben. Die Abfrage in Listing 7.41 zeigt, wie Sie alle Datensätze der
3753.book Seite 276 Donnerstag, 30. April 2015 1:08 13
7.3 Daten importieren und exportieren
277
7
Tabelle »passagier« in eine Datei im tmp-Verzeichnis Ihres Datenbankenservers spei-
chern. Auch hier haben wir einen absoluten Pfad verwendet, da dieser eindeutig ist
und auch auf Dateien außerhalb des Datenbanken-Installationsverzeichnisses ver-
weisen kann.
mysql> SELECT * INTO OUTFILE-> '/tmp/allePassagiere.csv'-> FIELDS TERMINATED BY ';'-> LINES TERMINATED BY '\n'-> FROM passagier;
Listing 7.41 Daten exportieren mit INTO OUTFILE
Beachten Sie, dass Sie sowohl auf Datenbankenebene über die Berechtigung für
SELECT-Abfragen als auch über die Berechtigung FILE verfügen müssen, damit Sie die-
sen Befehl erfolgreich ausführen können. Des Weiteren müssen Sie darauf achten,
dass der Linux-Benutzer, unter dem der MySQL-Server läuft, über die notwendigen
Dateisystemberechtigungen im angeführten Verzeichnis verfügen muss, um eine
Datei anzulegen. Sie können aus Sicherheitsgründen keine Dateien mit diesem
Befehl überschreiben, da ein böswilliger oder unbedarfter Anwender, der über das
FILE-Privileg verfügt, sonst für MySQL wichtige Dateien überschreiben könnte. Falls
die zu exportierende Datei schon existiert, weist MySQL Sie mit einer Fehlermeldung
wie in Listing 7.42 darauf hin:
ERROR 1086 (HY000): File '/tmp/allePassagiere.csv' already exists
Listing 7.42 Fehlermeldung beim versuchten Überschreiben der Exportdatei
Die mit dieser Methode angelegte Datei ist für alle Benutzer Ihres Linux-Systems les-
und beschreibbar und daher für sensible Daten absolut nicht geeignet. Generell soll-
ten Sie diese Methode nicht für Backups einsetzen, da CSV-Files keine Informationen
über die ursprüngliche Struktur der Tabelle und über die eingesetzten Datentypen
aufweisen. Für Backups gibt es ein viel geeigneteres Tool, das Sie im folgenden
Abschnitt kennenlernen werden.
Wie wir bereits erwähnt haben, werden die zu exportierenden Daten in einer Datei
am Server abgespeichert. Damit Sie oder andere Anwender diese Datei lokal – bei-
spielsweise mit einem Tabellenkalkulationsprogramm – weiterverarbeiten können,
benötigen Sie Zugriff auf das Dateisystem des Datenbankservers. Das ist vermutlich
nicht immer möglich, da der Zugriff aus guten Gründen oft auf einen kleinen Perso-
nenkreis eingeschränkt ist. Um dennoch die Daten weiterverarbeiten zu können, ist
es möglich, die SELECT-Abfrage vom Client aus an den Server zu stellen und das Ergeb-
nis lokal in eine Datei umzuleiten. Verwenden Sie dazu den Befehl aus Listing 7.43,
indem Sie ihn in der Kommandozeile eingeben:
3753.book Seite 277 Donnerstag, 30. April 2015 1:08 13
7 MySQL administrieren
278
bash# mysql -e "SELECT * FROM passagier"\--default-character-set=utf8\-u root -p FlughafenDB > allePassagiere.txt
Listing 7.43 Exportergebnis clientseitig speichern
Durch diesen Befehl wird das Ergebnis in die Datei allePassagiere.txt umgeleitet.
Beachten Sie, dass hier keine speziellen Formatangaben getroffen wurden, sondern
die Ergebnismenge mit tabulatorgetrennten Spalten in die Datei geschrieben wer-
den. Die Angabe des Parameters --default-character-set=utf8 sorgt dafür, dass auch
etwaige Umlaute in den Namen der Passagiere korrekt abgespeichert werden, sofern
Sie unter Linux ebenfalls UTF-8 als Zeichensatz einsetzen. Diese Datei wird in jenem
Verzeichnis gespeichert, von dem aus der Befehl eingegeben wurde. Selbstverständ-
lich können Sie auch einen anderen Ort angeben.
7.4 Richtig sichern – Backups und Strategien
Die Wichtigkeit der Administrationsaufgabe, die wir in diesem Abschnitt vorstellen,
kann gar nicht genug betont werden: Backups. Ohne eine richtige Strategie und eine
konsequente Umsetzung sind Ihre Daten in Gefahr, sobald Sie diese in der Daten-
bank abgelegt haben. Kein System ist vor Fehlern gefeit, keine Hardware- oder Soft-
warekomponente ist frei von Mängeln. Menschen stolpern über Stromkabel, kippen
Kaffee in Lüftungsschlitze und geben aus Versehen gefährliche Befehle ein, die Ihre
Daten unbrauchbar machen können. Daher ist es Ihre Aufgabe als Administrator, für
regelmäßige Sicherungen Ihres Datenbestandes zu sorgen, um diese Backups im
Notfall wieder einspielen zu können.
Je nach Anwendungsbereich und der Relevanz der Daten in Ihrer MySQL-Instanz
handelt es sich beim Backup um die wichtigste administrative Aufgabe. Falls Sie mit
einem Onlineshop oder wie in diesem Beispiel mit der Verwaltung von Flügen Ihr
Geld verdienen, dann kann Sie jede Minute Stillstand teuer zu stehen kommen, ein
Totalverlust der Daten kann den Ruin bedeuten. Daher lernen Sie in diesem Kapitel,
wie Sie diese Horrorszenarien vermeiden.3
7.4.1 Die Basics
Damit Sie im Notfall auf einen brauchbaren Datensatz zugreifen können, müssen Sie
Ihre Daten regelmäßig über Backups sichern. Je kürzer die Intervalle zwischen den
Backups sind, desto aktueller sind natürlich die vorhandenen Daten.
3 Absolute Sicherheit kann Ihnen leider niemand versprechen.
3753.book Seite 278 Donnerstag, 30. April 2015 1:08 13
Auf einen Blick
Auf einen Blick
TEIL I Erste Schritte
1 Datenbanken – eine allgemeine Einleitung ................................................. 25
2 Datenbankmodellierung ..................................................................................... 51
3 Schnellstart-Tutorial ............................................................................................. 93
4 Einführung in die Beispieldatenbank .............................................................. 125
TEIL II MySQL-Administration
5 Architektur ............................................................................................................... 151
6 Manuelle Installation, Plugins und Upgrades .............................................. 215
7 MySQL administrieren ......................................................................................... 261
8 Replikation und Hochverfügbarkeit ................................................................ 367
9 Abfrageoptimierung ............................................................................................. 385
10 Sicherheit .................................................................................................................. 481
TEIL III Programmierung
11 Gespeicherte Programme und Events ............................................................ 547
12 Softwareentwicklung mit MySQL .................................................................... 659
13 NoSQL mit MySQL .................................................................................................. 697
TEIL IV Anhang
A Referenz .................................................................................................................... 717
3753.book Seite 3 Donnerstag, 30. April 2015 1:08 13
Inhalt
5
Inhalt
Vorwort ................................................................................................................................................. 17
TEIL I Erste Schritte
1 Datenbanken – eine allgemeine Einleitung 25
1.1 Grundlagen von Datenbanken ...................................................................................... 25
1.1.1 Die Geschichte von Datenbanken .................................................................. 25
1.1.2 Moderne Datenbanken und Datenmodelle ................................................ 27
1.1.3 Vorteile .................................................................................................................... 30
1.1.4 Nachteile von Datenbanksystemen .............................................................. 32
1.1.5 Einsatzgebiete ....................................................................................................... 32
1.1.6 Anforderungen an ein Datenbankmanagementsystem ........................ 36
1.2 MySQL ...................................................................................................................................... 40
1.2.1 Einleitung und Vorstellung ............................................................................... 40
1.2.2 Die Geschichte von MySQL ............................................................................... 43
1.2.3 Open Source und Lizenzen ................................................................................ 46
1.3 Zusammenfassung ............................................................................................................. 50
2 Datenbankmodellierung 51
2.1 Einführung in den Datenbankentwurf ...................................................................... 51
2.1.1 Anforderungsanalyse ......................................................................................... 52
2.1.2 Konzeptioneller Datenbankentwurf ............................................................. 53
2.1.3 Logischer Datenbankentwurf .......................................................................... 54
2.1.4 Physischer Datenbankentwurf ........................................................................ 54
2.1.5 Der Datenbankentwurf im Überblick ............................................................ 55
2.2 Ein konkretes Beispiel: Flughafenverwaltung ....................................................... 56
2.3 Das relationale Datenbankenmodell ......................................................................... 58
2.3.1 Tabellen, Spalten und Zeilen ............................................................................ 58
2.3.2 Schlüssel identifizieren Datensätze ............................................................... 60
2.3.3 Die relationale Algebra ...................................................................................... 61
2.3.4 Joins .......................................................................................................................... 66
3753.book Seite 5 Donnerstag, 30. April 2015 1:08 13
Inhalt
6
2.4 Datenbankdesign ................................................................................................................ 70
2.4.1 Das ER-Diagramm ................................................................................................ 70
2.4.2 Entitäten ................................................................................................................. 71
2.4.3 Beziehungen .......................................................................................................... 75
2.5 Normalformen ...................................................................................................................... 83
2.5.1 Die erste Normalform ......................................................................................... 85
2.5.2 Die zweite Normalform ..................................................................................... 86
2.5.3 Die dritte Normalform ....................................................................................... 88
2.5.4 Weitere Normalformen ..................................................................................... 90
2.6 Zusammenfassung ............................................................................................................. 91
3 Schnellstart-Tutorial 93
3.1 MySQL herunterladen ....................................................................................................... 93
3.2 Minimale Systemanforderungen ................................................................................. 94
3.3 MySQL installieren .............................................................................................................. 96
3.3.1 Schnellinstallation unter Windows ............................................................... 96
3.3.2 Schnellinstallation unter Linux ....................................................................... 102
3.3.3 Schnellinstallation unter Mac OS X ............................................................... 108
3.3.4 Weitere Softwareprodukte ............................................................................... 110
3.3.5 Zusammenfassung der Installation ............................................................... 110
3.4 Endlich loslegen – MySQL ausprobieren ................................................................... 110
3.5 Übersicht der wichtigsten Befehle .............................................................................. 114
3.5.1 Datenbanken anlegen und löschen ............................................................... 115
3.5.2 Tabellen anlegen, Daten einfügen und löschen ........................................ 117
3.5.3 Datensätze anlegen, abfragen und löschen ............................................... 121
3.5.4 Datensätze abfragen und anzeigen .............................................................. 123
3.6 Zusammenfassung ............................................................................................................. 124
4 Einführung in die Beispieldatenbank 125
4.1 Die Datenbank für das Szenario anlegen ................................................................. 125
4.2 Die Beispieldatenbank auf der Buch-DVD ............................................................... 141
3753.book Seite 6 Donnerstag, 30. April 2015 1:08 13
Inhalt
7
4.3 Hilfe bei der Arbeit mit MySQL ..................................................................................... 143
4.3.1 Fehlermeldungen und Warnungen ............................................................... 143
4.3.2 Online-Manual und weitere Anlaufstellen ................................................. 145
4.4 Zusammenfassung ............................................................................................................. 146
TEIL II MySQL-Administration
5 Architektur 151
5.1 Einführung .............................................................................................................................. 151
5.1.1 Teile einer Datenbank – das Fünf-Schichten-Modell ............................... 151
5.1.2 MySQL-Architektur .............................................................................................. 157
5.2 Abfrageverarbeitung ......................................................................................................... 161
5.2.1 Der Query-Cache – das Kurzzeitgedächtnis von MySQL ......................... 161
5.2.2 Der Optimierer – die Intelligenz von MySQL .............................................. 168
5.2.3 Execution-Engine – der Arbeiter von MySQL .............................................. 173
5.3 Transaktionen und Nebenläufigkeit .......................................................................... 173
5.3.1 Nebenläufigkeit .................................................................................................... 174
5.3.2 Transaktionen ....................................................................................................... 175
5.3.3 Lock-Management ............................................................................................... 187
5.4 Storage-Engines ................................................................................................................... 190
5.4.1 Grundlagen des Storage-Engine-Plugin-Systems ..................................... 191
5.4.2 InnoDB ..................................................................................................................... 194
5.4.3 MyISAM ................................................................................................................... 201
5.4.4 MEMORY ................................................................................................................. 206
5.4.5 Sonstige Engines .................................................................................................. 207
5.4.6 Fremdhersteller-Engines ................................................................................... 210
5.4.7 Percona und MariaDB ......................................................................................... 211
5.4.8 Vergleichstabelle .................................................................................................. 212
5.5 Zusammenfassung ............................................................................................................. 213
6 Manuelle Installation, Plugins und Upgrades 215
6.1 Von neuen Quellen – MySQL selbst kompilieren und installieren ............... 216
6.1.1 Voraussetzungen ................................................................................................. 216
6.1.2 MySQL kompilieren und installieren ............................................................. 218
3753.book Seite 7 Donnerstag, 30. April 2015 1:08 13
Inhalt
8
6.1.3 Die Installation grundlegend absichern ....................................................... 223
6.1.4 Anlegen der Konfigurationsdatei ................................................................... 229
6.1.5 Den MySQL-Dienst starten ............................................................................... 230
6.1.6 Zusammenfassung der Installation ............................................................... 234
6.2 Usermanagement ............................................................................................................... 235
6.3 Die zentrale Konfigurationsdatei »my.cnf« ............................................................ 242
6.3.1 Die Syntax der Konfigurationsdatei .............................................................. 244
6.3.2 Die grundlegenden Einstellungen .................................................................. 246
6.3.3 Kommandozeilenargumente ........................................................................... 249
6.3.4 Servervariablen setzen und ändern ............................................................... 250
6.4 MySQL aktualisieren und erweitern ........................................................................... 254
6.4.1 Upgrades ................................................................................................................. 254
6.4.2 Die Plugin-API ........................................................................................................ 258
6.5 Zusammenfassung ............................................................................................................. 260
7 MySQL administrieren 261
7.1 Der bordeigene Werkzeugkasten ................................................................................ 261
7.2 Der Name ist Programm: »mysqladmin« ................................................................. 262
7.2.1 Datenbanken anlegen und löschen ............................................................... 262
7.2.2 Caches leeren ........................................................................................................ 263
7.2.3 Das »root«-Passwort ändern ............................................................................ 264
7.2.4 Den Server überwachen ..................................................................................... 267
7.3 Daten importieren und exportieren ........................................................................... 270
7.3.1 Daten aus Dateien importieren ...................................................................... 270
7.3.2 Daten exportieren ................................................................................................ 276
7.4 Richtig sichern – Backups und Strategien ................................................................ 278
7.4.1 Die Basics ................................................................................................................ 278
7.4.2 Physisches oder logisches Backup .................................................................. 280
7.4.3 Online- und Offline-Backups ............................................................................ 282
7.4.4 Volle und inkrementelle Backups ................................................................... 283
7.4.5 Logische Backups und Wiederherstellung mit »mysqldump« ............. 284
7.4.6 Physisches Offline-Backup – schnell, sicher und effizient ..................... 288
7.4.7 InnoDB-Tabellen sichern mit »Percona XtraBackup« .............................. 291
7.4.8 Recovery von Bedienfehlern – zeitpunktbezogene
Wiederherstellung ............................................................................................... 293
3753.book Seite 8 Donnerstag, 30. April 2015 1:08 13
Inhalt
9
7.4.9 Backups mit Replikation .................................................................................... 296
7.4.10 Backups automatisieren .................................................................................... 297
7.5 Tabellenwartung mit »mysqlcheck« .......................................................................... 297
7.5.1 MyISAM-Tabellen überprüfen und reparieren ........................................... 298
7.5.2 Die Erholungsphase – Crash Recovery .......................................................... 300
7.6 Performance-Check mit »mysqlslap« ........................................................................ 302
7.7 MySQL beobachten ............................................................................................................ 303
7.7.1 Die »INFORMATION_SCHEMA«-Tabellen .................................................... 303
7.7.2 Den Status abfragen ........................................................................................... 304
7.7.3 Statistiken zu InnoDB-Tabellen ....................................................................... 305
7.7.4 MySQL überwachen ............................................................................................ 307
7.8 Die grafischen Werkzeuge im Überblick .................................................................. 308
7.8.1 MySQL Workbench .............................................................................................. 308
7.8.2 Weitere Tools ......................................................................................................... 314
7.9 Optimierungstechniken ................................................................................................... 314
7.9.1 Leistungsschau ..................................................................................................... 315
7.9.2 Profiling ................................................................................................................... 317
7.9.3 Das Percona Toolkit ............................................................................................. 321
7.9.4 Die wichtigsten Variablen der zentralen Konfigurationsdatei
im Überblick ........................................................................................................... 324
7.10 Exakte Statistiken mit dem Performance Schema ............................................... 341
7.10.1 Grundlagen des Performance Schemas ....................................................... 341
7.10.2 Instrumente einrichten und Messvorgaben anpassen ........................... 345
7.10.3 Anpassen der Einstellungen und Ausgabe von Statusvariablen ......... 352
7.10.4 Auswertung des Performance Schemas ...................................................... 354
7.10.5 Den Gesamtüberblick mit Summary-Tabellen behalten ........................ 357
7.10.6 Aufspüren von Problemen ................................................................................ 361
8 Replikation und Hochverfügbarkeit 367
8.1 Grundprinzipien ................................................................................................................... 368
8.1.1 Ablauf ....................................................................................................................... 369
8.1.2 Arten von Replikation ......................................................................................... 369
8.2 Topologien ............................................................................................................................. 371
8.2.1 Master – Slave ....................................................................................................... 371
8.2.2 Master – Slave mit zwischengeschaltetem Slave ..................................... 372
8.2.3 Master – Master ................................................................................................... 373
3753.book Seite 9 Donnerstag, 30. April 2015 1:08 13
Inhalt
10
8.3 Konfiguration ........................................................................................................................ 374
8.3.1 Vorarbeiten ............................................................................................................ 375
8.3.2 Replikation über GTIDs ....................................................................................... 376
8.3.3 Replikation über das Binär-Log ........................................................................ 379
8.4 Zusammenfassung ............................................................................................................. 383
9 Abfrageoptimierung 385
9.1 Aufspüren von langsamen Abfragen ......................................................................... 385
9.1.1 Langsame Abfrage protokollieren .................................................................. 385
9.1.2 Log-Dateien regelmäßig kontrollieren ......................................................... 388
9.2 Indexstrukturen ................................................................................................................... 388
9.2.1 Die Grundidee von Indexstrukturen .............................................................. 389
9.2.2 Primärindex vs. Sekundärindex ....................................................................... 390
9.2.3 Der limitierende Faktor – die Festplatte ...................................................... 391
9.2.4 Technische Umsetzung von Indexstrukturen –
der B-Baum und MyISAM .................................................................................. 392
9.2.5 Clustered Index ..................................................................................................... 397
9.2.6 Non-clustered Index ............................................................................................ 398
9.2.7 Mehrdimensionale Indexstrukturen – der R-Baum ................................. 398
9.2.8 GIS und raumbezogene Indizes ....................................................................... 402
9.2.9 Volltextindex ......................................................................................................... 411
9.2.10 Die großen Nachteile des Indexes .................................................................. 420
9.3 Optimierung von Abfragen ............................................................................................ 421
9.3.1 Die EXPLAIN-Anweisung .................................................................................... 421
9.3.2 Auswertung der EXPLAIN-Informationen und Optimierungen ........... 424
9.4 Partitionierung ..................................................................................................................... 455
9.5 Zusammenfassung ............................................................................................................. 478
10 Sicherheit 481
10.1 Grundlagen ............................................................................................................................ 481
10.1.1 Verschiedene Szenarien für das Rechtemanagement ............................ 481
10.1.2 Die zwei Phasen des Berechtigungssystems .............................................. 483
10.2 Privilegiert – die Benutzerrechte im Detail ............................................................. 484
10.2.1 Die Ebenen der Benutzerberechtigungen ................................................... 486
3753.book Seite 10 Donnerstag, 30. April 2015 1:08 13
Inhalt
11
10.2.2 Berechtigungen zum Schutz der Daten ....................................................... 489
10.2.3 Berechtigungen zur Programmierung mit MySQL ................................... 494
10.2.4 Das Sicherheitskonzept von Programmen oder
DEFINER vs. INVOKER .......................................................................................... 496
10.2.5 Berechtigungen zur Administration von MySQL ....................................... 500
10.2.6 Die Befehle GRANT, REVOKE, CREATE und ALTER USER im Detail ....... 505
10.2.7 Benutzerverwaltung ohne GRANT – die Datenbank »mysql« .............. 511
10.3 Tipps und Tricks ................................................................................................................... 517
10.3.1 Vorgehen bei der Erstellung von Benutzern ............................................... 518
10.3.2 Tausende Benutzer und Datenbanken ohne Chaos verwalten ............ 518
10.3.3 Benutzerverwaltungs-API ................................................................................. 520
10.3.4 Benutzerverwaltung in der Applikation, nicht in der Datenbank? ..... 521
10.3.5 Workaround für Berechtigungen auf Zeilenebene/Kapselung ............ 523
10.4 STOP! – MySQL absichern ................................................................................................ 526
10.4.1 Allgemeine Sicherheitshinweise – der gewissenhafte
Administrator ........................................................................................................ 526
10.4.2 Zugang beschränken oder verschlüsseln ..................................................... 532
10.4.3 MySQL im Web ...................................................................................................... 537
10.5 Zusammenfassung ............................................................................................................. 542
TEIL III Programmierung
11 Gespeicherte Programme und Events 547
11.1 Wozu gespeicherte Programme? ................................................................................. 547
11.1.1 Arten von gespeicherten Programmen ........................................................ 549
11.1.2 MySQL Stored Program Language .................................................................. 550
11.1.3 Grundlegendes Arbeiten mit gespeicherten Programmen ................... 551
11.1.4 Kommentare .......................................................................................................... 553
11.1.5 Datentypen ............................................................................................................ 555
11.1.6 Sicherung und Backup gespeicherter Programme und Sichten ........... 555
11.1.7 Rechte von gespeicherten Programmen ...................................................... 556
11.1.8 Einschränkungen ................................................................................................. 557
11.2 Gespeicherte Prozeduren ................................................................................................ 557
11.2.1 Erzeugung gespeicherter Prozeduren ........................................................... 558
11.2.2 Erweiterte Einstellungen beim Erzeugen von gespeicherten
Prozeduren ............................................................................................................. 560
11.2.3 Verwendung gespeicherter Prozeduren ...................................................... 561
3753.book Seite 11 Donnerstag, 30. April 2015 1:08 13
Inhalt
12
11.2.4 Löschen von gespeicherten Prozeduren ....................................................... 562
11.2.5 Bearbeiten gespeicherter Prozeduren ........................................................... 562
11.2.6 Parameter ............................................................................................................... 564
11.2.7 Ergebnismengen .................................................................................................. 569
11.3 Gespeicherte Funktionen ................................................................................................ 569
11.3.1 Erzeugen von gespeicherten Funktionen .................................................... 570
11.3.2 Erweiterte Optionen beim Erzeugen von gespeicherten
Prozeduren ............................................................................................................. 572
11.3.3 Aufrufen gespeicherter Funktionen .............................................................. 574
11.3.4 Bearbeiten gespeicherter Funktionen ........................................................... 576
11.3.5 Einschränkungen ................................................................................................. 576
11.4 Informationen zu bestehenden gespeicherten Programmen
(Metadaten) ........................................................................................................................... 577
11.5 Programmieren in MySQL ............................................................................................... 581
11.5.1 BEGIN-/END-Blöcke ............................................................................................. 582
11.5.2 Variablen ................................................................................................................. 583
11.5.3 Ablaufsteuerung und konditionale Anweisungen ................................... 590
11.5.4 Schleifen .................................................................................................................. 597
11.5.5 Cursors ..................................................................................................................... 602
11.5.6 Handler .................................................................................................................... 609
11.5.7 Selbstdefinierte Fehlermeldungen mit SIGNAL ......................................... 618
11.5.8 Verschachtelte Cursors und ihre Handler .................................................... 623
11.5.9 Temporäre Tabellen ............................................................................................ 626
11.5.10 Rekursion ................................................................................................................ 627
11.5.11 Transaktionen ....................................................................................................... 630
11.6 Trigger ...................................................................................................................................... 632
11.6.1 Trigger erstellen .................................................................................................... 632
11.6.2 Löschen und Bearbeiten von Triggern .......................................................... 637
11.6.3 Informationen über bestehende Trigger (Metadaten) ............................ 637
11.6.4 Einschränkungen ................................................................................................. 640
11.7 Events ....................................................................................................................................... 641
11.7.1 Event-Scheduler .................................................................................................... 642
11.7.2 Erzeugung von Events ........................................................................................ 643
11.7.3 Löschen und Bearbeiten von Events .............................................................. 647
11.7.4 Informationen zu bestehenden Events (Metadaten) .............................. 648
11.7.5 Sicherheit, Rechte und Einschränkungen .................................................... 650
11.8 Sichten (Views) ..................................................................................................................... 651
11.8.1 Erzeugung und Verwenden von Sichten ...................................................... 652
11.8.2 Updates auf Sichten ............................................................................................ 654
3753.book Seite 12 Donnerstag, 30. April 2015 1:08 13
Inhalt
13
11.8.3 Löschen und Bearbeiten einer Sicht .............................................................. 655
11.8.4 Informationen zu bestehenden Sichten (Metadaten) ............................. 656
11.9 Zusammenfassung ............................................................................................................. 657
12 Softwareentwicklung mit MySQL 659
12.1 Konnektoren/Programmiersprachen ........................................................................ 661
12.1.1 Allgemeines ........................................................................................................... 661
12.1.2 ODBC ........................................................................................................................ 665
12.1.3 Java, JDBC und Connector/J .............................................................................. 669
12.1.4 PHP, mysqli, PDO_MYSQL ................................................................................. 674
12.1.5 .NET ........................................................................................................................... 678
12.1.6 Perl, DBD:mysql .................................................................................................... 684
12.1.7 Ruby .......................................................................................................................... 687
12.1.8 Python ...................................................................................................................... 689
12.1.9 node-mysql, Node.js – serverseitiges JavaScript ....................................... 692
12.2 Zusammenfassung ............................................................................................................. 695
13 NoSQL mit MySQL 697
13.1 Not Only SQL – NoSQL ....................................................................................................... 697
13.2 Skalierung und Verteilung: ACID vs. BASE ............................................................... 699
13.3 Mit Hochgeschwindigkeit ins Herz: MySQL öffnet sich »Memcached«-
Benutzern ............................................................................................................................... 700
13.3.1 Die Integration von Memcached in die MySQL-Architektur .................. 701
13.3.2 Grundlagen des Memcache-Protokolls ........................................................ 702
13.3.3 Memcached zur Verwendung mit InnoDB installieren ........................... 703
13.3.4 Die Verbindung testen ....................................................................................... 705
13.3.5 Memcached und InnoDB verbinden .............................................................. 706
13.3.6 Lesen und Schreiben von Daten mittels Memcached ............................. 709
13.3.7 Replikation und Memcached ........................................................................... 711
13.3.8 Sicherheit gegen Geschwindigkeit ................................................................. 712
13.3.9 Weitere Einstellungen ........................................................................................ 712
13.4 Zusammenfassung ............................................................................................................. 714
3753.book Seite 13 Donnerstag, 30. April 2015 1:08 13
Inhalt
14
TEIL IV Anhang
A Referenz 717
A.1 Datentypen ............................................................................................................................ 718
A.2 Datendefinition, Datenmanipulation und Abfragen .......................................... 720
A.3 Index ......................................................................................................................................... 726
A.4 Boolesche Operatoren ...................................................................................................... 727
A.5 Mathematische Funktionen ........................................................................................... 728
A.6 Zeit- und Datumsfunktionen ......................................................................................... 730
A.7 String-Funktionen ............................................................................................................... 737
A.8 Transaktionen ....................................................................................................................... 744
A.9 Sperren ..................................................................................................................................... 746
A.10 Sichten (Views) ..................................................................................................................... 746
A.11 MySQL-Client ........................................................................................................................ 747
A.12 Gespeicherte Prozeduren ................................................................................................ 749
A.13 Gespeicherte Funktionen ................................................................................................ 751
A.14 Triggers .................................................................................................................................... 752
A.15 Events ....................................................................................................................................... 753
A.16 Kontrollfluss-Elemente ..................................................................................................... 755
A.17 Variablen in Programmen ............................................................................................... 757
A.18 Cursors ..................................................................................................................................... 758
A.19 Handlers .................................................................................................................................. 759
A.20 Volltextsuche ........................................................................................................................ 761
A.21 Replikation ............................................................................................................................. 762
A.22 GIS-Funktionen .................................................................................................................... 764
A.23 Partitionierung ..................................................................................................................... 766
A.24 Administrationsaufgaben ............................................................................................... 769
A.25 Benutzerverwaltung und Sicherheit .......................................................................... 773
A.26 Wartungsarbeiten .............................................................................................................. 777
A.27 Backups, Wiederherstellung und Logfiles ............................................................... 779
3753.book Seite 14 Donnerstag, 30. April 2015 1:08 13
Inhalt
15
A.28 Import und Export .............................................................................................................. 781
A.29 Benchmarking, Monitoring und Profiling ................................................................ 782
A.30 Query-Cache .......................................................................................................................... 784
A.31 Plugins ...................................................................................................................................... 784
A.32 Storage-Engines ................................................................................................................... 785
A.33 Hilfe, Warnungen und Fehler ........................................................................................ 788
A.34 Fehlernummern und SQL-States .................................................................................. 789
A.35 Escape-Sequenzen .............................................................................................................. 791
A.36 Zeichensätze und Sortierfolgen (Character Sets und Collations) .................. 792
Index ........................................................................................................................................................ 793
3753.book Seite 15 Donnerstag, 30. April 2015 1:08 13
Index
793
Index
.NET Framework ............................................ 94, 678
[mysqld] .................................................................... 247
@-Zeichen ................................................................ 275
1NF ................................................................................ 85
2NF ................................................................................ 88
32 Bit ........................................................................... 96
3NF ................................................................................ 88
64 Bit ........................................................................... 96
A
Abbruchbedingung ............................................ 600
Abfrage, verschachtelte � Subquery
Abfrageerweiterung ............................................. 418
Abfrageüberprüfung ........................................... 484
Abfrageverarbeitung ................................... 158, 161
Abhängigkeit
funktionale ........................................................... 62
transitive ................................................................ 88
Abhörversuch .......................................................... 531
Ablaufsteuerung ................................................... 590
Aborted_connects ............................................... 304
Abstraktion ................................................................ 36
Modellierung ......................................................... 51
Absturz ............................................................. 292, 297
ACID-Eigenschaften ..................................... 176, 187
ACID-konform ............................................... 194, 335
ACTION_CONDITION ......................................... 639
ACTION_ORDER ................................................... 639
ACTION_ORIENTATION .................................... 640
ACTION_STATEMENT ......................................... 640
ACTION_TIMING .................................................. 640
ADD PARTITION ............................................ 471, 472
Administrationsaufgaben ................................. 261
Administratorberechtigungen ................. 97, 487
Administratorkonto ............................................ 228
AFTER ......................................................................... 633
AFTER DELETE ....................................................... 636
AFTER INSERT ......................................................... 635
AFTER UPDATE ...................................................... 636
Aktualisierung � Update
Algebra
relationale ............................................................ 153
Alias ..................................................................... 67, 635
ALL .............................................................................. 502
ALL PRIVILEGES .................................................... 484
ALTER ................................................................ 493, 577
ALTER EVENT ................................................. 648, 754
ALTER FUNCTION ......................................... 576, 751
ALTER PROCEDURE ..................................... 562, 750
ALTER ROUTINE ........................................... 496, 556
ALTER TABLE ........................................................... 130
ALTER TABLE ADD FOREIGN KEY ................... 726
ALTER TABLE ADD PARTITION ........................ 767
ALTER TABLE ANALYZE PARTITION .............. 767
ALTER TABLE CHECK PARTITION ................... 768
ALTER TABLE COALESCE PARTITION ............ 767
ALTER TABLE DROP FOREIGN KEY ................ 726
ALTER TABLE DROP PARTITION ..................... 767
ALTER TABLE EXCHANGE PARTITION ......... 769
ALTER TABLE OPTIMIZE PARTITION ............. 768
ALTER TABLE REBUILD PARTITION ............... 768
ALTER TABLE REMOVE PARTITIONING ....... 767
ALTER TABLE REORGANIZE PARTITION ...... 768
ALTER TABLE REPAIR PARTITION .................. 768
ALTER TABLE TRUNCATE PARTITION .......... 769
ALTER VIEW .................................................... 557, 747
ANALYZE PARTITION .......................................... 473
ANALYZE_TABLE ................................................... 491
AND
AND-Verknüpfung ................................... 592, 727
Änderungsanomalie .............................................. 84
Anmeldung ............................................................. 747
Anmeldung � Login
Anomalien
Änderungsanomalie ......................................... 84
Einfügeanomalie ................................................ 84
Löschanomalie .................................................... 84
ANSI SQL
2003 SQL/PSM .................................................. 550
Antelope ................................................................... 198
Anweisung
bedingte .............................................................. 590
API ............................................................................... 258
Application Programming Interface � API
Applikationsberechtigungen ........................... 522
apt ............................................................................... 105
ARCHIVE .................................................................. 208
ASCII .................................................................. 239, 737
ASTEXT ............................................................. 405, 765
Atomarität ................................................................ 176
atomicity ................................................................... 176
Attribut ................................................................ 58, 70
Aufwärmen .............................................................. 316
3753.book Seite 793 Donnerstag, 30. April 2015 1:08 13
Index
794
Ausfallsicherheit ................................................... 367
Ausführer .................................................................. 173
Ausführung ............................................................. 561
Ausführungseinheit .............................................. 173
Ausführungsplan .......................................... 153, 168
Ausgabe
vertikale ............................................................... 123
Ausgabeparameter .............................................. 564
Austrittspunkt ........................................................ 572
Authentifizierung ........................................ 236, 237
Autocommit-Modus ............................................ 179
Auto-Increment ..................................................... 373
auto-increment-increment .............................. 373
auto-increment-offset ........................................ 373
automysqlbackup ................................................. 297
Axmark, David ......................................................... 43
B
Backtick .................................................................... 492
Backup ...................................... 39, 277, 278, 367, 555
inkrementelles ................................................... 283
logisches ..................................................... 280, 284
physisches .......................................................... 280
volles ...................................................................... 283
Barracuda ................................................................. 198
BASE ........................................................................... 700
base_dir ...................................................................... 251
bashrc ......................................................................... 234
Bash-Shell ........................................................ 216, 232
Bedienfehler ............................................................ 293
Bedingte Anweisung ........................................... 590
BEFORE ...................................................................... 633
BEFORE DELETE .................................................... 636
BEFORE INSERT ...................................................... 635
BEFORE UPDATE .................................................... 635
BEGIN ................................................................ 179, 744
BEGIN WORK ........................................................... 179
BEGIN-/END-Block ................................................ 755
Begrenzungszeichen ............................................. 551
BENCHMARK ........................................ 302, 316, 783
Benutzerdefinierte MySQL-Variable ............. 585
Benutzereingabe
maskieren ........................................................... 540
Benutzergruppe ................................... 219, 223, 240
Benutzerkonto
anlegen ................................................................ 520
Betriebssystemebene ...................................... 219
Benutzeroberfläche .............................................. 262
Benutzerrechte � Berechtigungen
Owner .................................................................... 223
Benutzerzugang .................................................... 235
Berechtigungen .................. 223, 228, 235, 237, 481
auf Datenbankebene ...................................... 487
auf globaler Ebene ........................................... 487
auf Tabellenebene ........................................... 487
auf Zeilenebene ................................................. 523
Berechtigungsebene ........................................... 486
Berechtigungstabelle .......................................... 263
Bereichsabfrage ............................................ 207, 397
Berkeley DB ............................................................... 45
Bezeichner ......................................................... 54, 116
Bezeichnerschema ............................................... 584
Beziehung ............................................................ 70, 75
1:1-Beziehung ........................................................ 77
1:n-Beziehung ...................................................... 79
Arten ....................................................................... 76
identifizierende ................................................... 78
n:m-Beziehung .................................................... 79
symmetrische ...................................................... 79
BIN ............................................................................... 737
Binärdatei ................................................................... 41
Binärdistribution .................................................. 261
Binäres Logging ..................................................... 556
Binär-Log ......................................................... 248, 293
Binary .......................................................................... 94
bind_address ........................................................... 251
binlog_format ........................................................ 248
BIT_LENGTH ............................................................ 737
BLACKHOLE ............................................................ 210
Blattknoten ............................................................. 393
BLOB ........................................................................... 337
Block ......................................................... 392, 559, 582
Blog ................................................................................ 35
Boolesche Volltextsuche ................................... 414
Buffer-Management ............................................. 156
Bug ................................................................................ 47
Build-Tools ............................................................... 218
Business Intelligence ............................................ 34
C
CA ................................................................................ 534
Cache ................................................................. 163, 263
CALL .................................................................. 561, 750
CallableStatement ................................................ 674
Cardinality ............................................................... 425
CASE .................................................................. 595, 756
Catch-all-Partition ................................................ 461
Certificate Authority � CA
CHANGE MASTER .................................................. 381
CHANGE MASTER TO .......................................... 762
3753.book Seite 794 Donnerstag, 30. April 2015 1:08 13
Index
795
CHAR .......................................................................... 737
CHAR_LENGTH ...................................................... 737
CHARACTER_LENGTH ........................................ 737
CHARACTER_MAXIMUM_LENGTH .............. 579
CHARACTER_OCTET_LENGTH ........................ 579
CHARACTER_SET_CLIENT ... 580, 638, 640, 649
CHARACTER_SET_NAME ................................... 579
CHECK ....................................................................... 298
CHECK PARTITION ............................................... 473
CHECK TABLE .................................................. 577, 778
Chen-Notation ......................................................... 76
Cipher ........................................................................ 535
Clearing .................................................................... 650
Client ........................................................................... 96
Client-Server-System ............................................. 41
CLOSE ........................................................................ 604
CLOSE CURSOR ....................................................... 759
cmake ................................................................ 218, 222
COALESCE ................................................................. 473
Codd, Edgar ......................................................... 36, 84
Code
wiederverwenden ............................................. 547
Cold Copy � Offline-Backup
COLLATION_CONNECTION 580, 638, 640, 650
COLLATION_NAME .............................................. 579
COLUMNS ................................................................ 459
columns_priv .......................................................... 512
COLUMNS-Partitionierung .............................. 464
COMMENT ............................................................... 561
COMMIT .......................................... 178, 577, 631, 744
Community ............................................................... 41
Compiler ................................................................... 216
CONCAT .................................................................... 738
CONCAT_WS ........................................................... 738
Condition ................................................................. 612
Connector ................................................................ 661
Connector/J ............................................................ 669
Connector/NET ..................................................... 678
consistency � Konsistenz
Constraint ........................................................ 131, 272
CONTAINS SQL ............................................. 560, 573
Content
Content-Management-System ..................... 35
dynamisch generierter ..................................... 34
Continue-Handler ....................................... 609, 614
Crash Recovery ........................................... 292, 300
CREATE .............................................................. 491, 577
CREATE DATABASE ...................................... 721, 769
CREATE EVENT .............................................. 643, 753
CREATE FUNCTION ...................................... 570, 751
CREATE INDEX ....................................................... 726
CREATE PROCEDURE ......................... 558, 559, 749
CREATE ROUTINE ................................................. 495
CREATE SERVER ..................................................... 786
CREATE TABLE ................................................. 117, 721
mit Partitionen ................................................. 766
Storage-Engine-Einstellungen .................... 786
CREATE TABLESPACE ......................................... 504
CREATE TEMPORARY TABLE ............................ 492
CREATE TRIGGER ................................................... 752
CREATE USER ................................................. 502, 774
CREATE VIEW ................................................ 494, 746
CREATE_ROUTINE ................................................ 556
CREATE_TEMPORARY_TABLES ....................... 626
CREATED .............................................. 580, 638, 640
Cronjob ............................................................ 550, 641
CRUD .......................................................................... 126
CSV ..................................................................... 209, 271
CSV-Storage-Engine ............................................. 276
CURRENT_TIMESTAMP ...................................... 644
Cursor ............................................................. 602, 604
deklarieren ......................................................... 603
erzeugen ............................................................. 603
öffnen ................................................................... 604
verschachtelter ................................................. 623
verwenden ......................................................... 604
Cursor-Variable .................................................... 603
D
Daemon .............................................................. 41, 225
Data Definition Language � DDL
Data Dictionary ........................................................ 37
DATA DIRECTORY ................................................. 462
DATA_TYPE ............................................................. 579
Database Collation ..................................... 638, 650
DATABASE_COLLATION ......................... 580, 640
Dateiberechtigung ...................................... 223, 228
Daten ............................................................................ 25
Repräsentation .................................................... 37
Datenabstraktion .................................................... 36
Datenbank ........................................................... 25, 26
aktivieren ............................................................ 237
deduktive ............................................................... 29
Index ...................................................................... 134
mobile ..................................................................... 29
objektorientierte ................................................ 29
XML-Datenbank ................................................. 29
Datenbankabstraktionsschicht ...................... 662
Datenbankapplikation ........................................ 152
3753.book Seite 795 Donnerstag, 30. April 2015 1:08 13
Index
796
Datenbankdesign ............................................. 38, 70
Datenbankebene ................................................... 487
Datenbankentwurf
Anforderungsanalyse ....................................... 52
konzeptioneller ................................................... 53
logischer ................................................................. 54
physischer .............................................................. 54
Datenbankindex .............................................. 35, 134
Datenbankmanagementsystem .............. 26, 235
relationales ........................................................... 28
Datenbankmodell
hierarchisches ...................................................... 27
Netzwerkdatenbankmodell ........................... 27
objektorientiertes ............................................... 29
objektrelationales .............................................. 29
relationales ............................................. 27, 58, 151
Datenbankmodellierung ...................................... 51
Datenbankserver ..................................................... 36
Datenbankverwaltung ......................................... 153
Datendurchsatz ..................................................... 316
Datenintegrität ........................................................ 37
Datenkommunikation ........................................ 548
Datensatz ............................................................. 26, 59
Datensicherheit ....................................................... 39
Datenstruktur ........................................................... 28
Datentypen .............................................................. 555
Datenverzeichnis .................................................. 228
Datum ........................................................................ 719
aktuelles ............................................................... 734
Datumsangabe
erzeugen ............................................................... 733
Formatierung ..................................................... 736
umwandeln ......................................................... 733
Datumsarithmetik ................................................ 732
Dauerhaftigkeit ...................................................... 176
Db ............................................................................... 649
DBD ............................................................................ 684
DBD:mysql .............................................................. 684
DBI .............................................................................. 684
DBMS � Datenbankmanagementsystem
DDL ....................................................................... 54, 577
Deadlock ................................................................... 187
DEALLOCATE PREPARE ............................... 577, 777
Debian ....................................................................... 216
Debugging ....................................................... 567, 599
DECLARE .......................................................... 583, 757
DECLARE CONDITION ......................................... 759
DECLARE CURSOR ....................................... 603, 758
DECLARE HANDLER .................................... 610, 759
default-character-set ........................................... 278
Default-Wert ........................................................... 587
DEFINER ........... 497, 570, 580, 633, 638, 640, 649
Deklarieren .............................................................. 583
DELETE ..................................................... 241, 491, 725
Delimiter ................................................................... 551
DESCRIBE ................................................................. 748
DETERMINISTIC ............................................ 560, 573
Deterministisch ................................................... 560
DHE-RSA-AES256-SHA ........................................ 536
Dirty Read ................................................................. 182
Disjunktion ............................................................... 66
Distance() ................................................................ 406
Distributed Transaction Processing:
The XA Specification ....................................... 187
DNS ................................................................................ 31
DO .............................................................................. 646
Dokumentation ..................................................... 554
Downloadlink ........................................................... 93
DROP ................................................................. 493, 577
DROP DATABASE .......................................... 721, 769
DROP EVENT .................................................. 647, 754
DROP FUNCTION ................................................... 752
DROP INDEX ............................................................ 727
DROP PARTITION ................................................. 472
DROP PREPARE ....................................................... 777
DROP PROCEDURE ...................................... 562, 750
DROP SERVER ......................................................... 786
DROP TABLE ............................................................ 723
DROP TRIGGER .............................................. 637, 753
DROP USER ............................................. 242, 485, 775
DROP VIEW .............................................................. 747
DTD_IDENTIFIER .................................................. 579
durability .................................................................. 176
Durchschnitt ............................................................ 66
E
Ebene
Datenbankebene .............................................. 487
der Benutzerberechtigungen ...................... 486
globale .................................................................. 487
Objektebene ....................................................... 488
Spaltenebene ..................................................... 488
Tabellenebene ................................................... 487
Zellenebene ......................................................... 488
Editor
nano ...................................................................... 244
Eigenschaft
GIS-Eigenschaft ................................................ 402
multidimensionale ......................................... 405
Einbenutzerbetrieb
virtueller ............................................................... 176
3753.book Seite 796 Donnerstag, 30. April 2015 1:08 13
Index
797
Einfügeanomalie ..................................................... 84
Eingabeparameter ............................................... 564
Eintrittspunkt ......................................................... 572
Einwegfunktion .................................................... 240
ELSEIF ........................................................................ 594
ELT ............................................................................... 738
Ends ........................................................................... 649
End-User License Agreement � EULA
enforce-gtid-consistency � Replikation
ENGINE ...................................................................... 193
Entität ................................................................... 70, 72
existenzabhängige ............................................ 78
Entity-Relationship-Modell � ER-Modell
enumeration ............................................................ 137
ENVELOPE ...................................................... 408, 765
Ergebnismenge ..................................................... 569
Ende der ............................................................... 608
ER-Modell ............................................................ 53, 70
error code ................................................................. 143
error_log .................................................................. 249
error.log � Error-Log
Error-Log ................................................. 288, 291, 298
Escapen ..................................................................... 539
Escape-Sequenz � Maskierungszeichen
Escape-Zeichen ...................................................... 540
EULA ............................................................................. 97
EVENT ............................................................... 495, 651
Event ............................................... 549, 556, 638, 641
bearbeiten .......................................................... 647
Event-Scheduler ............................................... 642
EVENT_MANIPULATION ................................... 639
EVENT_OBJECT _TABLE ..................................... 639
EVENT_OBJECT_CATALOG ............................... 639
EVENT_OBJECT_SCHEMA ................................. 639
EVERY ........................................................................ 645
EXECUTE ...................... 250, 496, 556, 577, 748, 777
Execute at ........................................................... 649
Execution-Engine ......................................... 159, 173
Exit-Handler .................................................. 609, 615
EXPLAIN ............................................................ 421, 577
EXPLAIN PARTITIONS ............................... 474, 769
Export ........................................................................ 276
Linux-Befehl ....................................................... 233
Export PATH ........................................................... 233
EXPORT_SET ........................................................... 738
EXTENDED STATUS ............................................. 770
EXTERNAL_LANGUAGE ..................................... 580
EXTERNAL_NAME ................................................ 580
F
Faktor Mensch ....................................................... 526
Fallunterscheidung ............................ 590, 591, 594
false ............................................................................. 591
FEDERATED ............................................................ 208
Fehler ........................................................................ 609
Fehlermeldung ................................................. 609
Fehlernummer ....................... 609, 610, 611, 789
Fernwartungssoftware ....................................... 533
FETCH ....................................................................... 605
FETCH INTO ............................................................ 759
Fetchen
mehrfaches ........................................................ 607
FIELD .......................................................................... 738
FILE ............................................................................. 503
Privileg .................................................................. 277
FIND_IN_SET .......................................................... 738
Firewall ............................................................. 326, 533
FIRST ......................................................................... 208
FLOOR ............................................................. 409, 560
FLUSH ................................................................ 263, 577
FLUSH HOSTS ......................................................... 770
FLUSH LOGS ............................................................ 294
FLUSH PRIVILEGES ....................................... 514, 777
FLUSH QUERY CACHE ......................................... 784
FLUSH TABLES WITH READ LOCK ................. 380
flush-hosts ...................................................... 263, 264
flush-logs ......................................................... 263, 264
flush-privileges ...................................................... 263
flush-status ............................................................. 263
flush-tables .............................................................. 263
flush-threads .......................................................... 263
FORMAT .................................................................... 739
Format
dynamisches ...................................................... 202
statisches ............................................................. 202
Forum ........................................................................... 35
Forward Engineering ...................................... 83, 311
Free Software Foundation � FSF
Fremdschlüsselbeziehung ................................ 272
frm-Datei .................................................................. 194
FROM_BASE64 ....................................................... 739
FSF ................................................................................. 47
ft_boolean_syntax ............................................... 418
ft_max_word_len .................................................. 417
ft_min_word_len .................................................. 417
ft_query_expansion_limit ....................... 418, 419
ft_stopword_file ................................................... 416
Full-Table-Scan ............................................. 356, 389
3753.book Seite 797 Donnerstag, 30. April 2015 1:08 13
Index
798
FULLTEXT .................................................................. 411
FUNCTION ............................................................... 570
statistische ............................................................ 34
Fünf-Schichten-Modell ........................................ 151
Funktionale Abhängigkeit ................................... 62
Funktionalität ............................................................ 71
G
Geoinformationssystem � GIS
Geo-Koordinaten .................................................... 36
Geometrieobjekt
erzeugen .............................................................. 403
GEOMETRY ............................................................. 402
GEOMETRYCOLLECTION ................................... 402
GeomFromText ..................................................... 765
Geplanter Task ....................................................... 641
Gespeicherte Funktion .................... 549, 569, 570
Gespeicherte Prozedur .............................. 549, 557
bearbeiten ........................................................... 562
erzeugen ............................................................... 558
löschen .................................................................. 562
Gespeichertes Programm 287, 410, 547, 549, 557
GIS .............................................................................. 402
GIS-Funktionen ...................................................... 765
GLOBAL ............................................................ 252, 253
Globale Ebene ......................................................... 487
Globale Transaktions-ID � GTID
GNU General Public License � GPL
GNU/Linux ........................................................ 41, 102
GPL ......................................................................... 47, 97
GRANT ............................................. 241, 485, 505, 775
GRANT OPTION ..................................................... 501
Groß- und Kleinschreibung .............................. 412
Grundinstallation .................................................. 96
GTID ............................................................................ 374
Gültigkeitsbereich ........................................ 251, 587
einer Variablen .................................................. 587
eines Handlers ................................................... 622
H
Handler ......................................................... 608, 609
Gültigkeitsbereich ............................................ 622
Hardwareanforderungen ..................................... 95
HASH ................................................................ 244, 459
SHA1 ....................................................................... 538
SHA2 ..................................................................... 530
Hashausdruck ........................................................ 466
Hashfunktion ......................................................... 239
Hashindex ................................................................ 392
Hashing .................................................................... 466
lineares ................................................................. 467
HASH-Partitionierung ....................................... 466
Hashtabelle ............................................................. 392
Hauptverzeichnis ................................................. 289
have_query_cache ............................................... 164
HELP ........................................................................... 788
HEX ............................................................................. 739
Hintergrundprozess
Daemon ............................................................... 104
Hochverfügbarkeit ................................................. 42
Homeverzeichnis ................................................. 244
Horizontale Skalierung ..................................... 699
Host ............................................................................ 264
Hostname ................................................................ 237
Hot Copy � Online-Backup
I
ib_logfile ................................................................... 197
ibdata1 ...................................................................... 196
IDEF1X ......................................................................... 76
Identifier
vollständig qualifizierter ............................... 116
Identität
Benutzeridentifizierung ................................ 237
IF-THEN-ELSE ......................................................... 590
IF-THEN-ELSEIF-ELSE .................................. 594, 756
Import ............................................................. 270, 780
komprimierter .................................................. 780
Index ........................................................... 35, 134, 493
adaptiver Hashindex ....................................... 195
B-Baum ............................................... 195, 201, 393
clustered ...................................................... 195, 397
gruppierter .......................................................... 397
Hashindex .................................................. 195, 207
nicht gruppierter .............................................. 398
non-clustered ........................................... 202, 398
Primärindex ...................................................... 390
räumlicher ............................................... 403, 404
R-Baum ............................................. 201, 399, 405
Sekundärindex ......................................... 391, 398
Spatial-Index .................................................... 404
INDEX DIRECTORY ............................................... 462
Indexstruktur ........................................................ 405
Information Hiding ............................................. 547
INFORMATION_SCHEMA ........ 258, 272, 303, 577
INFORMATION_SCHEMA.PARTITIONS ....... 477
Informationssystem .............................................. 35
init.d ............................................................................ 231
Initialized ................................................................ 650
3753.book Seite 798 Donnerstag, 30. April 2015 1:08 13
Index
799
Inkonsistenz ....................................................... 30, 38
InnoDB .................................................... 176, 194, 329
reparieren ............................................................ 292
innodb_buffer_pool_size ................ 196, 329, 333
innodb_file_format ............................................. 198
innodb_file_per_table ............................... 196, 197
innodb_flush_log_at_trx_commit ............... 334
innodb_force_recovery ...................................... 301
innodb_log_file_size ........................................... 196
INOUT ........................................................................ 641
INOUT-Parameter ................................................. 567
IN-Parameter ......................................................... 564
INSERT ...................................................... 241, 491, 739
INSERT DELAYED .................................................. 205
INSERT INTO ............................................................ 725
INSTALL PLUGIN ................................................... 785
Installationsskript ................................................ 224
Instanz ................................................................ 64, 243
Integrität
Datenintegrität ................................................... 37
referentielle ................................................. 129, 131
INTERVAL ................................................................ 645
Interval Field .......................................................... 649
Interval Value ........................................................ 649
INVOKER .................................................................. 497
IP-Adresse ................................................................ 237
IS_DETERMINISTIC .............................................. 580
ISAM .......................................................................... 396
Isolation ............................................................ 176, 181
Isolationslevel ......................................................... 181
ITERATE ............................................................ 598, 757
Iteratives Vorgehensmodell ............................... 55
J
Java ............................................................................. 669
Java Database Connectivity � JDBC
JavaScript ................................................................. 692
JDBC ........................................................................... 669
Join � Verbund
Join-Reihenfolge ..................................................... 172
K
Kapselung ............................................... 499, 523, 547
Kapselungsschicht ................................................ 523
Kardinalität
Relation .................................................................. 75
Kartografiesystem .................................................. 36
Katalog ........................................................................ 153
KEY ............................................................................. 459
key_buffer .............................................................. 340
key_len ...................................................................... 423
Key-Cache ................................................................ 335
KEY-Partitionierung ........................................... 468
lineare .................................................................. 468
KILL ............................................................................. 270
KILL CONNECTION ................................................ 771
KILL QUERY .............................................................. 771
Kindknoten ............................................................. 393
Knoten ...................................................................... 367
Kommandozeile ............................................ 105, 110
Kommandozeilenparameter
dynamischer ...................................................... 250
statischer ............................................................. 250
Kommentar ..................................... 54, 244, 553, 561
einzeiliger ............................................................ 554
mehrzeiliger ....................................................... 554
Kompatibilität ....................................................... 585
Kompilieren ..................................... 94, 215, 216, 218
Komprimierte Tabelle ........................................ 198
Konfigurationsdatei .................. 215, 229, 242, 324
Beispielkonfiguration .................................... 325
globale .................................................................. 243
sichern .................................................................. 287
Konfigurationsdatei � my.cnf
Konkurrierende Schreibvorgänge ................... 38
Konnektor .............................................. 158, 661, 662
nativer .................................................................. 662
Konsistenz ...................................... 37, 176, 609, 632
Konsole ..................................................................... 250
Bash .......................................................................... 18
Kommandozeile ................................................ 110
MySQL-Client ...................................................... 112
Kontext ..................................................................... 252
Kontrollfluss ............................................................ 572
Konzeptionelles Schema ...................................... 52
Korrektheit ............................................................. 609
Korrelierte Subquery ........................................... 434
Korruption .............................................................. 297
Krähenfuß-Notation ............................................. 76
Kreuzprodukt ........................................................... 67
Künstlicher Schlüssel .......................................... 429
Kurzschreibweise .................................................. 249
L
LANGUAGE ............................................................. 560
LANGUAGE SQL ...................................................... 573
Larsson, Allan ........................................................... 43
LAST ........................................................................... 208
LAST_ALTERED ..................................................... 580
3753.book Seite 799 Donnerstag, 30. April 2015 1:08 13
Index
800
Lastverteilung ........................................................ 367
Latenz .......................................................................... 315
Laufzeit ..................................................................... 250
LCASE ......................................................................... 743
LEAVE ................................................................ 598, 755
LEFT ............................................................................. 739
LENGTH ..................................................................... 739
LIKE ........................................................... 411, 442, 740
LINE ............................................................................ 402
Lineare KEY-Partitionierung ........................... 468
Linearer Zweierpotenz-Algorithmus ........... 467
Lineares Hashing .................................................. 467
LINEARRING ........................................................... 402
LINESTRING .................................................. 402, 403
Linux-User ............................................................... 291
LIST .............................................................................. 458
LIST COLUMNS ...................................................... 464
LIST-Paritionierung ............................................. 463
Lizenz
Open-Source-Lizenz ........................................... 46
Lizenzmodell ........................................................... 40
duales ...................................................................... 48
Lizenznehmer ........................................................... 46
LOAD
Systemwerte ....................................................... 279
LOAD DATA ............................................ 270, 557, 781
LOAD TABLE ............................................................ 557
LOAD_FILE .............................................................. 740
local ............................................................................. 275
LOCATE ..................................................................... 740
Lochkarte .................................................................... 26
LOCK ................................................................... 187, 577
externe .................................................................. 247
LOCK TABLES ............................... 189, 493, 557, 746
Lock-Management ................................................ 187
lock-tables ............................................................... 286
log_bin_basename .............................................. 248
log_bin_trust_function_creators .......... 557, 573
Logarithmen ........................................................... 729
Logging
binäres .................................................................. 556
logisches .............................................................. 370
Logik � Logischer Operator
Login ........................................................................... 235
Logischer Operator ............................................... 592
Log-Tabelle .............................................................. 634
Lokalität .................................................................... 391
LOOP ......................................................... 597, 598, 756
Löschanomalie � Anomalie
Lost Update ............................................................... 175
LOWER ....................................................................... 743
LPAD .......................................................................... 740
LTRIM ........................................................................ 740
M
make .................................................................. 221, 222
install .................................................................... 256
MAKE_SET ................................................................ 741
Maskieren ................................................................ 539
von Benutzereingaben .................................. 540
Maskierungszeichen ........................................... 246
Master-Master-Replikation .............................. 373
Master-Slave-Replikation ................................... 371
max_allowed_packet ................................. 249, 273
max_binlog_size .................................................. 294
max_connect_errors .......................................... 264
max_connections ................................................. 331
MAX_CONNECTIONS_PER_HOUR ............... 506
MAX_QUERIES_PER_HOUR ............................ 506
max_sp_recursion_depth ................................ 627
MAX_UPDATES_PER_HOUR .......................... 506
MAX_USER_CONNECTIONS ........................... 506
MAXVALUE ............................................................. 461
MBRContains ................................................ 408, 765
Mehrbenutzersystem ........................................... 38
Mehrfaches Fetchen ........................................... 607
Mehrfachzuweisung ............................................ 586
Memcached ............................................................. 701
MEMORY ................................................................. 206
Memory-Tabelle .................................................... 628
Mengentheorie ........................................................ 58
MERGE ....................................................................... 207
Metadaten ........................................................ 27, 303
Minimale Systemanforderungen .................... 94
Mixed Format ........................................................ 370
Modellentwurf .......................................................... 52
MODIFIES SQL DATA .................................. 560, 573
mSQL ............................................................................ 43
Multidimensionale Eigenschaft .................... 405
MULTILINESTRING .............................................. 402
MULTIPOINT ................................................ 402, 408
MULTIPOLYGON .................................................. 402
Multiversion Concurrency Control ............... 195
Munin ........................................................................ 279
Mutex ........................................................................ 344
my.cnf ............................................ 229, 242, 243, 325
Block ...................................................................... 245
Optionen .............................................................. 246
my.cnf � Konfigurationsdatei
MYD-Datei ............................................................... 203
MYI-Datei ................................................................. 203
3753.book Seite 800 Donnerstag, 30. April 2015 1:08 13
Index
801
MyISAM .......................................................... 201, 396
innodb_buffer_pool_size .............................. 329
räumlicher Index ............................................. 403
skip-external-locking ...................................... 327
myisam_sort_buffer_size ................................. 329
myisamcheck ........................................................ 300
myisamchk .................................................... 204, 778
myisamchk (Komprimierung) ........................ 785
myisampack (Komprimierung) ...................... 785
mysql ......................................................................... 261
MySQL AB ..................................................... 40, 43, 44
MySQL Administrator ......................................... 261
MySQL Cluster .......................................................... 48
MySQL Community Server ........................ 40, 215
MySQL Enterprise Edition ................................... 48
MySQL Proxy ........................................................... 371
MySQL Query Browser ........................................ 261
MySQL Stored Program Language ....... 548, 550
MySQL Workbench ...... 71, 261, 308, 382, 551, 552
mysql_secure_installation ............................... 225
mysql_upgrade ...................................................... 257
mysql.db .................................................................... 512
mysqladmin ................................................... 261, 262
mysqlbinlog .................................................. 294, 780
mysqlcheck .......................................... 261, 299, 300
mysqld .............................................................. 247, 249
MySQL-Daemon .................................................... 105
MySQLdb ................................................................ 690
mysqldump .................. 261, 281, 284, 381, 555, 779
mysqlfailover .......................................................... 382
mysqlimport .................................................. 261, 273
MySQL-Konsole ...................................................... 551
mysqlreplicate ........................................................ 382
mysqlrpladmin ...................................................... 382
mysqlrplcheck ........................................................ 382
mysqlrplshow ......................................................... 382
mysqlslap ............................................... 261, 302, 783
MySQL-Variable
benutzerdefinierte ........................................... 585
mytop .............................................................. 307, 783
N
Nagios ........................................................................ 267
Name ......................................................................... 649
Namensschema ..................................................... 584
Natürlichsprachliche Suche .............................. 413
Nebenläufigkeit ............................................ 173, 630
Netzwerk
absichern ............................................................. 532
NEW ............................................................................ 635
Newline ...................................................................... 271
NO SQL ............................................................. 560, 573
Node.js ....................................................................... 692
node-mysql ............................................................. 692
Non_unique ............................................................ 425
Non-clustered Index ........................................... 398
Non-repeatable Read ........................................... 184
Normalform .............................................................. 83
dritte ........................................................................ 88
erste ......................................................................... 85
weitere ................................................................... 90
zweite ............................................................... 86, 88
NoSQL ........................................................................ 697
NOT ............................................................................. 592
NOT DETERMINISTIC ......................................... 560
NOT FOUND ............................................................. 613
NOT LIKE ................................................................. 740
NOT NULL ................................................................ 120
Not Only SQL .......................................................... 697
NOT REGEXP ............................................................ 741
NOT-Verknüpfung ................................................ 727
NOW() ........................................................................ 370
NUMERIC_PRECISION ........................................ 579
NUMERIC_SCALE .................................................. 579
Numerische Datentypen
(Ganzzahlen) ............................................. 718, 720
Numerische Datentypen
(reelle Zahlen) ..................................................... 718
Nutzungsrechte ....................................................... 46
O
Object Relational Mapping ............................... 661
Objektebene ............................................................ 488
OCTET_LENGTH .................................................... 739
ODBC .......................................................................... 665
ODBC-Konnektor ................................................. 666
OFF .............................................................................. 253
Offline-Backup ....................................................... 282
OLAP ............................................................................. 33
OLD ............................................................................. 635
OLTP .............................................................................. 33
ON ............................................................................... 253
ON COMPLETION PRESERVE ............................ 647
ON DELETE CASCADE ........................................... 131
ON SCHEDULE ........................................................ 647
Online Analytical Processing � OLAP
Online Transaction Processing � OLTP
Online-Backup ....................................................... 282
3753.book Seite 801 Donnerstag, 30. April 2015 1:08 13
Index
802
OPEN ......................................................................... 604
OPEN CURSOR ........................................................ 758
Open Database Connectivity � ODBC
Open Geospatial Consortium ......................... 402
Open Group ............................................................. 187
Open Source ..................................................... 46, 314
Open Source Initiative .......................................... 47
OpenGIS Simple Features Specification
for SQL ................................................................. 402
Operator, logischer� logischer Operator
Operatorgraph ........................................................ 153
Optimierer ............................................... 153, 158, 168
Optimierung ............................................................. 42
Kompilierung ..................................................... 216
OPTIMIZE .................................................................. 778
OPTIMIZE PARTITION ......................................... 473
OPTIMIZE TABLE ......................................... 203, 299
OPTIMIZE_TABLE .................................................. 491
optimizer_prune_level ....................................... 169
optimizer_search_depth ................................... 169
Optionen
Wert ...................................................................... 249
Zuweisung .......................................................... 249
Optionsdatei � Konfigurationsdatei
Optionsname ......................................................... 246
OR ................................................................................ 592
Oracle .................................................................... 40, 45
Originator ................................................................ 649
OR-Verknüpfung ................................................... 728
OS X 10.2.x .............................................................. 108
OUT ............................................................................. 641
OUTFILE .................................................................... 276
OUT-Parameter ..................................................... 566
P
PACK_KEYS ............................................................. 202
Paging ........................................................................ 329
Paketgröße ............................................................... 273
Paketmanager ........................................................ 256
apt ........................................................................... 217
Parameter ....................................................... 246, 564
PARAMETER_STYLE ............................................ 580
Parametrisierte Anweisung � Prepared
Statement
Parser ......................................................................... 158
partition .................................................................... 457
PARTITION BY RANGE() ..................................... 460
Partition Lock Pruning ....................................... 474
Partition Pruning .................................................. 473
Partition Selection ............................................... 474
Partitionieren ......................................................... 455
zusammengesetztes ...................................... 468
Partitionierung
basierend auf mehreren Spalten ............... 464
Einschränkungen ............................................. 478
Hinzufügen von Partitionen ........................ 471
horizontale ......................................................... 456
vertikale ............................................................... 456
Partitionsfunktion ............................................... 458
Partitionsschlüssel ...................................... 458, 459
Partitionsunterstützung ................................... 457
PASSWORD ................................... 239, 468, 513, 770
Passwort
neu setzen ........................................................... 265
root ........................................................................ 264
Passwort-Hashing ................................................ 530
PATH ................................................................... 111, 232
PDO ............................................................................. 674
Percona ..................................................................... 325
Percona Toolkit ............................................. 321, 426
Percona XtraBackup ............................................ 291
Performance Schema
Aggregattabelle ................................................ 358
Digest ................................................................... 360
Einstellungen ..................................................... 345
history .................................................................. 343
Messinstrument ................................................ 345
Normalisierung ................................................ 360
Performance Reports ...................................... 365
PERFORMANCE_SCHEMA
(Datenbank) ................................................... 341
PERFORMANCE_SCHEMA (Engine) ........... 341
performance_timers ....................................... 359
setup_actors ...................................................... 346
setup_timers ...................................................... 359
Statement Analysis ......................................... 363
Statistiken .......................................................... 360
Statusvariablen ................................................ 353
summary .............................................................. 357
Timer ..................................................................... 347
TRUNCATE ........................................................... 361
Zugriffsstatistiken ........................................... 359
Peripherie-Speicherverwaltung ....................... 156
Perl ............................................................................. 684
perl-DBD-MySQL ................................................... 685
Perls Database Interface � DBI
Pfad � Umgebungsvariable
Phantom-Read ........................................................ 185
PHP ............................................................................. 674
3753.book Seite 802 Donnerstag, 30. April 2015 1:08 13
Index
803
PHP Data Objects � PDO
PING .................................................................. 267, 770
Pipe ............................................................................ 104
Plugin ................................................................ 258, 457
Plugin-API ................................................................ 258
Plugin-Status ........................................................... 259
POINT ..................................................... 402, 403, 765
Point-in-Time Recovery ..................................... 295
POLYGON ................................................................ 402
Port .......................................................... 246, 247, 326
Portabilität ................................................................ 611
POSITION ................................................................. 740
POSIX-Thread ........................................................... 94
possible_keys ......................................................... 421
POW ........................................................................... 409
PREPARE ........................................................... 577, 777
Prepared Statement ........................... 541, 577, 664
Primärindex ........................................................... 390
PRIMARY KEY ........................................................ 428
Privater Schlüssel .................................................. 535
Privilegientabelle .................................................. 228
priv-Tabelle ............................................................... 512
proc ............................................................................. 556
PROCESS .................................................................. 504
PROCESSLIST ................................................. 269, 770
procs_priv ................................................................. 512
Profildatei ................................................................. 233
Profildatei � bashrc
Programmiersprache ............................................ 42
prozedurale ........................................................ 550
� Konnektor
Projektion ................................................................... 63
Prozedurkopf .......................................................... 559
Prozess � Daemon
Prozessliste .............................................................. 218
pt .................................................................................. 321
pt-visual-explain ................................................... 427
Python ...................................................................... 689
Q
QCache_free_blocks ............................................ 166
QCache_free_memory ....................................... 166
Qcache_hits ............................................................. 166
QCache_inserts ...................................................... 166
Qcache_lowmem_prunes ................................. 166
Qcache_not_cached ............................................. 167
Qcache_queries_in_cache ................................ 167
QCache_total_blocks ........................................... 166
Quellcode ........................................... 47, 94, 216, 234
Quelldistribution ................................................... 218
query_cache_size ......................................... 165, 329
query_cache_type ............................... 164, 165, 166
query_cache_wlock_invalidate ...................... 166
Query-Cache ................................... 158, 161, 162, 337
QUOTE ........................................................................ 741
R
RANGE ....................................................................... 458
RANGE COLUMNS ................................................ 464
RANGE-Partitionierung ..................................... 459
Raumbezogene Erweiterung ........................... 402
Raymond, Eric .......................................................... 47
RDBMS ........................................................................ 28
READ .......................................................................... 188
READ COMMITTED ....................................... 181, 183
READ UNCOMMITTED ................................. 181, 182
read_buffer_size ................................................... 328
read_rnd_buffer_size ......................................... 328
READS SQL DATA ......................................... 560, 573
REBUILD PARTITION ........................................... 473
Rechte ................................................................ 481, 556
Rechtemanagement ............................................ 481
Recovery ..................................................................... 39
Redo ........................................................................... 301
Redundanz ......................................................... 30, 38
Referentielle Integrität ....................... 129, 131, 194
REGEXP .............................................................. 411, 741
Regulärer Ausdruck .............................................. 411
Rekursion ......................................................... 577, 627
Rekursionstiefe ...................................................... 628
Rekursiv � Rekursion
Relation ........................................................... 27, 58, 61
Relationale Algebra .................................. 58, 61, 153
Relationale-Algebra-Verwaltung ..................... 153
Relationenverwaltung ......................................... 155
Relationship .............................................................. 70
Relay-Log .................................................................. 370
RELEASE SAVEPOINT ................................... 181, 745
RELOAD ........................................................... 263, 504
REORGANIZE PARTITION .................................. 472
REPAIR .............................................................. 298, 778
REPAIR PARTITION .............................................. 473
REPAIR_TABLE ....................................................... 491
REPEAT ....................................................................... 741
REPEAT UNTIL ..................................... 597, 600, 757
REPEATABLE READ ....................................... 181, 184
REPLACE .................................................................... 741
REPLICATION CLIENT .......................................... 505
3753.book Seite 803 Donnerstag, 30. April 2015 1:08 13
Index
804
REPLICATION SLAVE ................................... 375, 505
Replikation ..................................... 42, 367, 376, 378
asynchrone ........................................................ 369
Ausfallsicherheit ............................................... 367
Backup ................................................................. 296
Binär-Logging am Master-Knoten ............ 379
CHANGE MASTER ............................................. 381
Lastverteilung .................................................... 367
logische ................................................................ 369
Master .................................................................. 368
Master-Master- ................................................. 373
Master-Slave- ...................................................... 371
Master-Slave- mit zwischengeschaltetem
Slave .................................................................. 372
mehrstufige Master-Slave-Replikation ... 372
semisynchrone ................................................. 369
Slave ...................................................................... 368
statementbasierte ........................................... 369
Topologie .................................................... 368, 371
zeilenweise ................................................ 369, 370
REQUIRE ................................................................... 506
RESET QUERY CACHE .......................................... 784
RESIGNAL ....................................................... 621, 760
Restrukturierung ................................................... 30
RETURN ..................................................................... 752
RETURNS .................................................................... 571
REVERSE .................................................................... 741
Reverse Engineering .................................... 83, 309
Dekompilieren ..................................................... 46
REVOKE .................................................. 485, 508, 776
RIGHT ......................................................................... 739
RLIKE .......................................................................... 741
ROLLBACK ............................................... 178, 577, 745
Rollback .................................................................... 180
ROLLBACK TO SAVEPOINT ....................... 180, 745
ROUTINE
ROUTINE_BODY ............................................... 579
ROUTINE_CATALOG ....................................... 579
ROUTINE_COMMENT .................................... 580
ROUTINE_DEFINITION .................................. 580
ROUTINE_NAME ............................................... 579
ROUTINE_SCHEMA ......................................... 579
ROUTINE_TYPE ................................................. 579
ROUTINES ................................................................. 577
ROUTINES-Tabelle ................................................ 577
RPAD ......................................................................... 740
RPM ............................................................................ 106
RTRIM ....................................................................... 740
Ruby ........................................................................... 687
Ruby on Rails ......................................................... 687
ruby-mysql ............................................................. 687
Rückgabe .................................................................. 559
Rückgabeparameter ............................................ 566
Rückgabewert .......................................................... 571
atomarer ............................................................. 569
Rumpf ................................................................ 559, 571
S
Sakila ............................................................................ 40
SAVEPOINT .............................................................. 745
Savepoint ................................................................. 180
Schema
konzeptionelles .................................................... 52
Schleife ............................................................ 590, 597
Schlüssel .............................................................. 60, 61
Fremdschlüssel ............................................. 70, 79
künstlicher .................................................. 60, 429
künstlicher Primärschlüssel .................. 62, 118
Primärschlüssel ............................................ 62, 72
privater ................................................................. 535
Schlüsselkandidat .............................................. 62
Superschlüssel ..................................................... 62
zusammengesetzter .......................................... 86
Schnittstelle .................................................... 42, 660
Schreibsperre � LOCK
Schwachstellen ...................................................... 254
Scope � Gültigkeitsbereich
SCP ............................................................................. 290
SECURITY_TYPE .................................................... 580
Segmentverwaltung ............................................. 155
Sekundärindex ....................................................... 391
SELECT ............................................. 123, 490, 577, 724
SELECT INTO ..................................... 577, 585, 758
SELECT INTO OUTFILE .................................... 782
SELECT VERSION .............................................. 748
select_type .......................................................... 423
Selection Push-down ...................................... 170
ungebundenes ................................. 569, 626, 641
Selektion ..................................................................... 63
Semikolon ................................................................ 274
Semisynchrone Replikation ............................. 369
Seq_in_index ......................................................... 425
SERIALIZABLE ......................................................... 186
Server .................................................................. 96, 249
Serverhardware .................................................... 290
Server-ID .................................................................... 375
Serverport ................................................................ 533
Servervariable
anzeigen .............................................................. 268
Session ...................................................... 251, 252, 253
Sessionkontext .................................................. 253
3753.book Seite 804 Donnerstag, 30. April 2015 1:08 13
Index
805
Sessionvariable � Sitzungsvariable
SET ..................................................... 252, 585, 748, 758
SET AUTOCOMMIT .............................. 179, 577, 744
SET GLOBAL TRANSACTION ISOLATION
LEVEL ..................................................................... 182
SET SESSION TRANSACTION ISOLATION
LEVEL ...................................................................... 181
SET TRANSACTION ISOLATION LEVEL ......... 745
Shell
History .................................................................. 236
Kommandozeileninterpreter ....................... 216
SHOW ................................................................. 577, 771
SHOW CHARACTER SET ................................. 792
SHOW COLLATION .......................................... 792
SHOW CREATE ................................................... 563
SHOW CREATE EVENT ........................... 650, 755
SHOW CREATE FUNCTION ........................... 752
SHOW CREATE PROCEDURE ................ 581, 751
SHOW CREATE TRIGGER .............................. 640
SHOW CREATE VIEW ...................................... 494
SHOW DATABASES ......................... 114, 505, 721
SHOW ENGINES ................................................ 785
SHOW ERRORS ................................................. 789
SHOW EVENTS .......................................... 648, 755
SHOW FUNCTION STATUS ......... 577, 580, 752
SHOW GRANTS .......................................... 511, 776
SHOW MASTER STATUS ................................ 764
SHOW OPEN TABLES ...................................... 749
SHOW PLUGINS ................................................ 785
SHOW PROCEDURE STATUS ..... 577, 580, 750
SHOW PROFILE .................................................. 783
SHOW SLAVE STATUS ............................ 378, 764
SHOW STATUS .................................................. 304
SHOW TABLES ........................................... 627, 723
SHOW TRIGGERS ..................................... 637, 753
SHOW VARIABLES ................................... 252, 748
SHOW VIEW ....................................................... 494
SHOW WARNINGS .................................. 123, 789
SHUTDOWN ........................................................... 505
Sicherheit ........................................................ 481, 547
Sicherheits- und Benutzerkonzept ................ 519
Sicherheitsschicht ................................................. 521
Sicherheitsupdate ................................................. 254
Sicherung ................................................................. 555
Sicht ........................................................... 524, 555, 651
aktualisierbare ......................................... 525, 654
eingeschränkte .................................................. 652
updatefähige ..................................................... 654
SIGNAL ............................................................ 619, 760
single-transaction ................................................ 286
Sitzungsvariable ............................................ 251, 252
Skalierung
horizontale ........................................................ 699
vertikale .............................................................. 699
skip_external_locking ........................................ 247
Skript
Absicherung ....................................................... 225
Initialisierung .................................................... 224
Startskript ........................................................... 230
Socket ...................................................... 246, 247, 326
Software
Free Software ....................................................... 47
proprietäre ............................................................ 46
quelloffene ............................................................ 46
Solaris .......................................................................... 44
sort_buffer_size .................................. 254, 328, 338
Sort-Cache ................................................................ 338
SOUNDEX ................................................................. 742
SOUNDS LIKE .......................................................... 742
SOURCE ............................................................. 552, 782
Sourceforge ............................................................. 297
SPACE ......................................................................... 742
Spaltenebene .......................................................... 488
Spatial Extension ................................................. 402
SPECIFIC_NAME .................................................... 579
Speichermedium
externes ............................................................... 290
Speicherort .............................................................. 462
Speicherschema ...................................................... 28
Sperre � Lock
Sperren
von Zeilen ............................................................ 190
Spion .......................................................................... 236
Sprache ....................................................................... 54
Sprechende Namen ............................................... 54
Sprechende Variablennamen .......................... 584
SQL ................................................................................ 28
SQL SECURITY ............................................... 497, 561
SQL SECURITY DEFINER ...................................... 561
SQL SECURITY INVOKER ..................................... 561
SQL_CACHE .................................................... 164, 784
SQL_DATA_ACCESS ............................................ 580
SQL_MODE .......................................... 580, 638, 640
SQL_NO_CACHE .......................................... 164, 784
SQL_PATH .............................................................. 580
SQL-Einschleusung .............................................. 538
SQLEXCEPTION ...................................................... 612
SQL-Injection .......................................................... 538
SQL-State .......................................................... 611, 789
SQLWARNING ......................................................... 613
SQRT .......................................................................... 409
SSH .............................................................................. 533
3753.book Seite 805 Donnerstag, 30. April 2015 1:08 13
Index
806
SSL ............................................................................... 533
ssl-ca ........................................................................... 535
ssl-cert ........................................................................ 535
ssl-key ........................................................................ 535
ST_AsGeoJSON � GIS-Funktionen
Stallman, Richard .................................................... 47
Standardfunktionen ............................................ 729
Standardkonfiguration ....................................... 216
Standardwert .......................................................... 587
START SLAVE ........................................................... 763
START TRANSACTION .............. 179, 577, 630, 744
Starten
automatisch ....................................................... 231
Starts ......................................................................... 649
Statement ......................................................... 115, 638
STATUS ......................................... 268, 649, 749, 770
Statusvariable
accounts ............................................................... 354
View ....................................................................... 355
STOP SLAVE ............................................................ 764
Storage-Engine ...................................... 127, 159, 190
Speichermanagement ...................................... 42
Stored Function ........................................... 549, 569
Stored Procedure � Gespeicherte Prozedur
STRCMP ..................................................................... 743
String ........................................................................... 411
String-Datentypen ................................................ 719
SUBPARTITION BY KEY() ................................... 469
Subquery .................................................................. 432
korrelierte ............................................................ 434
SUBSTR ...................................................................... 742
SUBSTRING .............................................................. 742
SUBSTRING_INDEX .............................................. 742
Suche
natürlichsprachliche ............................... 135, 413
Sun Microsystems .................................................. 44
SUPER .............................................. 251, 264, 503, 556
Surrogatschlüssel � Künstlicher Schlüssel
Swapping .................................................................. 329
Syntaxfehler ............................................................ 559
Syntax-Highlighting ............................................ 553
System R .................................................................... 151
System V ................................................................... 232
Systemanforderungen
minimale ................................................................ 94
Systemdienst ......................................................... 230
Systemleiche ........................................................... 527
T
Tabelle ......................................................................... 58
komprimierte ..................................................... 198
optimieren � OPTIMIZE TABLE
partitionierte, erzeugen ................................ 458
reparieren ............................................................ 299
sperren .................................................................. 189
temporäre ........................................................... 626
virtuelle ................................................................. 651
Tabellen-Cache ...................................................... 264
Tabellendump ............................................... 284, 285
Tabellenebene ........................................................ 487
Tabellenname .......................................................... 58
Tabellenoptimierung .......................................... 263
Table ........................................................................... 638
table_open_cache ................................................ 329
tables_priv ................................................................ 512
Tablespace ............................................................... 198
tail ............................................................................... 289
tar ....................................................................... 216, 290
Task
geplanter ............................................................. 641
TCP/IP .......................................................................... 95
TEMPORARY ........................................................... 626
Terminal .................................................................... 110
Terminalfenster .................................................... 219
Ternäre Logik ........................................................... 591
Text-Datentypen .................................................... 719
Texteditor ................................................................. 552
Textsammlung ....................................................... 411
Thread ............................................................. 268, 330
thread_cache_size ................................................ 329
Time zone ............................................................... 649
Timing ....................................................................... 638
TO_BASE64 .............................................................. 742
TO_DAYS(datum) ................................................. 462
Transaktion ...................................... 38, 173, 175, 630
Transaktionsanweisung ...................................... 577
Transaktionsbefehl ............................................. 640
Transaktions-ID
globale � GTID
Transitive Abhängigkeit ...................................... 88
Transparenz ............................................................ 636
Treiber ....................................................................... 662
TRIGGER ......................................................... 496, 638
Trigger ............................................ 549, 556, 632, 638
TRIGGER_CATALOG ............................................ 639
TRIGGER_NAME .................................................... 639
TRIGGER_SCHEMA .............................................. 639
3753.book Seite 806 Donnerstag, 30. April 2015 1:08 13
Index
807
TRIM ........................................................................... 743
true .............................................................................. 591
TrueWORM .............................................................. 283
TRUNCATE ............................................................... 726
TRUNCATE TABLE ................................................ 493
Trunkierung ............................................................ 443
Tuning ....................................................................... 316
Tupel ............................................................................. 59
Tupelverwaltung .................................................... 155
tx_isolation (Variable) ........................................ 182
Type ........................................................................... 649
U
Überladen ................................................................ 589
Ubuntu Linux ......................................................... 102
UCASE ........................................................................ 743
Umgebungsvariable ............................. 111, 232, 262
Pfadangaben ...................................................... 231
Pfadeinstellungen ............................................ 233
Umkreissuche .............................................. 402, 406
UML .............................................................................. 76
Unbounded Select ....................................... 569, 641
Undo .................................................................. 293, 301
Undo-Handler ...................................................... 609
Ungebundenes Select ................................. 569, 641
Ungebundenes SELECT-Statement ............... 626
UNHEX ....................................................................... 743
Unified Modeling Language � UML
UNINSTALL PLUGIN ............................................. 785
Union .......................................................................... 66
UNIQUE-Schlüssel ............................................... 459
UNIREG ........................................................................ 43
UNIX_TIMESTAMP(datum) ............................. 462
UNLOCK TABLES .......................... 189, 557, 577, 746
Unterpartition ....................................................... 468
UNTIL ....................................................................... 600
UPDATE .................................................... 241, 491, 725
Statement ............................................................ 265
Update ....................................................................... 254
UPGRADE ................................................................. 779
Upgrade ............................................................ 254, 257
UPPER ........................................................................ 743
Uptime ...................................................................... 268
Urheberrecht ............................................................ 46
USAGE ....................................................................... 504
USE ............................................................................... 721
user (Tabelle) ............................................................ 512
Usermanagement ......................................... 235, 241
V
V8-Engine ................................................................. 692
VALUES ...................................................................... 121
VALUES IN() ............................................................. 463
VALUES LESS THAN ............................................. 459
Variable ............................................................. 275, 583
globale ................................................................... 251
Gültigkeitsbereich ............................................ 587
lokale ...................................................................... 251
Verbindung
aktive ..................................................................... 251
verschlüsselte .................................................... 533
Verbindung � Session
Verbindungsüberprüfung ................................ 483
Verbund ............................................................... 66, 67
Vereinigung .............................................................. 66
Verifizierung ........................................................... 236
Vermittlungsschicht ........................................... 665
Verschachtelte Abfrage � Subquery
Verschlüsseln .......................................................... 531
Verschlüsselungsalgorithmus ......................... 535
Versionierung
Versionsnummer ............................................... 45
Vertikale Skalierung ........................................... 699
Verwendung von Cursors ................................ 604
Verzahnungen
von Operationen ............................................... 174
View � Sicht
Virtuelle Tabelle ..................................................... 651
Virtueller Einbenutzerbetrieb .......................... 176
Volltextindex .................................................. 135, 411
Volltextsuche .................................................. 411, 761
Abfrageerweiterung ........................................ 418
boolesche ............................................................. 414
boolesche Operatoren ..................................... 415
IN BOOLEAN MODE ........................................ 414
Länge der Wörter .............................................. 417
MATCH() AGAINST() ........................................ 412
natürlichsprachliche Abfrage ...................... 412
Probleme und Einschränkungen ............... 419
Relevanzwert ...................................................... 413
Stoppwörter ....................................................... 416
Stoppwörter-Liste ............................................ 416
Vorgehensmodell
iteratives ................................................................. 55
W
wait_timeout .......................................................... 252
Waiting for next activation ............................. 650
3753.book Seite 807 Donnerstag, 30. April 2015 1:08 13
Index
808
Waiting for scheduler to stop ......................... 650
Waiting on empty queue .................................. 650
Warm Copy .............................................................. 283
Warnung ................................................................. 609
Wartungsarbeiten ................................................ 550
Web 2.0 ........................................................................ 34
Web-Programmierung ....................................... 674
WEIGHT_STRING .................................................. 743
Well-Known Binary � WKB
Well-Known Text � WKT
WHILE ...................................................... 597, 601, 757
Widenius, Michael .................................................. 43
Wiederherstellung ................................................ 279
Wiederherstellungsmethode ........................... 287
Wiederkehrende Aufgaben ............................... 548
Wiederverwendung
von Code .............................................................. 547
Wildcard .................................................................... 123
Wildcard-Character .............................................. 443
Winkelfunktionen ................................................ 728
WITH ......................................................................... 506
WITH GRANT OPTION ......................................... 485
--with-partition ...................................................... 458
WKB ........................................................................... 403
WKT ........................................................................... 403
Workflow .................................................................. 527
WRITE ......................................................................... 188
Wurzelknoten ......................................................... 393
X
X509 ............................................................................ 536
XA-Transaktion ...................................................... 187
XML ............................................................................... 29
XOR ............................................................................. 592
Verknüpfung ...................................................... 728
XtraBackup .................................................... 292, 780
Y
YEAR(datum) .......................................................... 462
Z
Zahlensysteme ....................................................... 729
Zeichenkette ............................................................ 411
Zeiger .............................................................. 602, 604
Zeile
sperren .................................................................. 190
Zeilenebene .................................................... 488, 523
Zeit ............................................................................... 719
aktuelle ................................................................ 734
Zeitangabe
erzeugen .............................................................. 733
Formatierung .................................................... 736
umwandeln ........................................................ 733
Zeitarithmetik ........................................................ 732
Zeiteinheiten .......................................................... 730
Zeitformate .............................................................. 731
Zeitstempel .................................................... 556, 644
Zertifikat ................................................................... 534
Zugriff
gekapselter ......................................................... 520
Zugriffsberechtigungssystem ......................... 483
Zugriffsphase .......................................................... 483
Zusammengesetztes Partitionieren ............ 468
Zustand
konsistenter ........................................................ 292
Zuweisung ............................................................... 585
Zuweisungszeichen ............................................. 249
Zweierpotenz-Algorithmus
linearer ................................................................. 467
Zwischentabelle ....................................................... 79
3753.book Seite 808 Donnerstag, 30. April 2015 1:08 13
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne emp-fehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Stefan Pröll, Jahrgang 1983, arbeitet in einem Forschungs-zentrum für IT-Sicherheit und beschäftigt sich mit Scientific Data.
Stefan Pröll, Eva Zangerle, Wolfgang Gassler
MySQL – Das umfassende Handbuch808 Seiten, gebunden, mit DVD, 3. Auflage 2015 49,90 Euro, ISBN 978-3-8362-3753-6
www.rheinwerk-verlag.de/3843
Eva Zangerle arbeitet seit 2007 als wissenschaftliche Mitar-beiterin am Lehrstuhl für Datenbanken und Informations- systeme am Institut für Informatik der Universität Innsbruck.
Wolfgang Gassler absolvierte das Informatikstudium an der Universität Innsbruck in Österreich und ist seit 2007 wissen-schaftlicher Mitarbeiter in der Forschungsgruppe Datenban-ken und Informationssysteme an der Universität Innsbruck.
Wissen, wie’s geht.