59
Leseprobe In 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 Handbuch 808 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.

MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

Embed Size (px)

Citation preview

Page 1: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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.

Page 2: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 3: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 4: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 5: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 6: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 7: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 8: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 9: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 10: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 11: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 12: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 13: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 14: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 15: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 16: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 17: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 18: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 19: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 20: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 21: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 22: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 23: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 24: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 25: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 26: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 27: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 28: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 29: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 30: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 31: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 32: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 33: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 34: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 35: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 36: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 37: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 38: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 39: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 40: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 41: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 42: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 43: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 44: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 45: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 46: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 47: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 48: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 49: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 50: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 51: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 52: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 53: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 54: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 55: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 56: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 57: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 58: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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

Page 59: MySQL – Das umfassende Handbuch - Cloud Object Storage · MySQL-Version 5.7 zu aktualis ieren, war diese Na chricht für uns das Startsignal, doch etwas konkreter über eine Aktualisierung

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.