75
Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Stefan Pröll, Eva Zangerle, Wolfgang Gassler

MySQL 5.6Das umfassende Handbuch

Page 2: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Auf einen Blick

Auf einen Blick

1 Datenbanken – eine allgemeine Einleitung ................................................. 23

2 Datenbankmodellierung ..................................................................................... 49

3 Schnellstart-Tutorial ............................................................................................. 91

4 Einführung in die Beispieldatenbank ............................................................. 121

5 Architektur ............................................................................................................... 147

6 Manuelle Installation, Plugins und Upgrades ............................................. 211

7 MySQL administrieren ......................................................................................... 255

8 Replikation und Hochverfügbarkeit ................................................................ 361

9 Anfrageoptimierung ............................................................................................. 375

10 Sicherheit .................................................................................................................. 467

11 Gespeicherte Programme und Events ............................................................ 529

12 Softwareentwicklung mit MySQL .................................................................... 639

13 NoSQL mit MySQL .................................................................................................. 675

A Referenz .................................................................................................................... 695

Page 3: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

5

Inhalt

Vorwort .................................................................................................................................................. 15

TEIL I Erste Schritte

1 Datenbanken – eine allgemeine Einleitung 23

1.1 Grundlagen von Datenbanken ........................................................................................ 23

1.1.1 Die Geschichte von Datenbanken .................................................................... 23

1.1.2 Moderne Datenbanken und Datenmodelle .................................................. 25

1.1.3 Vorteile ...................................................................................................................... 28

1.1.4 Einsatzgebiete ......................................................................................................... 30

1.1.5 Anforderungen an ein Datenbankmanagementsystem .......................... 34

1.2 MySQL ......................................................................................................................................... 38

1.2.1 Einleitung und Vorstellung ................................................................................. 38

1.2.2 Die Geschichte von MySQL ................................................................................. 41

1.2.3 Open Source und Lizenzen .................................................................................. 44

1.3 Zusammenfassung ............................................................................................................... 47

2 Datenbankmodellierung 49

2.1 Einführung in den Datenbankentwurf ........................................................................ 49

2.1.1 Anforderungsanalyse ............................................................................................ 50

2.1.2 Konzeptioneller Datenbankentwurf ................................................................ 51

2.1.3 Logischer Datenbankentwurf ............................................................................ 52

2.1.4 Physischer Datenbankentwurf .......................................................................... 52

2.1.5 Der Datenbankentwurf im Überblick .............................................................. 53

2.2 Ein konkretes Beispiel: Flughafenverwaltung ......................................................... 54

2.3 Das relationale Datenbankenmodell ........................................................................... 55

2.3.1 Tabellen, Spalten und Zeilen .............................................................................. 55

2.3.2 Schlüssel identifizieren Datensätze ................................................................. 57

2.3.3 Die relationale Algebra ......................................................................................... 58

2.3.4 Joins ............................................................................................................................ 63

2.4 Datenbankdesign .................................................................................................................. 67

2.4.1 Das ER-Diagramm .................................................................................................. 67

Page 4: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

6

2.4.2 Entitäten ................................................................................................................... 68

2.4.3 Beziehungen ............................................................................................................ 72

2.5 Normalformen ........................................................................................................................ 81

2.5.1 Die erste Normalform ........................................................................................... 82

2.5.2 Die zweite Normalform ....................................................................................... 84

2.5.3 Die dritte Normalform .......................................................................................... 86

2.5.4 Weitere Normalformen ....................................................................................... 88

2.6 Zusammenfassung ............................................................................................................... 88

3 Schnellstart-Tutorial 91

3.1 MySQL herunterladen ......................................................................................................... 91

3.2 Minimale Systemanforderungen ................................................................................... 92

3.3 MySQL installieren ................................................................................................................ 93

3.3.1 Schnellinstallation unter Windows ................................................................. 94

3.3.2 Schnellinstallation unter Linux ......................................................................... 100

3.3.3 Schnellinstallation unter Mac OS X ................................................................. 105

3.3.4 Zusammenfassung der Installation ................................................................. 106

3.4 Endlich loslegen – MySQL ausprobieren ..................................................................... 107

3.5 Übersicht der wichtigsten Befehle ................................................................................ 110

3.5.1 Datenbanken anlegen und löschen ................................................................. 111

3.5.2 Tabellen anlegen, Daten einfügen und löschen .......................................... 113

3.5.3 Datensätze anlegen, abfragen und löschen ................................................. 118

3.5.4 Datensätze abfragen und anzeigen ................................................................. 120

3.6 Zusammenfassung ............................................................................................................... 120

4 Einführung in die Beispieldatenbank 121

4.1 Die Datenbank für das Szenario anlegen ................................................................... 121

4.2 Die Beispieldatenbank auf der Buch-DVD ................................................................. 137

4.3 Hilfe bei der Arbeit mit MySQL ....................................................................................... 139

4.3.1 Fehlermeldungen und Warnungen ................................................................. 139

4.3.2 Online-Manual und weitere Anlaufstellen ................................................... 141

4.4 Zusammenfassung ............................................................................................................... 142

Page 5: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

7

TEIL II MySQL-Administration

5 Architektur 147

5.1 Einführung ................................................................................................................................ 147

5.1.1 Teile einer Datenbank – das Fünf-Schichten-Modell ................................. 147

5.1.2 MySQL-Architektur ................................................................................................ 153

5.2 Abfrageverarbeitung ........................................................................................................... 157

5.2.1 Der Query-Cache – das Kurzzeitgedächtnis von MySQL ........................... 157

5.2.2 Der Optimierer – die Intelligenz von MySQL ................................................. 164

5.2.3 Execution-Engine – der Arbeiter von MySQL ................................................ 169

5.3 Transaktionen und Nebenläufigkeit ............................................................................ 170

5.3.1 Nebenläufigkeit ...................................................................................................... 170

5.3.2 Transaktionen ......................................................................................................... 171

5.3.3 Lock-Management ................................................................................................. 184

5.4 Storage-Engines ..................................................................................................................... 187

5.4.1 Grundlagen des Storage-Engine-Plugin-Systems ....................................... 187

5.4.2 InnoDB ....................................................................................................................... 191

5.4.3 MyISAM ..................................................................................................................... 197

5.4.4 MEMORY ................................................................................................................... 202

5.4.5 Sonstige Engines .................................................................................................... 203

5.4.6 Fremdhersteller-Engines ..................................................................................... 206

5.4.7 Vergleichstabelle .................................................................................................... 207

5.5 Zusammenfassung ............................................................................................................... 208

6 Manuelle Installation, Plugins und Upgrades 211

6.1 Von neuen Quellen – MySQL selbst kompilieren und installieren ................. 212

6.1.1 Voraussetzungen ................................................................................................... 212

6.1.2 MySQL kompilieren und installieren ............................................................... 214

6.1.3 Die Installation grundlegend absichern ......................................................... 219

6.1.4 Anlegen der Konfigurationsdatei ..................................................................... 224

6.1.5 Den MySQL-Dienst starten ................................................................................. 225

6.1.6 Zusammenfassung der Installation ................................................................. 229

6.2 Usermanagement ................................................................................................................. 229

6.3 Die zentrale Konfigurationsdatei »my.cnf« .............................................................. 235

6.3.1 Die Syntax der Konfigurationsdatei ................................................................. 237

6.3.2 Die grundlegenden Einstellungen .................................................................... 239

Page 6: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

8

6.3.3 Kommandozeilenargumente ............................................................................. 242

6.3.4 Servervariablen setzen und ändern ................................................................. 243

6.4 MySQL aktualisieren und erweitern ............................................................................. 247

6.4.1 Upgrades ................................................................................................................... 247

6.4.2 Die Plugin-API .......................................................................................................... 251

6.5 Zusammenfassung ............................................................................................................... 254

7 MySQL administrieren 255

7.1 Der bordeigene Werkzeugkasten .................................................................................. 255

7.2 Der Name ist Programm: »mysqladmin« ................................................................... 256

7.2.1 Datenbanken anlegen und löschen ................................................................. 256

7.2.2 Caches leeren ........................................................................................................... 257

7.2.3 Das »root«-Passwort ändern .............................................................................. 258

7.2.4 Den Server überwachen ....................................................................................... 261

7.3 Daten importieren und exportieren ............................................................................. 264

7.3.1 Daten aus Dateien importieren ........................................................................ 264

7.3.2 Daten exportieren .................................................................................................. 270

7.4 Richtig sichern – Backups und Strategien .................................................................. 272

7.4.1 Die Basics .................................................................................................................. 272

7.4.2 Physisches oder logisches Backup .................................................................... 274

7.4.3 Online- und Offline-Backups .............................................................................. 276

7.4.4 Volle und inkrementelle Backups ..................................................................... 277

7.4.5 Logische Backups und Wiederherstellung mit »mysqldump« ............... 278

7.4.6 Physisches Offline-Backup – schnell, sicher und effizient ....................... 282

7.4.7 MySQL Hot Copy ..................................................................................................... 285

7.4.8 InnoDB-Tabellen sichern mit Percona XtraBackup ..................................... 286

7.4.9 Recovery von Bedienfehlern – zeitpunktbezogene Wiederherstellung 288

7.4.10 Backups mit Replikation ...................................................................................... 291

7.4.11 Backups automatisieren ...................................................................................... 291

7.5 Tabellenwartung mit »mysqlcheck« ............................................................................ 292

7.5.1 MyISAM-Tabellen überprüfen und reparieren ............................................. 292

7.5.2 Die Erholungsphase – Crash Recovery ............................................................ 295

7.6 Performance-Check mit »mysqlslap« .......................................................................... 297

Page 7: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

9

7.7 MySQL beobachten ............................................................................................................... 298

7.7.1 Die »INFORMATION_SCHEMA«-Tabellen ...................................................... 298

7.7.2 Den Status abfragen ............................................................................................. 298

7.7.3 Statistiken zu InnoDB-Tabellen ......................................................................... 299

7.7.4 MySQL überwachen .............................................................................................. 301

7.8 Die grafischen Werkzeuge im Überblick ..................................................................... 302

7.8.1 MySQL Workbench ................................................................................................ 302

7.8.2 MySQL Administrator ........................................................................................... 308

7.8.3 Weitere Tools ........................................................................................................... 311

7.9 Optimierungstechniken ..................................................................................................... 311

7.9.1 Leistungsschau ........................................................................................................ 311

7.9.2 Profiling ..................................................................................................................... 314

7.9.3 Das Percona Toolkit ............................................................................................... 318

7.9.4 Die wichtigsten Variablen der zentralen Konfigurationsdatei

im Überblick ............................................................................................................. 321

7.9.5 MySQL feineinstellen – Empfehlungen eines Skripts ................................ 326

7.10 Exakte Statistiken mit dem Performance Schema ................................................. 339

7.10.1 Grundlagen des Performance Schemas ......................................................... 340

7.10.2 Instrumente einrichten und Messvorgaben anpassen ............................. 343

7.10.3 Anpassen der Einstellungen und Ausgabe von Statusvariablen ............ 351

7.10.4 Auswertung des Performance Schemas ......................................................... 352

7.10.5 Den Gesamtüberblick mit Summary-Tabellen behalten .......................... 356

7.10.6 Aufspüren von Problemen .................................................................................. 359

8 Replikation und Hochverfügbarkeit 361

8.1 Grundprinzipien ..................................................................................................................... 362

8.1.1 Ablauf ......................................................................................................................... 363

8.1.2 Arten von Replikation ........................................................................................... 363

8.2 Topologien ................................................................................................................................ 365

8.2.1 Master – Slave ......................................................................................................... 365

8.2.2 Master – Slave mit zwischengeschaltetem Slave ....................................... 366

8.2.3 Master – Master ..................................................................................................... 367

8.3 Vorarbeiten zur Replikation ............................................................................................. 368

8.4 Konfiguration einer Master-Slave-Replikation ....................................................... 370

8.5 Zusammenfassung ............................................................................................................... 373

Page 8: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

10

9 Anfrageoptimierung 375

9.1 Aufspüren von langsamen Anfragen ........................................................................... 375

9.1.1 Langsame Anfrage protokollieren .................................................................... 375

9.1.2 Log-Dateien regelmäßig kontrollieren ............................................................ 378

9.2 Indexstrukturen ..................................................................................................................... 378

9.2.1 Die Grundidee von Indexstrukturen ................................................................ 379

9.2.2 Primärindex vs. Sekundärindex ......................................................................... 380

9.2.3 Der limitierende Faktor – die Festplatte ......................................................... 381

9.2.4 Technische Umsetzung von Indexstrukturen – der B-Baum

und MyISAM ............................................................................................................. 382

9.2.5 Clustered Index ....................................................................................................... 387

9.2.6 Non-clustered Index .............................................................................................. 388

9.2.7 Mehrdimensionale Indexstrukturen – der R-Baum .................................... 388

9.2.8 GIS und raumbezogene Indizes ......................................................................... 392

9.2.9 Volltextindex ........................................................................................................... 400

9.2.10 Die großen Nachteile des Indexes .................................................................... 410

9.3 Optimierung von Anfragen .............................................................................................. 410

9.3.1 Die EXPLAIN-Anweisung ...................................................................................... 410

9.3.2 Auswertung der EXPLAIN-Informationen und Optimierungen .............. 413

9.4 Partitionierung ....................................................................................................................... 443

10 Sicherheit 467

10.1 Grundlagen .............................................................................................................................. 467

10.1.1 Verschiedene Szenarien für das Rechtemanagement ............................... 467

10.1.2 Die zwei Phasen des Berechtigungssystems ................................................ 469

10.2 Privilegiert – die Benutzerrechte im Detail ............................................................... 470

10.2.1 Die Ebenen der Benutzerberechtigungen ...................................................... 472

10.2.2 Berechtigungen zum Schutz der Daten .......................................................... 475

10.2.3 Berechtigungen zur Programmierung mit MySQL ..................................... 480

10.2.4 Das Sicherheitskonzept von Programmen oder

DEFINER vs. INVOKER ............................................................................................ 482

10.2.5 Berechtigungen zur Administration von MySQL ......................................... 486

10.2.6 Die Befehle GRANT und REVOKE im Detail .................................................... 491

10.2.7 Benutzerverwaltung ohne GRANT – die Datenbank »mysql« ................ 496

Page 9: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

11

10.3 Tipps und Tricks ...................................................................................................................... 501

10.3.1 Vorgehen bei der Erstellung von Benutzern ................................................. 502

10.3.2 Tausende Benutzer und Datenbanken ohne Chaos verwalten .............. 503

10.3.3 Benutzerverwaltungs-API ................................................................................... 504

10.3.4 Benutzerverwaltung in der Applikation, nicht in der Datenbank? ........ 505

10.3.5 Workaround für Berechtigungen auf Zeilenebene/Kapselung .............. 507

10.4 STOP! – MySQL absichern .................................................................................................. 510

10.4.1 Allgemeine Sicherheitshinweise – der gewissenhafte Administrator 510

10.4.2 Zugang beschränken oder verschlüsseln ....................................................... 515

10.4.3 MySQL im Web ........................................................................................................ 520

10.5 Zusammenfassung ............................................................................................................... 525

Teil III Programmierung

11 Gespeicherte Programme und Events 529

11.1 Wozu gespeicherte Programme? ................................................................................... 529

11.1.1 Arten von gespeicherten Programmen .......................................................... 531

11.1.2 MySQL Stored Program Language .................................................................... 532

11.1.3 Grundlegendes Arbeiten mit gespeicherten Programmen ..................... 532

11.1.4 Kommentare ............................................................................................................ 535

11.1.5 Datentypen .............................................................................................................. 536

11.1.6 Sicherung und Backup gespeicherter Programme und Sichten ............. 537

11.1.7 Rechte von gespeicherten Programmen ........................................................ 538

11.1.8 Einschränkungen .................................................................................................... 539

11.2 Gespeicherte Prozeduren .................................................................................................. 539

11.2.1 Erzeugung gespeicherter Prozeduren ............................................................. 540

11.2.2 Erweiterte Einstellungen beim Erzeugen von

gespeicherten Prozeduren .................................................................................. 542

11.2.3 Verwendung gespeicherter Prozeduren ......................................................... 543

11.2.4 Löschen von gespeicherten Prozeduren ......................................................... 544

11.2.5 Bearbeiten gespeicherter Prozeduren ............................................................. 544

11.2.6 Parameter ................................................................................................................. 546

11.2.7 Ergebnismengen .................................................................................................... 550

11.3 Gespeicherte Funktionen .................................................................................................. 551

11.3.1 Erzeugen von gespeicherten Funktionen ....................................................... 552

11.3.2 Erweiterte Optionen beim Erzeugen von gespeicherten Prozeduren ... 554

11.3.3 Aufrufen gespeicherter Funktionen ................................................................ 556

Page 10: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

12

11.3.4 Bearbeiten gespeicherter Funktionen ............................................................. 558

11.3.5 Einschränkungen .................................................................................................... 558

11.4 Informationen zu bestehenden gespeicherten Programmen (Metadaten) 559

11.5 Programmieren in MySQL ................................................................................................. 563

11.5.1 BEGIN-/END-Blöcke ............................................................................................... 563

11.5.2 Variablen ................................................................................................................... 565

11.5.3 Ablaufsteuerung und konditionale Anweisungen ..................................... 571

11.5.4 Schleifen .................................................................................................................... 579

11.5.5 Cursors ....................................................................................................................... 583

11.5.6 Handler ...................................................................................................................... 590

11.5.7 Selbstdefinierte Fehlermeldungen mit SIGNAL ........................................... 599

11.5.8 Verschachtelte Cursors und ihre Handler ...................................................... 604

11.5.9 Temporäre Tabellen .............................................................................................. 607

11.5.10 Rekursion .................................................................................................................. 608

11.5.11 Transaktionen ......................................................................................................... 611

11.6 Trigger ........................................................................................................................................ 613

11.6.1 Trigger erstellen ...................................................................................................... 613

11.6.2 Löschen und Bearbeiten von Triggern ............................................................ 618

11.6.3 Informationen über bestehende Trigger (Metadaten) .............................. 618

11.6.4 Einschränkungen .................................................................................................... 621

11.7 Events ......................................................................................................................................... 622

11.7.1 Event-Scheduler ...................................................................................................... 623

11.7.2 Erzeugung von Events .......................................................................................... 624

11.7.3 Löschen und Bearbeiten von Events ................................................................ 628

11.7.4 Informationen zu bestehenden Events (Metadaten) ................................ 629

11.7.5 Sicherheit, Rechte und Einschränkungen ...................................................... 631

11.8 Sichten (Views) ....................................................................................................................... 632

11.8.1 Erzeugung und Verwenden von Sichten ........................................................ 633

11.8.2 Updates auf Sichten .............................................................................................. 635

11.8.3 Löschen und Bearbeiten einer Sicht ................................................................. 636

11.8.4 Informationen zu bestehenden Sichten (Metadaten) ............................... 637

11.9 Zusammenfassung ............................................................................................................... 638

12 Softwareentwicklung mit MySQL 639

12.1 Konnektoren/Programmiersprachen ........................................................................... 641

12.1.1 Allgemeines .............................................................................................................. 641

12.1.2 ODBC .......................................................................................................................... 646

Page 11: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

13

12.1.3 Java, JDBC und Connector/J ................................................................................ 650

12.1.4 PHP, »mysqli«, »PDO_MYSQL« .......................................................................... 655

12.1.5 .NET ............................................................................................................................. 659

12.1.6 Perl, »DBD:mysql« .................................................................................................. 664

12.1.7 Ruby ............................................................................................................................ 667

12.1.8 Python ........................................................................................................................ 669

12.1.9 »node-mysql«, Node.js – serverseitiges JavaScript ..................................... 671

12.2 Zusammenfassung ............................................................................................................... 674

13 NoSQL mit MySQL 675

13.1 Not Only SQL – NoSQL ......................................................................................................... 675

13.2 Skalierung und Verteilung: ACID vs. BASE ................................................................. 677

13.3 Mit Hochgeschwindigkeit ins Herz: MySQL öffnet sich

»Memcached«-Benutzern ................................................................................................. 678

13.3.1 Die Integration von Memcached in die MySQL-Architektur .................... 679

13.3.2 Grundlagen des Memcache-Protokolls ........................................................... 680

13.3.3 Memcached zur Verwendung mit InnoDB installieren ............................. 681

13.3.4 Die Verbindung testen ......................................................................................... 683

13.3.5 Memcached und InnoDB verbinden ................................................................ 684

13.3.6 Lesen und Schreiben von Daten mittels Memcached ............................... 687

13.3.7 Replikation und Memcached ............................................................................. 689

13.3.8 Sicherheit gegen Geschwindigkeit ................................................................... 689

13.3.9 Weitere Einstellungen .......................................................................................... 690

13.4 Zusammenfassung ............................................................................................................... 692

Teil IV Anhang

14 Referenz 695

A.1 Datentypen .............................................................................................................................. 696

A.2 Datendefinition, Datenmanipulation und Abfragen ............................................ 698

A.3 Index ........................................................................................................................................... 704

A.4 Boolesche Operatoren ......................................................................................................... 705

A.5 Mathematische Funktionen ............................................................................................. 706

A.6 Zeit- und Datumsfunktionen ........................................................................................... 708

Page 12: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Inhalt

14

A.7 String-Funktionen ................................................................................................................. 714

A.8 Transaktionen ......................................................................................................................... 722

A.9 Sperren ....................................................................................................................................... 724

A.10 Sichten (Views) ....................................................................................................................... 725

A.11 MySQL-Client ........................................................................................................................... 726

A.12 Gespeicherte Prozeduren .................................................................................................. 727

A.13 Gespeicherte Funktionen .................................................................................................. 729

A.14 Triggers ...................................................................................................................................... 731

A.15 Events ......................................................................................................................................... 731

A.16 Kontrollfluss-Elemente ....................................................................................................... 733

A.17 Variablen in Programmen ................................................................................................. 735

A.18 Cursors ........................................................................................................................................ 736

A.19 Handlers .................................................................................................................................... 737

A.20 Volltextsuche .......................................................................................................................... 739

A.21 Replikation ............................................................................................................................... 740

A.22 GIS-Funktionen ...................................................................................................................... 742

A.23 Partitionierung ....................................................................................................................... 743

A.24 Administrationsaufgaben ................................................................................................. 747

A.25 Benutzerverwaltung und Sicherheit ............................................................................ 752

A.26 Wartungsarbeiten ................................................................................................................. 755

A.27 Backups, Wiederherstellung und Logfiles .................................................................. 757

A.28 Import und Export ................................................................................................................. 759

A.29 Benchmarking, Monitoring und Profiling .................................................................. 760

A.30 Query-Cache ............................................................................................................................ 762

A.31 Plugins ........................................................................................................................................ 762

A.32 Storage-Engines ..................................................................................................................... 763

A.33 Hilfe, Warnungen und Fehler .......................................................................................... 766

A.34 Fehlernummern und SQL-States .................................................................................... 767

A.35 Escape-Sequenzen ................................................................................................................ 769

A.36 Zeichensätze und Sortierfolgen (Character Sets und Collations) .................... 770

Index ....................................................................................................................................................... 771

Page 13: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

15

Vorwort

Da Sie dieses Buch aufgeschlagen haben, haben Sie mit großer Wahrscheinlichkeit

bereits von MySQL gehört. In diesem Buch geht es um eines der erfolgreichsten und

weitverbreitetsten Open-Source-Softwareprojekte der Welt. MySQL ist ein vollwerti-

ges Datenbankmanagementsystem, das nicht nur im Allgemeinen kostenlos für alle

Betriebssysteme verfügbar ist, es ist zudem relativ einfach zu bedienen. Doch wozu

dann ein eigenes Buch, wenn die Software doch so einfach zu bedienen ist? Der ange-

merkte einfache Umgang mit MySQL setzt voraus, dass Sie wissen, wo Sie welche Ein-

stellungen vornehmen müssen. Nun könnten Sie sich durch die frei verfügbare

englischsprachige Dokumentation im Umfang von mehreren Tausend Seiten quä-

len. Oder Sie wählen die smarte Alternative: Sie haben sich richtig entschieden!

Schließlich lesen Sie bereits dieses Buch; herzlichen Glückwunsch!

Damit Sie so schnell wie möglich sicher im Umgang mit MySQL werden, bietet dieses

Buch ein umfangreiches und realistisches Praxisbeispiel, anhand dessen wir die

wichtigsten Kniffe, Tipps und Tricks erklären.

Für wen ist dieses Buch gedacht?

MySQL ist ein sehr weit verbreitetes Datenbanksystem, das in den verschiedensten

Szenarien erfolgreich eingesetzt werden kann. Wie Sie das meiste aus MySQL heraus-

holen, lernen Sie in diesem Buch. Vorwiegend richtet sich das vorliegende Adminis-

trationshandbuch an Einsteiger und Fortgeschrittene. Aber gleichgültig, ob Sie

Datenbanken-Einsteiger sind oder schon Erfahrungen mit MySQL gesammelt haben,

ja sich vielleicht sogar schon zu den Profis zählen können: In diesem Buch werden Sie

viel Neues lernen! Dasselbe gilt natürlich auch für Umsteiger von anderen Daten-

bankmanagementsystemen.

Das Besondere an diesem Buch ist das umfassende Praxisbeispiel, anhand dessen wir

die Themen aller Kapitel und die darin enthaltenen Befehle genau erläutern. Wir sind

der Meinung, dass ein interessantes und reales Praxisbeispiel besser ist als eine öde

Schritt-für-Schritt-Anleitung. Das bedeutet jedoch auch, dass Sie an manchen Stellen

selbst gefordert sind, da wir eine gewisse Eigeninitiative voraussetzen. Getreu dem

Motto learning by doing werden Sie MySQL immer besser kennenlernen, indem Sie

die Entwicklung des vorgestellten Szenarios selbst nachvollziehen werden. Wir sind

überzeugt, dass Sie so viel mehr lernen und sicherer im Umgang mit dem Daten-

banksystem MySQL werden, als wenn Sie zu sehr an die Hand genommen werden.

Doch keine Bange, auf der mitgelieferten DVD finden Sie die notwendigen Daten, um

jederzeit neu anfangen zu können, falls Sie sich mal einen gröberen Schnitzer leisten.

Page 14: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Vorwort

16

Konventionen

In diesem Buch gibt es ein paar wenige Konventionen, die die Lesbarkeit erhöhen. So

werden sämtliche Befehle durch dieses Format hervorgehoben, damit Sie schneller

erkennen, dass es sich um eine Anweisung für den MySQL-Server bzw. für Ihr

Betriebssystem handelt.

Eingaben, die für den MySQL-Server gedacht sind, tätigen Sie mit dem sogenannten

MySQL-Client, einem Kommandozeilen-Programm, in das Sie die Befehle eintippen,

um mit dem Server zu interagieren. Alle kürzeren oder längeren Befehlssequenzen

sind in Listings als Code-Auflistungen angegeben. Jene Befehle, die Sie innerhalb die-

ses Clients eingeben müssen, werden durch die Eingabeaufforderung (englisch

prompt) mysql> hervorgehoben. Oftmals können die Eingaben für den Client aus

Platzgründen nicht in einer Zeile eingegeben werden. Ein solcher Zeilenumbruch

wird durch diesen Pfeil -> dargestellt. Dadurch wird ausgedrückt, dass dieser Befehl

noch nicht abgeschlossen ist und daher noch fortgesetzt wird. Diese Pfeile dürfen Sie

nicht selbst eingeben. Der MySQL-Client schreibt diese Pfeile selbstständig nach

einem Zeilenumbruch. In Listing 1 sehen Sie ein Beispiel für das Format, das wir in

diesem Buch für MySQL-Befehle verwenden.

mysql> SELECT vorname, nachname FROM passagier-> WHERE passnummer = 'P137884';

Listing 1 Ein MySQL-Befehl

Die MySQL-Befehle selbst sind immer in GROSSBUCHSTABEN gehalten, damit Sie sie

leichter von Benutzereingaben unterscheiden können. Jene Kommandos, die Sie in

der Kommandozeilenumgebung eingeben müssen, werden durch den Linux-

Prompt bash# eingeleitet. Dadurch sehen Sie auf den ersten Blick, für welche Umge-

bung der Befehl vorgesehen ist. Listing 2 zeigt ein Beispiel für einen Konsolenbefehl.

bash# mysqladmin ping

Listing 2 Ein Konsolenbefehl

An manchen Stellen im Buch sehen Sie das neben diesem Absatz gezeigte Symbol.

Damit kennzeichnen wir diejenigen Befehle, die mit MySQL 5.6 wichtige Unter-

schiede in der Bedeutung erhalten haben. Die so markierten Befehle sind übrigens

nicht zwangsläufig veraltet. In der Regel sind sie nach wie vor gültig, haben aber bei-

spielsweise eine geänderte Semantik, die Sie beachten müssen.

Besondere Formatierungsübereinkünfte gelten auch für die Referenz am Ende dieses

Buches, in der wir alle besprochenen Befehle und Kommandos auflisten.

Page 15: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Vorwort

17

Der Aufbau dieses Buches

Dieses Buch ist in vier Teile gegliedert: in »Erste Schritte«, »MySQL-Administration«,

»Programmierung« und den »Anhang«. Der Teil »Erste Schritte« enthält unter ande-

rem ein Schnellstart-Tutorial, in dem Sie die wichtigsten Befehle kennenlernen, um

mit MySQL grundlegend arbeiten zu können. Nach diesem Kapitel sind Sie in der

Lage, die Datenbanken selbst samt ihren Tabellen, in denen letztendlich die Daten

gespeichert werden, anzulegen und zu verwalten. Außerdem stellt dieser Teil das pra-

xisnahe Flughafenszenario vor, das sich durch das gesamte Buch zieht und einen

nachvollziehbaren Rahmen für die unterschiedlichsten Aufgaben bietet. Sie lernen

in diesem Abschnitt, wie Sie die Anforderungen an ein Datenbanksystem herausar-

beiten und umsetzen. Auf der DVD zu diesem Buch finden Sie einen sehr umfangrei-

chen Datensatz, mit dem Sie auf realistische Weise den Umgang mit MySQL testen

können. Dieses Daten-Set für das Flughafenszenario enthält mehrere Millionen

Datensätze und eignet sich daher gut für Tests und Optimierungsmaßnahmen.

Der zweite Teil, »MySQL-Administration«, beschäftigt sich mit der Installation und

der Wartung von MySQL. Hier erfahren Sie nicht nur, wie Sie MySQL optimal an Ihre

Anforderungen anpassen, sondern auch, wie Sie MySQL aktuell halten. Des Weiteren

lernen Sie mit der Replikation eine interessante Möglichkeit kennen, MySQL im

Hochverfügbarkeitsbereich und somit auch im High-Performance-Bereich einzuset-

zen. Wie Sie Ihre Queries möglichst effizient gestalten, lernen Sie ebenfalls in diesem

Teil. Ein sehr wichtiger Aspekt dieses Teils ist die Benutzerverwaltung und das Absi-

chern Ihrer MySQL-Installation.

Im dritten Teil, »Programmierung«, werden Sie lernen, mit MySQL zu programmie-

ren, um so auch spezielle Anforderungen geschwindigkeitsoptimiert umzusetzen.

Mit gespeicherten Programmen lassen sich viele Probleme sehr elegant lösen. Da

MySQL in den meisten Fällen als Daten-Backend für Software-Programme dient, ler-

nen Sie hier ebenfalls, wie Sie mit den unterschiedlichsten Programmiersprachen auf

den Datenschatz einer MySQL-Installation zugreifen.

Abgerundet wird dieses Buch durch eine umfangreiche Referenz im vierten und letz-

ten Teil, in der Sie alle im Buch besprochenen Befehle samt Syntax und Kurzbeschrei-

bung vorfinden. Diese Befehle sind übersichtlich nach Themen geordnet, wodurch

Sie sich schneller zurechtfinden werden. Natürlich enthält dieses Buch auch einen

Index, in dem Sie alle wichtigen Begriffe und Befehle nachschlagen können und

somit schnell finden werden.

Page 16: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Vorwort

18

Die DVD zum Buch

Die beiliegende DVD enthält nicht nur alle Versionen der aktuellen, stabilen Version

5.6 von MySQL für Windows, Mac und Linux, sondern auch im Buch vorgestellte

Skripte und Tools, die Sie sofort einsetzen können.

Im Verzeichnis FlughafenDB finden Sie die Beispieldatenbank mit dem Flughafen-

szenario. Sie bildet das Herzstück dieses Buches, denn sie ermöglicht es Ihnen, alle

Befehle, Tricks und Tools sofort anhand einer vollwertigen Datensammlung aus-

zuprobieren. Die darin enthaltenen Flug-, Passagier- und Buchungsdaten sind

möglichst realistisch gehalten. Sie finden zwei Versionen der Daten des Flughafen-

szenarios auf dieser DVD. Sie unterscheiden sich im Umfang der enthaltenen Daten.

Während Sie die kleine Ausgabe sehr schnell importieren können, dient die große

Version mit einigen Millionen Datensätzen besonders zum Testen von Optimierun-

gen und Tuning-Maßnahmen. Wie Sie diese Daten importieren, erfahren Sie in

Abschnitt 4.2, »Die Beispieldatenbank auf der Buch-DVD«.

Die Webseite zum Buch

Unter der Web-Adresse www.mysqladmin.at finden Sie aktuelle Informationen rund

um dieses Buch, Kontaktmöglichkeiten und Neues rund um MySQL.

Vorwort zur zweiten Auflage

Am 5. Februar 2013 verkündete Oracle stolz die Freigabe der aktuellen Version MySQL

5.6 für den produktiven Einsatz. Seit wir an der ersten Ausgabe dieses Buches gearbei-

tet haben, sind beinahe zwei Jahre vergangen, und es hat sich viel getan. Damals

haben wir in unseren Beispielen die Version 5.6.2 verwendet, in dieser Ausgabe wer-

den wir uns auf das aktuelle Release 5.6.12 konzentrieren. Diese Developer-Version

MySQL 5.6.2 war in der letzten Ausgabe noch nicht offiziell für den professionellen

Einsatz freigegeben. Inzwischen ist diese Vorsichtsmaßnahme jedoch nicht mehr

gültig, und nun können Sie auch in kritischen Umgebungen alle neuen Features ein-

setzen. Der Versionssprung von MySQL 5.5 auf 5.6 umfasst viele Neuigkeiten, die wir

Ihnen in diesem Buch vorstellen möchten. Zu den bemerkenswertesten Neuerungen

zählen vor allem deutliche Performancesteigerungen – vor allem in Zusammenhang

mit der InnoDB Storage Engine –, ein noch schlauerer Optimierer, bessere Skalierbar-

keit und eine erhöhte Sicherheit. Mit der aktuellen Version 5.6.12 wagt MySQL sich in

neue Gefilde und entert den Bereich der NoSQL-Datenbanken. Dem Schlagwort

NoSQL sind Sie sicher schon begegnet, es ist schließlich in aller Munde. NoSQL (Not

Only SQL) bezeichnet ein sehr flexibles Datenbankmodell, das insbesondere auf Ska-

Page 17: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Vorwort

19

lierung ausgelegt ist. Details dazu finden Sie in Teil III, »Programmierung«, und dort

in Kapitel 13, »NoSQL mit MySQL«.

Die Autoren

Stefan Pröll (Dipl.-Ing.), Jahrgang 1983, studierte in Innsbruck und Madrid Informatik

und spezialisierte sich dabei im Masterstudiengang auf Datenbanken und Informati-

onssysteme. Während seines Studiums absolvierte er mehrere Praktika im In- und

Ausland bei internationalen Organisationen und Unternehmen im Bereich Wissen-

schaftskommunikation, Webentwicklung und Datenbankadministration. Seit 2009

lebt er in Wien, wo er Wirtschaftsingenieurswesen an der Technischen Universität

Wien als zweites Masterstudium studiert und zusätzlich im Bereich der Linux-Ser-

veradministration bei privaten Unternehmen gearbeitet hat. Seit 2011 ist er wissen-

schaftlicher Mitarbeiter und Doktorand bei einem auf IT-Sicherheit spezialisierten

Forschungszentrum. Dort beschäftigt er sich mit aktuellen Fragen in den Bereichen

Digital Preservation, e-Science und Business Processes. In seiner Freizeit treibt er

gelegentlich Sport, hört leidenschaftlich gerne Soul-, Funk- und Jazzmusik, geht ins

Theater und reist, wann immer die Zeit es zulässt.

Dr. Eva Zangerle studierte Informatik an der Universität Innsbruck in Österreich.

Dabei spezialisierte sie sich während ihres Masterstudiums auf den Bereich der

Datenbanken. In ihrer Masterarbeit entwickelte sie neue Techniken, um komplexe

Datenstrukturen, wie graphbasierte Wissensdarstellungen, in Datenbanken opti-

miert zu verarbeiten. Seit 2007 arbeitet sie als wissenschaftliche Mitarbeiterin am

Lehrstuhl für Datenbanken und Informationssysteme am Institut für Informatik der

Universität Innsbruck. Dabei beschäftigt sich ihre Forschung und Lehre mit der Ent-

wicklung von neuen Methoden zur Personalisierung – sogenannten Recommender-

Systemen – und der damit verbundenen intelligenten Datenspeicherung. Die von ihr

entwickelten Techniken und Verfahren wurden bereits auf zahlreichen internationa-

len Konferenzen veröffentlicht.

Neben der Forschung und Lehre von neuartigen Datenbanksystemen setzt Eva Zan-

gerle aber bereits seit 2002 auf MySQL, mit dem sie zahlreiche erfolgreiche Projekte

im universitären Umfeld realisierte.

Wolfgang Gassler (Dipl.-Ing.) absolvierte das Informatikstudium an der Universität

Innsbruck in Österreich und ist seit 2007 wissenschaftlicher Mitarbeiter in der For-

schungsgruppe Datenbanken und Informationssysteme an der Universität Inns-

bruck. Er beschäftigt sich in seiner Forschung mit neuen Datenbanktechnologien

und neuartigen Verfahren zur optimierten Wissensspeicherung und Analyse.

Seit 1999 arbeitet er mit dem Datenbanksystem MySQL – damals in der Version 3.21 –

und der zu dieser Zeit in Tirol/Österreich beinahe unbekannten Programmiersprache

Page 18: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Vorwort

20

PHP in der Version 3. Seit dieser Zeit, als einer der ersten PHP-Entwickler in Tirol, ist er

in zahlreichen Softwareprojekten – vorrangig in den Bereichen Web und Mobile – bis

heute als Entwicklungsleiter oder in beratender Funktion tätig.

Die Verbindung zwischen Forschung und Wirtschaft ist ihm ein großes Anliegen,

und so arbeitet er auch heute noch neben seiner wissenschaftlichen und lehrenden

Tätigkeit an der Universität Innsbruck an Projekten in der Wirtschaft.

Page 19: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

49

2

Kapitel 2

Datenbankmodellierung

Dieses Kapitel behandelt die Grundlagen der Datenbankmodellierung.

Sie lernen, wie Sie jene Anforderungen, die Sie an Ihre Datenbankan-

wendung stellen, identifizieren, abstrahieren und sowohl im Modell

als auch in der Datenbank umsetzen können.

Am Anfang einer jeden Datenbankanwendung steht immer der Entwurf des zugrun-

deliegenden Datenbankmodells. In diesem Kapitel lernen Sie die notwendigen

Schritte kennen, mit denen Sie ein Konzept in ein passendes Datenbankmodell

umsetzen. Sie werden anhand eines praktischen Anwendungsbeispiels sehen, wie Sie

die notwendigen Phasen erfolgreich durchlaufen, und so alle Aspekte, von den Vor-

überlegungen bis hin zum konkreten Datenbankenschema in MySQL, nachvollziehen

können.

2.1 Einführung in den Datenbankentwurf

Datenbanken werden zur Lösung und Unterstützung von vielschichtigen Aufgaben

und Problemen eingesetzt. Überall dort, wo viele Daten anfallen, die geordnet und

strukturiert aufbewahrt und zuverlässig verfügbar sein müssen, werden diese Sys-

teme verwendet. Denken Sie beispielsweise an die Personalverwaltung, die Buchhal-

tung oder auch an die Lagerlogistik. Datenbanken sind dazu gedacht, Vorgänge der

realen Welt in einem Schema abzubilden, mit Hilfe dessen bestimmte Aufgaben

umgesetzt werden können. MySQL ist ein sogenanntes relationales Datenbanksys-

tem, für das bestimmte Anforderungen gelten, wie wir sie in Kapitel 5, »Architektur«,

ausführlich darstellen. Sofern wir es nicht anders betonen, handelt es sich auch bei

allgemeinen Beschreibungen immer um diesen Datenbankentyp.

Damit Datenbanken der Aufgabe der Abbildung gerecht werden, müssen kleine Aus-

schnitte der Umwelt abstrahiert und in eine einheitliche Darstellungsform um-

gewandelt werden. Unter diesem Vorgang der Abstraktion versteht man das Mo-

dellieren eines Prozesses der realen Welt mit Hilfe eines Datenbankenmodells. Ein

solcher Ausschnitt der Umwelt ist beispielsweise die Adress- und Mitgliedsverwal-

tung eines Vereins, das Management eines Unternehmens oder das Betreiben eines

Newsportals im Web. Der Datenbankentwurf beschäftigt sich also mit der Frage, wie

ein Ausschnitt der Wirklichkeit in einer Datenbank abgebildet werden kann.

Page 20: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

50

Die Schwierigkeit der Abstraktion besteht darin, alle relevanten Eigenschaften, die

einen bestimmten Ausschnitt der Wirklichkeit ausmachen, zu identifizieren und in

ein konzeptionelles Schema zu übertragen. Wie der Name andeutet, beschreibt ein

konzeptionelles Schema die zugrundeliegende Idee, nicht jedoch die konkrete

Ausprägung eines Objekts der realen Welt. Abstraktion ist daher immer eine Verall-

gemeinerung und dient der Vereinfachung komplexer Sachverhalte. Der Datenbank-

entwurf besteht aus mehreren Phasen, die für die Modellierung notwendig sind.

Diese stellen wir nun vor.

2.1.1 Anforderungsanalyse

Die Grundlage eines soliden Modellentwurfs ist es, die Anforderungen und den

eigentlichen Sinn und Zweck des Einsatzes eines Datenbankmanagementsystems zu

analysieren und sich klarzumachen, welche Aspekte eines Ausschnitts der realen

Welt überhaupt abgebildet werden müssen, also welche Ausschnitte relevant für die

Modellierung in einer Datenbank sind. Oftmals sind diese Abbildungen Geschäfts-

prozesse eines Unternehmens, die abstrahiert werden sollen. Diese Geschäftspro-

zesse werden in den allermeisten Fällen durch eine Software abgebildet, die den

Benutzer bei seiner täglichen Arbeit unterstützt.

Die Datenbank selbst ist Teil dieses Softwaresystems und speichert die abstrahierten

Objekte der abgebildeten Modellwelt ab. Unter Objekten versteht man in diesem

Kontext jene Gegenstände oder Sachverhalte, die durch den Vorgang der Abstraktion

mittels einer allgemeineren Beschreibung im Datenbanksystem gespeichert werden

sollen. Diese Objekte sind für die Software dauerhaft verfügbar. Die Software bzw. der

Anwender können neue Objekte anlegen, vorhandene verändern und nicht mehr

benötigte Daten aus der Datenbank löschen. Damit diese Objekte adäquat umgesetzt

werden können, müssen sie vom Benutzer bzw. von den Softwareentwicklern in

einer Art und Weise beschrieben werden, die vom Datenbankmanagementsystem

verstanden wird.

Zuallererst müssen Sie daher, gemeinsam mit Ihren Mitarbeitern und Kollegen,

Informationen sammeln, welche Anforderungen genau Ihr Datenbankmanagement-

system umsetzen muss. Innerhalb dieses Prozesses erstellen Sie ein strukturiertes

Dokument, in dem Sie alle Funktionen und Methoden festhalten, die Ihr System

bereitstellen soll. Wichtig ist hierbei, dass all die Punkte, die Sie sich notieren, nach-

vollziehbar und vollständig sind. Ob Sie dabei spezielle Tools, Mindmaps, Karteikar-

ten oder ein gewöhnliches Word-Dokument einsetzen, bleibt ganz allein Ihnen

überlassen, solange Sie alle Aspekte sorgfältig spezifizieren.

Wenn Sie sich an das sehr einfach gehaltene Motivationsbeispiel aus dem ersten

Kapitel erinnern, dann muss ein Datenbanksystem die Anforderungen der Vereins-

verwaltung unterstützen. Dazu müssen die notwendigen Objekte abstrahiert werden.

Page 21: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.1 Einführung in den Datenbankentwurf

51

2

In dem Beispiel handelt es sich bei diesen Objekten um die Daten der Vereinsmit-

glieder. Die Datensätze müssen, neben weiteren Informationen, mindestens den

Namen und das Geburtsdatum der Mitglieder abbilden können. Des Weiteren muss

das System grundlegende Funktionen wie das Einfügen, Bearbeiten und Löschen von

Mitgliedsdaten beherrschen.

Die Beschreibung dieser und weiterer Anforderungen kann rein textuell, auch ohne

Formalismus erfolgen. Wichtig ist nur, dass Sie all jene Informationen festhalten, die

Ihr Datenbanksystem später aufnehmen und verarbeiten soll. Um diesen Vorgang an

einem etwas komplexeren Beispiel zu demonstrieren, stellen wir im späteren Teil

dieses Kapitels das Szenario einer Flughafenverwaltung vor, anhand dessen Sie die-

sen Vorgang nachverfolgen können.

2.1.2 Konzeptioneller Datenbankentwurf

Der nächste Schritt der Datenbankmodellierung ist der konzeptionelle Datenbank-

entwurf. Ziel dieser Phase ist es, die während der Anforderungsanalyse gewonnenen

Erkenntnisse unabhängig von der konkreten Implementierung in einem Datenbank-

entwurf darstellen zu können. Die im vorherigen Schritt gewonnenen Informa-

tionen über die gewünschten Fähigkeiten des Datenbanksystems werden im

konzeptionellen Entwurf oder Design mit Hilfe eines Modells genauer beschrieben

und in einer unmissverständlichen Form spezifiziert. Auch hier ist die eigentliche

Wahl des Datenbanksystems, das letztendlich zum Einsatz kommen wird, noch irrele-

vant, da ein solches Modell unabhängig von der konkreten Umsetzung ist. In diesem

Schritt übersetzen Sie die in der Anforderungsanalyse erstellte Liste von Aufgaben

und Fähigkeiten, die Ihr Datenbankmanagementsystem umsetzen muss, in ein

standardisiertes Datenbankmodell.

Um eine einheitliche Beschreibung der gewonnenen Anforderungen zu ermögli-

chen, werden unterschiedliche Modellierungsverfahren eingesetzt. Diese Verfahren

erlauben eine genauere Beschreibung der mit Hilfe des Datenbanksystems zu lösen-

den Aufgaben. Das bekannteste dieser Modelle ist sicherlich das Entity-Relationship-

Modell (ER-Modell), das wir im Laufe des Kapitels noch detailliert beschreiben

werden.

Sprechende Namen

Wenn Sie während des Modellentwurfs beginnen, Ihre Entitäten und deren Eigen-

schaften festzulegen, sollten Sie bereits hier »sprechende Namen« für alle Bezeich-

ner wählen. So erkennen andere Mitarbeiter und Kollegen bereits am Namen einer

Datenbank und an den Bezeichnern einer Tabelle, einer Funktion oder Variablen,

was das betreffende Objekt für eine Funktion erfüllt. Vermeiden Sie auf jeden Fall

Page 22: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

52

2.1.3 Logischer Datenbankentwurf

Ist das grundlegende Modell aus dem konzeptionellen Entwurf fertiggestellt, dann

folgt als nächste Phase der logische Datenbankentwurf. Darunter versteht man die

Modellierung des zuvor entworfenen Schemas mit Hilfe jenes Datenbankmanage-

mentsystems, das zum Einsatz kommen soll. In diesem Fall ist das MySQL als DBMS

und SQL als Data Definition Language (DDL). Ab diesem Modellierungsschritt ist der

Modellentwurf nicht mehr unabhängig von der konkreten Modellierung, da hier die

Entscheidung für ein konkretes System – in diesem Fall MySQL – bereits gefallen ist.

In dieser Entwurfsphase erfolgt auch die Umsetzung in das relationale Datenmodell,

das Gegenstände aus der realen Welt in Tabellen und Beziehungen zwischen Tabel-

len, sogenannte Relationen, übersetzt. Hier erfolgt also die Übersetzung des unab-

hängigen ER-Modells in jene Sprache, die von MySQL verstanden werden kann.

Dieser Transformationsschritt vom konzeptionellen Modell in das logische Modell

kann entweder manuell oder automatisch durch Tools geschehen. In diesem Buch

erfolgt diese Umwandlung manuell, damit wir auf die Feinheiten in diesem Schritt

eingehen können. Mehr dazu erfahren Sie in Abschnitt 2.3, »Das relationale Daten-

bankmodell«.

2.1.4 Physischer Datenbankentwurf

In der vierten und letzten Phase des Datenbankentwurfs geht es um den physischen

Datenbankentwurf und damit um die Art und Weise, wie die Daten konkret auf der

Hardware des Datenbankservers durch das DBMS gespeichert werden. Diese Phase

dient unter anderem der Performancesteigerung, indem die Besonderheiten von

Daten- und Indexstrukturen sowie die Eigenheiten des Serverbetriebssystems und

der Hardware analysiert und ausgenutzt werden, um die Leistung zu erhöhen.

Details zum Datenbanktuning finden Sie in Kapitel 9, »Anfrageoptimierung«.

nichtssagende Bezeichnungen wie »tabelle1« oder »testDB«, denn Sie werden in

wenigen Wochen nicht mehr wissen, was die betreffende Tabelle bzw. Datenbank

ursprünglich bezwecken sollte. Wählen Sie daher aussagekräftige Bezeichner, auch

wenn das eventuell mehr Schreibarbeit bedeutet.

Entscheiden Sie sich außerdem, ob Sie für Ihre Bezeichner und Kommentare die

englische oder deutsche Sprache wählen möchten. Mischen Sie aber keine Spra-

chen, denn das führt zu Missverständnissen und ist verwirrend. Apropos Kommen-

tare: Verwenden Sie Kommentare so oft und ausführlich wie möglich!

Page 23: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.1 Einführung in den Datenbankentwurf

53

2

2.1.5 Der Datenbankentwurf im Überblick

Die vier Phasen des Datenbankentwurfs lauten:

1. Anforderungsanalyse

2. konzeptioneller Entwurf

3. logischer Entwurf

4. physischer Entwurf

Diese vier Schritte müssen nicht streng nacheinander durchlaufen werden. Vielmehr

handelt es sich dabei um ein iteratives Vorgehensmodell, bei dem Sie immer wieder

in bereits durchlaufene Phasen zurückspringen und Ihr Modell weiter verfeinern

können. Je weiter der Entwicklungsprozess jedoch fortgeschritten ist, desto aufwen-

diger werden diese Änderungen. Daher sollten Sie jeder Phase besondere Aufmerk-

samkeit widmen, um zeit- und kostenintensive Überarbeitungen zu vermeiden.

Natürlich müssen Sie insbesondere bei der Anforderungsanalyse und beim konzep-

tionellen Design intensive Rücksprache mit Ihrem Team halten, damit Sie alle

Aspekte berücksichtigen können, die Ihnen selbst vielleicht verborgen sind. In Abbil-

dung 2.1 sehen Sie diese vier Phasen schematisch dargestellt.

Abbildung 2.1 Die vier Entwurfsphasen

Anforderungsanalyse

Konzeptioneller Entwurf

Logischer Entwurf

Physischer Entwurf

Page 24: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

54

2.2 Ein konkretes Beispiel: Flughafenverwaltung

Um die Begriffe, die für das Verständnis und das Design von Datenbanken notwendig

sind, besser erklären zu können, ziehen wir im Folgenden ein praxisnahes Beispiel

heran. Es dient dazu, die Fachtermini einzuführen und gleich anhand einer konkre-

ten Problemstellung zu erklären. Als Beispiel wird uns die Verwaltung eines Flugha-

fens mit Hilfe einer MySQL-Datenbank dienen. Im Laufe der folgenden Kapitel

werden wir dieses Beispiel immer weiter ausbauen und verfeinern.

Stellen Sie sich die Verwaltung eines großen internationalen Flughafens vor. Flughä-

fen sind die Drehscheiben des internationalen Personen- und Güterverkehrs und aus

unserem Alltag nicht mehr wegzudenken. Es handelt sich dabei um ein komplexes

Unternehmen, das verschiedenste Geschäftsregeln umsetzen muss, um erfolgreich

und sicher wirtschaften zu können. Dazu gehören neben verschiedensten Geschäfts-

prozessen, wie der Verwaltung der Mitarbeiter, das Ticket- und Buchungssystem, die

Protokollierung aller Starts und Landungen und vieles mehr, so auch sämtliche

Informationsflüsse zwischen diesen Systemen. Um dieser Fülle an Informationen

Herr zu werden, werden zu einem Großteil Datenbanksysteme eingesetzt, die diese

Daten in ihrem Datenbankenschema speichern. Dieses Datenbankenschema legt

demnach die genaue Struktur fest, also welche Eigenschaften in welcher Form

gespeichert werden und wie die verschiedenen Elemente eines Modells zueinander

in Beziehung stehen.

Stellen Sie sich vor, in Ihrer Stadt wird ein neuer Flughafen gebaut. Er soll zukünftig

als die zentrale Achse für den aufstrebenden Tourismus, die Geschäftswelt und für

den Güterverkehr Ihrer Region dienen. Ein derart komplexes Unternehmen wie ein

internationaler Flugplatz ist auf eine effiziente und leistungsfähige IT-Infrastruktur

angewiesen, um den vielen Aufgaben gerecht zu werden. Sie als Datenbankdesigner

und Datenbankadministrator in Personalunion werden mit der Umsetzung des

Datenbanksystems für diesen Flughafen betraut. Sogleich machen Sie sich daran, die

Anforderungen für eine Flughafenverwaltungs-Datenbank herauszuarbeiten. Der

Flugplatz ist nicht nur wichtige Drehscheibe, sondern auch ein beliebter Arbeitgeber

in der Region, der für viele Angestellte einen sicheren Arbeitsplatz bereitstellt. Ihr

Design muss daher neben den Aspekten des Flugbetriebes auch die Anforderungen

einer Personalverwaltung erfüllen, denn die Mitarbeiter sind verschiedenen Aufga-

ben wie Verwaltung, Bodenpersonal, Luftpersonal oder Sicherheitspersonal zugeord-

net. Auch deren Daten sollen mit Ihrem Datenbanksystem verwaltet werden.

Für das Management der komplexen Abläufe an einem Flughafen müssen Sie selbst-

verständlich alle Bereiche abdecken, die mit dem Tagesgeschäft an sich – den Flügen –

zusammenhängen. Daher müssen nicht nur die Flüge, die den Flughafen anfliegen,

sondern auch sämtliche startenden Maschinen erfasst werden. Doch damit nicht

genug: Um die Start- und Landezeiten an den internationalen Flugverkehr anpassen

Page 25: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

55

2

und optimieren zu können, muss in Ihrer Datenbank ein vollständiger Flugplan vor-

handen sein. Auch dieser wird mit Ihrem System verwaltet. Die Flüge werden eben-

falls mit der Datenbank verwaltet, indem jeweils eine eindeutige Flugnummer, Start-

und Landeflughafen und weitere Details festgehalten werden.

An dem Flughafen operieren mehrere Fluglinien, die diesen Flugplatz als Heimat-

flughafen verwenden, von dem aus sie ihre Flüge abwickeln. Dazu gehört neben der

Verwaltung der Fluglinien natürlich auch ein System für die Erfassung der Flotte

jeder Fluglinie. Da Sie den lokalen Flugplatz auch im Internet präsentieren wollen,

stellen Sie eine Webseite mit dynamischem Inhalt zur Verfügung, die nicht nur den

Flugplatz selbst, sondern auch die einzelnen Flugzeuge der Fluglinien beschreibt.

Doch was wäre ein neuer Flughafen ohne Kunden? Daher müssen Sie alle Passagiere

samt ihren Daten im System erfassen. Aus diesem Grund ist die Passagierliste ein

weiteres zentrales Element für die Verwaltung des Flughafens mit dem Datenbank-

system. Schließlich werden hier sämtliche Daten der Passagiere – von Vorname bis

E-Mail-Adresse – erfasst und geprüft.

Diese Passagiere können Flüge buchen, eine wichtige Funktion, die Ihr System unbe-

dingt erfüllen muss. Auch hier müssen Sie viele Details berücksichtigen. Mehr dazu

erfahren Sie, nachdem wir das relationale Datenbankenmodell vorgestellt haben.

2.3 Das relationale Datenbankenmodell

Das relationale Datenbankmodell ist die theoretische Grundlage von sehr vielen

aktuellen Datenbankmanagementsystemen, und es wird auch bei MySQL eingesetzt.

Das relationale Datenbankmodell basiert auf der relationalen Algebra, die selbst

wiederum auf der mathematisch exakt definierten Mengentheorie aufbaut. Das ist

wichtig, denn durch das robuste mathematische Fundament lassen sich die Abfrage-

operationen auf beweisbare Operationen der Mengenlehre zurückführen und liefern

daher korrekte Ergebnisse. Da detaillierte Kenntnisse des mathematischen Formalis-

mus jedoch nicht zwingend notwendig sind, um gute Datenbankdesigns zu entwi-

ckeln, greifen wir nun auf die anschaulichere Darstellung von Relationen als Tabellen

zurück. Im Folgenden benutzen wir die Begriffe Tabelle und Relation daher synonym.

2.3.1 Tabellen, Spalten und Zeilen

Wie Sie bereits wissen, werden Gegenstände aus der realen Welt in Tabellen nach-

empfunden. So wie Sie zum Beispiel auch in den Tabellen eines Tabellenkalkulations-

programms wie Microsoft Office Excel oder OpenOffice Calc zusammengehörige

Datensätze erfassen, werden in einer Datenbank ebenfalls Daten in einer Tabelle

zusammengefasst, die über gemeinsame Eigenschaften verfügen. Eine Tabelle stellt

Page 26: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

56

Daten, die in einem Zusammenhang stehen, zueinander in Beziehung – sie setzt sie

in Relation zueinander. Eine Datenbank bündelt diese Tabellen zu einer Einheit; eine

Tabelle kann nicht für sich allein, ohne Datenbank existieren. Beachten Sie, dass der

Begriff der Datenbank nicht gleichbedeutend mit dem Datenbankmanagementsys-

tem MySQL ist, sondern ein Teil dessen.

Eine Tabelle ist eine zweidimensionale Datenstruktur, die aus Zeilen und Spalten

besteht. Jede Tabelle hat einen eindeutigen Namen, den Bezeichner (englisch identi-

fier). Dieser Bezeichner wird allgemein auch Tabellenname genannt, und er muss

innerhalb einer Datenbank eindeutig sein. Zwei Tabellen innerhalb ein und derselben

Datenbank dürfen also keinen identischen Bezeichner haben. Eine Tabelle besteht aus

mehreren Spalten, die selbst wiederum alle einen eigenen Bezeichner haben.

Betrachten Sie das obige Beispiel für eine Tabelle im Flughafenszenario (Tabelle 2.1).

Diese Tabelle stellt einen Ausschnitt der Passagierliste für einen Flug dar und ist

daher ein zentrales Element für die Flugverwaltung. In der ersten Zeile befinden sich

die Tabellenüberschriften, die gleichzeitig die Spaltennamen darstellen. Jede dieser

Spalten steht für eine Eigenschaft des abzubildenden Objekts – in diesem Fall ist die-

ses Objekt ein Passagier. Diese Eigenschaften werden auch als Attribute bezeichnet,

und sie fassen jene Informationen über konkrete Passagiere zusammen, die für die

Verwaltung des Flughafens notwendig sind. In diesem Ausschnitt sind diese Attri-

bute die eindeutige Passnummer, der Vor- und der Nachname des Passagiers sowie

dessen Geburtsdatum und die Anschrift.

Eine Reihe oder Zeile in einer Tabelle steht für die Abbildung eines konkreten Objekts

aus der realen Welt innerhalb der Datenbank. Ein Passagier besteht aus der Tabellen-

perspektive aus Attributen wie Passnummer, Vor- und Nachname und weiteren per-

sönlichen Details eines wirklichen Passagiers. Beispielsweise ist die Zeile mit der

Passnummer P12233445, dem Vornamen Edgar und dem Nachnamen Zetmann, dem

Geburtsdatum 17.07.1982 sowie der Anschrift ein kompletter Datensatz, der genau

einen Passagier beschreibt und im Normalfall genau einmal innerhalb einer Tabelle

Passnummer Vorname Nachname Geburtsdatum Anschrift

P12345678 Ada Betha 28.11.1984 Adresse 1

P12233445 Edgar Zetmann 17.07.1982 Adresse 2

P11122233 Gabriel Deltram 12.01.1983 Adresse 3

P12345123 Jonas Kapper 01.03.1980 Adresse 4

P54321123 Etha Thees 21.08.1979 Adresse 5

Tabelle 2.1 Passagiertabelle

Page 27: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

57

2

vorhanden ist, er ist also eindeutig. Datensätze werden auch als Tupel bezeichnet. In

diesem konkreten Beispiel wird diese Eindeutigkeit durch den Bezug auf die Pass-

nummer dargestellt, die weltweit genau ein einziges Mal für eine Person vergeben

wird. Obwohl zwei Passagiere denselben Namen tragen, werden sie anhand der Pass-

nummer unterschieden. Für Datenbanksysteme ist es von entscheidender Wichtig-

keit, dass ein Datensatz eindeutig von allen anderen Datensätzen unterscheidbar ist

– wie sonst sollten Verwechslungen zwischen verschiedenen Passagieren vermieden

werden, wenn nicht jeder einzelne eindeutig identifizierbar wäre.

Eine Datenbank selbst umfasst mindestens eine Tabelle. Selbstverständlich kann

eine Datenbank nicht nur eine, sondern beliebig viele Tabellen enthalten, solange

diese voneinander unterscheidbar sind und daher eindeutige Bezeichner aufweisen.

Außerdem muss natürlich genügend Speicherplatz auf dem Server zur Verfügung

stehen.

Die Darstellung von Daten in Tabellen und deren Zusammenfassung in Datenban-

ken hat einen triftigen Grund. Wie bei allen Anwendungen in der Informatik ist auch

hier die Mathematik nicht weit. Denn auch diese anschauliche Darstellungsform hat

ihre Entsprechungen im mathematischen Formalismus. So werden Tabellen als Rela-

tionen, Spalten als Attribute und Zeilen als Tupel bezeichnet. Das Ziel dieses Forma-

lismus ist es, mathematische Operationen der Mengenlehre auf die Daten der Tabelle

anwenden zu können. Die Konsequenzen dafür sind weitreichend, wenn es zum Bei-

spiel um die Verbindung mehrerer Tabellen (Kreuzprodukt), um Sortierreihenfolgen

oder Schlüssel geht. Wann immer es nötig sein sollte, erfahren Sie davon in den

jeweiligen Abschnitten. Auch wenn dieses Hintergrundwissen nicht zwingend für

den praxisnahen Entwurf von Datenbankenmodellen notwendig ist, wird es Ihnen

leichter fallen, wenn Sie den Begriffen hier schon einmal begegnet sind.

2.3.2 Schlüssel identifizieren Datensätze

Wie Sie im vorangegangenen Abschnitt bereits erfahren haben, ist es für das Daten-

bankmanagementsystem unerlässlich, die einzelnen Datensätze voneinander unter-

scheiden zu können. Daher hat jede Datenbank innerhalb eines DBMS einen

eindeutigen Namen, jede Tabelle innerhalb der Datenbank besitzt ebenfalls einen

eindeutigen Bezeichner, und auch jede Spalte innerhalb der Tabelle ist eindeutig

benannt, sofern diese Spalte nicht als Schlüssel dient. Auch der Inhalt der Tabellen –

jeder einzelne Datensatz – muss eindeutig sein. Nur durch eindeutige Datensätze

kann sichergestellt werden, dass es zu keinen Verwechslungen kommt, was im realen

Leben zu fatalen Folgen führen kann. Stellen Sie sich vor, jemand mit nicht ganz so

weißer Weste hätte zufällig denselben Namen wie Sie, und das System rät nun, wer

von Ihnen beiden am Flughafen den Sicherheitscheck passieren möchte ...

Page 28: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

58

Um solche Fehler zu vermeiden, verlassen sich Datenbanken lieber gar nicht auf

»Ratespielchen«, sondern setzen auf das Konzept von Schlüsseln. Ein Schlüssel iden-

tifiziert die Zeile einer Tabelle eindeutig durch einen oder mehrere Werte. Diese

Werte werden so gewählt, dass sie allein oder auch in Kombination nur ein einziges

Mal innerhalb einer Tabelle vorkommen können. Dadurch wird sichergestellt, dass

es keine Zweifel gibt, welcher Datensatz gemeint sein könnte. Wie wir beim vorheri-

gen Beispiel schon gesehen haben, reicht bei Passagieren die Kombination aus Vor-

und Nachname nicht aus, um sicherzustellen, dass ein Passagier eindeutig identifi-

zierbar ist. Auch wenn Sie einen ausgefallenen Namen haben, kann Ihnen niemand

garantieren, dass nicht noch jemand Eltern mit einem Hang zur kreativen Namens-

findung hatte. Anders sieht es mit der Passnummer aus. Da sie von staatlicher Seite

nur genau einmal vergeben wird, schützt sie vor Verwechslungen. Die Passnummer

ist daher ein Attribut, das als Schlüssel geeignet ist.

Somit ist es wichtig, Attribute zu finden, die als Schlüssel eingesetzt werden können,

denn dadurch sind Verwechslungen per Definition ausgeschlossen. Zahlen eignen

sich für diesen Zweck hervorragend, da sie auch automatisch vergeben werden kön-

nen. So kann für jeden neuen Eintrag beim Anlegen die nächsthöhere Nummer zuge-

wiesen werden. Aus diesem Grund werden oftmals künstliche Schlüssel vergeben,

wie Sie im späteren Tutorial noch sehen werden. Dieser Mechanismus wird sehr häu-

fig eingesetzt, da er leicht zu handhaben ist und von MySQL unterstützt wird. Ge-

nerell können für Schlüssel nicht nur einzelne Attribute – wie oben nur die

Passnummer –, sondern auch Kombinationen von Attributen verwendet werden,

solange diese Kombination als Gesamtheit eindeutig ist.

2.3.3 Die relationale Algebra

Nachdem Sie im einleitenden Teil von Abschnitt 2.3 schon mit den grundlegenden

Begriffen der relationalen Datenbanken in Berührung gekommen sind, folgt nun

eine exaktere Definition. In der Einleitung haben Sie gelernt, dass Sie sich Relationen

als Tabellen vorstellen können. Der Begriff der Relation stammt aus der relationalen

Algebra, einem Teilgebiet der Mathematik. Mit Hilfe der relationalen Algebra können

Anfragen an das definierte Datenbankenschema gestellt werden. Sie stellt verschie-

denste Operationen bereit, die selbst wiederum Teilmengen bzw. Ergebnismengen

zurückliefern, die beinahe beliebig kombiniert und verknüpft werden können. Die

relationale Algebra arbeitet demnach nicht mit einzelnen Zahlen, sondern mit Men-

gen bzw. Teilmengen. Sie können sich eine Tabelle auch als Menge im mathemati-

schen Sinn vorstellen, deren Elemente die einzelnen Datensätze sind. Auf diese

Menge werden verschiedene Operationen angewendet, die als Ergebnis ebenfalls

eine Menge zurückliefern. Diese Ergebnismengen sind wiederum Ausschnitte oder

Kombinationen der Ausgangstabellen. Der folgende Abschnitt soll einen kurzen

Überblick über die Materie der relationalen Algebra vermitteln.

Page 29: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

59

2

Eine Relation bezeichnet eine Beziehung zwischen Dingen, die etwas gemeinsam

haben. Dabei werden verschiedene Eigenschaften eines Objekts – die Attribute –

zusammengefasst. Diese Attribute haben jeweils bestimmte Wertebereiche, um

bestimmte Informationen in sich aufnehmen zu können. Analog zu den Tabellen

entspricht ein Attribut einer Spalte innerhalb einer Tabelle. Innerhalb einer Spalte

stehen lauter Daten, die denselben Wertebereich aufweisen. Eine Relation besteht

daher aus einer Kombination von Attributen, genauso wie eine Tabelle aus mehreren

Spalten besteht.

Um einen Schlüssel für Ihre Datenbanktabelle zu finden, müssen Sie jene Attribute

finden, die für sich allein oder zusammengenommen jeden einzelnen Datensatz ein-

deutig identifizieren. Um einen solchen Schlüssel zu finden, müssen Sie alle Attri-

bute einer Tabelle betrachten und jene auswählen, die für die Identifikation eines

Datensatzes unbedingt notwendig sind. Beginnen Sie beispielsweise mit der Passa-

giertabelle und den drei Attributen Passnummer, Vor- und Nachnamen. Diese drei Attri-

bute legen einen Passagier eindeutig fest und sind somit als Schlüssel geeignet. Im

Gegensatz dazu hängt das Geburtsdatum von den ersten drei Attributen ab. Erst

durch diese drei Daten gemeinsam wird das Geburtsdatum eindeutig, da es im obi-

gen Beispiel zwei Passagiere mit demselben Geburtsdatum gibt. Diese Abhängigkeit

von Attributen wird als funktionale Abhängigkeit (englisch functional dependency)

bezeichnet und ist ein zentraler Begriff der relationalen Algebra. In Abschnitt 2.5,

»Normalformen«, wird er Ihnen erneut begegnen.

Die drei Attribute Passnummer, Vorname und Nachname werden auch als Super-

schlüssel bezeichnet, da sie jeden Datensatz eindeutig bestimmen. Doch auch wenn

die Bezeichnung »Superschlüssel« hervorragend klingt, so ist diese Kombination von

Schlüsseln noch nicht ideal. Wie Ihnen sicher schon aufgefallen ist, kann jeder Daten-

satz nämlich nicht nur durch diese drei Attribute identifiziert werden, sondern es ist

viel weniger notwendig. Selbst eine Kombination von Passnummer und Vorname

oder auch eine von der Passnummer mit dem Nachnamen sind ein eindeutiger

Schlüssel. All diese Teilkombinationen werden als Schlüsselkandidaten bezeichnet,

da sie als potentielle Schlüssel eingesetzt werden können. Doch sind diese beiden

ebenfalls nicht minimal, weil es noch einen einfacheren Schlüssel gibt: die Passnum-

mer. Sie allein reicht aus, um jeden Passagier eindeutig in der Passagierliste wieder-

zufinden. Die einfachste und kürzeste aller Kombinationen von Attributen, die alle

Datensätze voneinander unterscheidbar macht, wird als Primärschlüssel bezeichnet.

In diesem Beispiel ist diese Erkenntnis trivial, weil Passnummern für jeden Men-

schen individuell und eindeutig vom Staat vergeben werden. Im Allgemeinen gilt es

jedoch, immer den minimalsten (kleinsten) aller eindeutigen Schlüssel zu finden,

und das ist nicht immer so einfach wie in diesem Beispiel. Es gibt auch Fälle, in denen

Sie selbst keinen eindeutigen Schlüssel vergeben können oder wollen. Wenn Sie zum

Page 30: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

60

Beispiel eine Adressverwaltung planen, wie sie für eine Kundenverwaltung einge-

setzt wird, dann haben Sie vermutlich kein eindeutiges Schlüsselattribut zur Verfü-

gung, von dem Sie sicher sein können, dass es nur genau ein einziges Mal auftritt.

Diese Eindeutigkeit ist, wie wir bereits erörtert haben, jedoch notwendig, um die

Datensätze zuverlässig voneinander unterscheiden zu können. In diesen Fällen kön-

nen Sie sich mit einem künstlichen Primärschlüssel behelfen, den das System selb-

ständig und automatisch vergibt. Ein solcher künstlicher Primärschlüssel könnte

beispielsweise eine Kundennummer sein, die automatisch vom System vergeben

wird. Auch MySQL unterstützt die automatische Vergabe von Schlüsseln, in dem

neu angelegte Datensätze fortlaufend durchnummeriert werden. Dadurch stellt das

System sicher, dass jeder Datensatz anhand dieses künstlichen Schlüssels identifi-

ziert werden kann. Wie Sie eine solche Schlüsselspalte definieren, erfahren Sie in

Abschnitt 2.4.2, »Entitäten«.

Mit Hilfe der relationalen Algebra wird auch die Art und Weise definiert, wie die

Datensätze aus der Datenbank wiedergewonnen werden können. Wie Sie sich vor-

stellen können, ist es von herausragender Bedeutung, diesen Mechanismus exakt

beschreiben zu können, um einmal gespeicherte Daten auch zuverlässig auslesen zu

können, denn ohne diese Funktion wären Datenbanken schwarze Löcher, in die

Daten zwar hinein-, jedoch nie wieder herausgelangen können.

Zwei der grundlegenden Operationen sind die Projektion und die Selektion von

Daten. Unter einer Projektion versteht man die Einschränkung der Ergebnismenge

auf ausgewählte Spalten einer Tabelle. Angenommen, Sie planen eine Werbeaktion,

innerhalb deren Sie Kunden zu ihrem Geburtstag besondere Vergünstigungen per

Post schicken möchten. Dann interessiert Sie besonders Anschrift und natürlich das

Geburtsdatum der Kunden, nicht aber ihre Passnummer. Anstatt nun alle Spalten

aus der Tabelle auszulesen, beschränken Sie sich auf den Vor- und den Nachnamen,

das Geburtsdatum sowie die Anschrift der Kunden. Der Übersichtlichkeit halber fas-

sen wir hier die genaue Adresse in nur einer Spalte – der Anschrift – zusammen.

Diese Projektion wird in der Literatur oftmals mit Hilfe des griechischen Buchsta-

bens �, dem Pi, gekennzeichnet. Formal wird folgende Schreibweise angegeben:

�Attribute (Tabelle)

Dabei werden jene Attribute, die ausgewählt werden sollen, hinter den Operanden �

geschrieben und die Tabelle, aus der die Daten stammen, in Klammern angeführt.

Im konkreten Beispiel lautet die Projektion für den Vor- und Nachnamen, das

Geburtsdatum sowie die Anschrift daher

�Vorname, Nachname, Geburtsdatum, Anschrift (Passagierliste)

um damit jene Spalten anzugeben, die für eine spezielle Abfrage benötigt werden.

Dabei müssen selbstverständlich jene Attribute, die angegeben werden, auch in der

Page 31: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

61

2

Relation vorhanden sein. Mit Hilfe der Projektion können also neue Tabellen aus

bereits vorhandenen Datentabellen erzeugt werden, indem manche Spalten wegge-

lassen werden.

Die Ergebnistabelle enthält nun nur mehr jene Spalten, die für diese Anfrage relevant

sind. Die Projektion blendet also nicht benötigte Spalten einfach aus (siehe Tabelle 2.2).

Aus der gesamten Beispieltabelle erhalten wir nach der Projektion die Teilansicht aus

Tabelle 2.3.

Während bei der Projektion die Auswahl der gewünschten Daten vertikal erfolgt (ein-

zelne Spalten werden ausgewählt), handelt es sich bei der Selektion um eine horizon-

tale Beschränkung der Ergebnismenge. Mit Hilfe der Selektion können einzelne

Zeilen einer Relation ausgewählt oder ausgeblendet und somit in die Ergebnismenge

aufgenommen bzw. weggelassen werden. Um bei dem Geburtstagsaktionsbeispiel zu

bleiben, sollen nur jene Passagiere ausgewählt werden, deren Geburtstag nach Juni

liegt, um nur jene Passagiere zu bewerben, die innerhalb des kommenden halben

Jahres Geburtstag haben. Selektionen werden meist mit dem griechischen Buchsta-

Passnummer Vorname Nachname Geburtsdatum Anschrift

P12345678 Ada Betha 28.11.1984 Adresse 1

P12233445 Edgar Zetmann 17.07.1982 Adresse 2

P11122233 Gabriel Deltram 12.01.1983 Adresse 3

P12345123 Jonas Kapper 01.03.1980 Adresse 4

P54321123 Etha Thees 21.08.1979 Adresse 5

Tabelle 2.2 Die gesamte Beispieltabelle

Vorname Nachname Geburtsdatum Anschrift

Ada Betha 28.11.1984 Adresse 1

Edgar Zetmann 17.07.1982 Adresse 2

Gabriel Deltram 12.01.1983 Adresse 3

Jonas Kapper 01.03.1980 Adresse 4

Etha Thees 21.08.1979 Adresse 5

Tabelle 2.3 Die Spalte mit der Passnummer fehlt nun und gehört somit nicht zur Ergebnis-

menge.

Page 32: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

62

ben �, dem kleinen Sigma, gekennzeichnet, darauf folgen eine Liste der Selektionsbe-

dingungen und die Angabe der Tabelle mit den Daten, die in runden Klammern

erfolgt:

�Selektionsbedingung (Tabelle)

Das folgende Beispiel zeigt diese Auswahl am Beispiel der Passagiertabelle:

�Geburtsdatum > Juni (Passagierliste)

Auch hier wird nach dem Operatorsymbol � erneut eine Eigenschaft angegeben, die

von der gesuchten Ergebnismenge erfüllt werden muss. Dadurch werden nur jene

Zeilen bzw. Datensätze (Instanzen) einer Relation ausgewählt, die das Einschrän-

kungskriterium erfüllen. Jene Datensätze, die das gesuchte Filterkriterium nicht

erfüllen, werden ausgelassen.

Diese beiden Operationen lassen sich selbstverständlich kombinieren, denn nur

durch die Verschachtelung von verschiedenen Operationen sind komplexere Abfra-

gen möglich. Auch hier ist der gezeigte Formalismus der relationalen Algebra sehr

intuitiv und eingängig. Wenn Sie nun alle Adressen jener Passagiere ausgeben möch-

ten, die ab Juni Geburtstag haben, dann lässt sich diese Anfrage wie folgt formu-

lieren:

�Geburtsdatum > Juni (�Vorname, Nachname, Geburtsdatum, Anschrift (Passagierliste))

Wie in der Mathematik allgemein üblich, wird jener Ausdruck zuerst abgearbeitet,

der in der innersten Klammer geschrieben steht. Wie Sie gleich noch sehen werden,

kann diese Anfrage auch umgekehrt gestellt werden, indem zuerst die Selektion

durchgeführt wird. In diesem Beispiel wird demnach zuerst die Anfrage auf die vier

Spalten Vorname, Nachname, Geburtsdatum und Anschrift eingeschränkt, siehe

Tabelle 2.4.

Das Ergebnis enthält nur mehr jene Datensätze, die beide Kriterien – sowohl jene der

Selektion als auch der Projektion – erfüllen. Natürlich ist diese Vorgehensweise nicht

die einzige Möglichkeit, zu beschreiben, welche Daten aus der Datenbank ausgesucht

werden sollen. So ließe sich zum Beispiel auch die Reihenfolge der Projektion und der

Selektion vertauschen, wodurch Sie zum selben Ergebnis gelangen. Führen Sie bei-

Vorname Nachname Geburtsdatum Anschrift

Ada Betha 28.11.1984 Adresse 1

Edgar Zetmann 17.07.1982 Adresse 2

Etha Thees 21.08.1979 Adresse 5

Tabelle 2.4 Die selektierte Passagiertabelle

Page 33: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

63

2

spielsweise zuerst die Selektion aus, indem Sie nur die passenden Geburtsdaten aus-

wählen, erhalten Sie das Zwischenergebnis aus Tabelle 2.5.

Die anschließende Projektion blendet die nicht benötigte Spalte mit der Passnum-

mer aus, und das Ergebnis ist mit dem Resultat des vorigen Beispiels identisch (siehe

Tabelle 2.6).

Obwohl sich die Reihenfolge der Operatoren in diesem Beispiel nicht auswirkt, kann

die Art und Weise, ob zuerst Zeilen oder zuerst Spalten eliminiert werden, sehr wohl

Auswirkungen auf die Leistung einer Datenbank haben. Die beiden Operationen der

Selektion und der Projektion sind von zentraler Bedeutung.

Zusätzlich dazu gibt es eine Vielzahl von weiteren Operatoren, die in der relationalen

Algebra mit Hilfe der Mengenlehre definiert sind und die im Datenbanksystem

MySQL implementiert wurden. Dazu zählen beispielsweise die Vereinigung (�,

Union-Operator) oder auch der Durchschnitt (�, Disjunktions-Operator, wird von

MySQL nicht direkt umgesetzt). Die Konzepte hinter diesen Methoden sind aufgrund

ihrer exakten Definition dieselben wie in der Mengenlehre, sie werden von MySQL

konsequent umgesetzt.

2.3.4 Joins

Eine Gruppe sehr wichtiger Operationen ist jene der Joins (deutsch Verbund). Sie

erlauben es, verschiedene Tabellen anhand unterschiedlicher Kriterien miteinander

zu verknüpfen und dadurch Informationen aus verschiedenen Tabellen zu vereinen

und anhand verschiedener Kriterien zu filtern. Joins sind neben der Selektion und

Passnummer Vorname Nachname Geburtsdatum Anschrift

P12345678 Ada Betha 28.11.1984 Adresse 1

P12233445 Edgar Zetmann 17.07.1982 Adresse 2

P54321123 Etha Thees 21.08.1979 Adresse 5

Tabelle 2.5 Selektion

Vorname Nachname Geburtsdatum Anschrift

Ada Betha 28.11.1984 Adresse 1

Edgar Zetmann 17.07.1982 Adresse 2

Etha Thees 21.08.1979 Adresse 5

Tabelle 2.6 Projektion

Page 34: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

64

der Projektion von zentraler Bedeutung für relationale Datenbanken. Angenommen,

die Flughafenverwaltung setzt verschiedene Tabellen ein. Die Flugtabelle enthält alle

Informationen über eine bestimmte Flugverbindung, wie in Tabelle 2.7 gezeigt.

Im Buchungssystem des Flughafens sind alle Buchungen einzeln erfasst. Sie enthal-

ten die Passnummer des Passagiers sowie die Flugnummer des gebuchten Fluges,

siehe Tabelle 2.8.

Wenn Sie nun herausfinden möchten, welche Passagiere nach Wien (VIE) fliegen und

wie diese Passagiere mit Vor- und Nachnamen heißen, dann kommen Sie mit keiner

der beiden Tabellen allein ans Ziel. Die Aufgabe besteht nun darin, zuerst die Passa-

giertabelle mit der Buchungstabelle zu kombinieren, um danach das Ergebnis mit

der Flugtabelle abzugleichen. Wie Sie sicher schon erkannt haben, ist es definitiv not-

wendig, die Buchungstabelle mit der Passagiertabelle über das Attribut Passnummer

zu vergleichen, da die Passnummer jeden Passagier eindeutig identifiziert und dieses

Attribut in beiden Tabellen vorkommt. Dadurch stellen Sie sicher, dass Sie die richti-

gen Kombinationen von Passagieren mit ihren Buchungen auswählen.

Das Symbol für den Verbund ist in der relationalen Algebra wie folgt definiert: TY,

und die Operation verbindet jene Zeilen miteinander, die denselben Attributwert in

beiden Tabellen in der entsprechenden Spalte haben. Die Schreibweise für diese Ope-

ration lautet:

Flugnummer Abflug Ziel Fluglinie

1111 MUC JFK Lufthansa

2222 IBK VIE Austrian

3333 FRA BER SAS

4444 ROM VIE Alitalia

Tabelle 2.7 Flugtabelle

Passnummer Flugnummer Sitzplatz Preis

P12345678 2222 3E 39.0

P12233445 4444 24B 49.0

P12345123 1111 17A 99.0

P54321123 3333 33C 99.0

Tabelle 2.8 Buchungstabelle

Page 35: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.3 Das relationale Datenbankenmodell

65

2

Tabelle A TYA.Attribut = B.Attribut Tabelle B

Es werden die zu verbindenden Tabellen und die Attribute, anhand deren die Ver-

knüpfung erfolgt, angegeben. In diesem konkreten Beispiel sind das jene Zeilen der

Tabellen »Passagiere« und »Buchungen«, die über eine identische Passnummer ver-

fügen. Mit Hilfe der Formel aus der relationalen Algebra kann diese Zwischenmenge

bestimmt werden:

Passagiertabelle P TYP.Passnummer = B.Passnummer Buchungen B

In dieser Formel werden Aliasse für die Tabellennamen verwendet. P ist die Abkür-

zung der Passagiertabelle, und B steht analog für die Buchungstabelle. Diese Abkür-

zungen werden dazu verwendet, jene Spalte anzugeben, anhand deren die beiden

Tabellen verbunden (gejoint) werden. Diese Abkürzungen sind hier notwendig, da

beide Tabellen eine Spalte haben, die den gleichen Bezeichner trägt: Passnummer.

Der Term P.Passnummer = B.Passnummer gibt an, dass jene Zeilen zusammengehören, deren

Passnummern identisch sind.

Mathematisch gesehen ist ein Join das Kreuzprodukt der zwei Tabellen. Dabei wer-

den alle möglichen Kombinationen gebildet. Da jedoch nicht alle Möglichkeiten

sinnvoll sind – schließlich sollen nur jene ausgegeben werden, deren Passnummern

identisch sind –, werden jene Zeilen verworfen, die das angegebene Join-Kriterium

nicht erfüllen. Dies zeigt die Kombination beider Tabellen, wobei die zusammenge-

hörenden Zeilen nun in einer einzigen Zeile der Ergebnistabelle bzw. -menge zusam-

mengefasst wurden.

Mit Hilfe dieser Zwischentabelle (Tabelle 2.9) ist es nun möglich, anhand der Flug-

nummer in Kombination mit der Flugtabelle auf die Zieldestinationen zu schließen.

Der Übersicht wegen eliminieren wir die Spalten Sitzplatz und Preis noch mit einer

Projektion und erhalten:

PassagierBuchung = �Passnummer, Vorname, Nachname, Flugnummer

(Passagiertabelle P TYP.Passnummer = B.Passnummer Buchungen B)

Passnummer Vorname Nachname FlugNummer Sitzplatz Preis

P12345678 Ada Betha 2222 3E 39.0

P12233445 Edgar Zetmann 4444 17A 49.0

P12345123 Jonas Kapper 1111 33C 99.0

P54321123 Etha Thees 3333 24B 99.0

Tabelle 2.9 Die gejointe Tabelle

Page 36: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

66

Das Zwischenergebnis dieses Joins (gekennzeichnet durch das =) wird in der Formel

mit »PassagierBuchung« bezeichnet und liefert folgende Tabelle (Tabelle 2.10).

Dieses Ergebnis müssen wir nun mit der Flugtabelle joinen, damit die Information

über den Zielflughafen verknüpft werden kann. Dazu wählen wir wieder ein eindeu-

tiges Kriterium, das beide Tabellen gemeinsam haben. In diesem Fall ist die Spalte

Flugnummer der richtige Kandidat für ein Verbundkriterium. Die Formel der relationa-

len Algebra lautet nun:

PassagierBuchungFlug = PassagierBuchung PB TYPB.Flugnummer = F.Flugnummer Flug F

Mit dieser Formel werden all jene Zeilen der Zwischentabelle des vorigen Ergebnisses

mit jenen Zeilen der Flugtabelle verbunden, die über eine identische Flugnummer

verfügen. Das Ergebnis bekommt den Bezeichner »PassagierBuchungFlug« zugewie-

sen. Da die Flugnummer selbst ein eindeutiges Attribut ist, erhalten wir das korrekte

Ergebnis der Form ( siehe Tabelle 2.11):

Als letzter Schritt in diesem Beispiel fehlt noch die Selektion, die das Ergebnis auf den

gewünschten Zielflughafen VIE einschränkt:

PassagierBuchungFlugVIE = �Ziel = VIE (PassagierBuchungFlug)

Diese Projektion liefert nun die Spalten Vorname, Nachname und Ziel

�Vorname, Nachname, Ziel (PassagierBuchungFlugVIE)

Passnummer Vorname Nachname Flugnummer

P12345678 Ada Betha 2222

P12233445 Edgar Zetmann 4444

P12345123 Jonas Kapper 1111

P54321123 Etha Thees 3333

Tabelle 2.10 Zwischenergebnis des Joins

Passnummer Vorname Nachname Flugnummer Abflug Ziel Fluglinie

P12345678 Ada Betha 2222 IBK VIE Austrian

P12233445 Edgar Zetmann 4444 ROM VIE Alitalia

P12345123 Jonas Kapper 1111 MUC JFK Lufthansa

P54321123 Etha Thees 3333 FRA BER SAS

Tabelle 2.11 Gejointe Tabellen »Passagier«, »Buchung« und »Flug«

Page 37: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.4 Datenbankdesign

67

2

in die folgende Ergebnistabelle. Sie enthält die Namen jener Passagiere, die eine

Buchung nach Wien (VIE) vorliegen haben, wie in Tabelle 2.12 dargestellt.

Ohne diese Zwischenschritte ist die Formel etwas komplexer. Wenn Sie sie jedoch

von der innersten Klammer nach außen lesen, ist sie weit weniger furchteinflößend:

�Ziel = VIE ((�Passnummer, Vorname, Nachname, Flugnummer (Passagiertabelle

P TY P.Passnummer = B.Passnummer Buchungen B)) TY (PB.Flugnummer = F.Flugnummer Flug F))

Die relationale Algebra erlaubt es, durch einen einfachen Formalismus, Abfragen

genau zu beschreiben. Dadurch ist es möglich, das Verhalten von Datenbanken zu

definieren. Diese eindeutige Definition ist unerlässlich, da ein und dieselbe Abfrage

auf denselben zugrundeliegenden Tabellen immer dasselbe Ergebnis liefern muss.

Das solide Fundament der Mengenlehre bietet diesen Grundsatz, und daher ist es

wichtig, sich diese Grundlagen vor Augen zu führen. Obwohl die Hintergründe der

relationalen Algebra für das Verständnis der Arbeitsweise von Datenbanken interes-

sant und sinnvoll sind, werden Sie diesem Formalismus in MySQL nicht direkt begeg-

nen. Spätestens wenn Sie sich jedoch an die Anfrageoptimierung machen, werden Sie

das hier angeeignete Wissen wieder benötigen.

2.4 Datenbankdesign

Das Datenbankdesign beschäftigt sich mit der Gestaltung der Tabellen für die Daten

und mit den Beziehungen dieser Tabellen untereinander. In diesem Schritt wird die

Aufgabe, für die das Datenbanksystem eingesetzt werden soll, abstrahiert und in eine

eigene Sprache übersetzt. Diese Beschreibungssprache werden Sie in diesem Ab-

schnitt kennenlernen. Ausgehend von der abstrakten Beschreibung ist es leichter,

die Vorgaben korrekt im Datenbanksystem Ihrer Wahl – hier also MySQL – zu imple-

mentieren.

2.4.1 Das ER-Diagramm

Da MySQL das relationale Datenbankmodell einsetzt, gilt es, Objekte – die Entitäten –

der realen Welt zu identifizieren und die Eigenschaften dieser Objekte, die Sie in Ihrer

Datenbank festhalten möchten, herauszuarbeiten. Alle jene Objekte mit gemeinsa-

Vorname Nachname Ziel

Ada Betha VIE

Edgar Zetmann VIE

Tabelle 2.12 Das Ergebnis

Page 38: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

68

men Eigenschaften – die Attribute – werden später in einer Tabelle zusammengefasst,

wobei die Spalten einer solchen Tabelle den gemeinsamen Eigenschaften entspre-

chen. Zwischen den Entitäten bestehen Zusammenhänge, die durch Beziehungen

ausgedrückt werden. Diese Beziehungen – die Relationships – werden ebenfalls zwi-

schen den Tabellen hergestellt. Diese Verknüpfungen werden mit Fremdschlüsseln

realisiert, die Sie im vorigen Abschnitt bereits kennengelernt haben.

Damit Kunden, Entwickler und Datenbankdesigner eine gemeinsame Sprache spre-

chen können, gibt es verschiedene Beschreibungssprachen für die Modellierung.

Eine der bekanntesten grafischen Beschreibungssprachen ist das Entity-Relation-

ship-Modell (ER-Modell), das bereits in den 1970er-Jahren erfunden und später

immer wieder verfeinert wurde. Es handelt sich dabei um eine grafische Beschrei-

bung der Beziehungen zwischen den Tabellen einer Datenbank. Es besteht grundle-

gend aus den drei genannten Elementen:

� Entitäten (Objekte bzw. Tabellen)

� Beziehungen (zwischen Tabellen über ihre Attribute)

� Attribute (Eigenschaften bzw. Spalten)

Entitäten sind jene Objekte der realen Welt, die eindeutig identifiziert werden kön-

nen und abstrahiert werden sollen. Sie enthalten all jene Eigenschaften, die das reale

Objekt ausmachen. In ER-Diagrammen werden diese Entitäten durch Rechtecke dar-

gestellt. Diese Entitäten stehen in Beziehungen zueinander, die Abhängigkeiten und

allgemeine Zusammengehörigkeit ausdrücken. Die Art der Beziehung wird auch als

Funktionalität bezeichnet und im folgenden Abschnitt erläutert. Diese Beziehungen

zwischen den Entitätsklassen werden mit Hilfe von Rauten dargestellt, die diese Klas-

sen miteinander verbinden. Zusätzlich gibt es Attribute, die sowohl die Entitätsklas-

sen als auch die Beziehungen genauer beschreiben.

Das Beispiel der Flughafenverwaltung soll das verdeutlichen. Für die grafische Dar-

stellung aller Entitäten, Beziehungen und Attribute haben wir das kostenlose Tool

MySQL Workbench von Oracle eingesetzt und alle folgenden Grafiken damit erstellt.

Das Werkzeug dient jedoch nicht nur zum Malen von schönen Bildern. Es handelt

sich dabei um eine sehr umfangreiche und mächtige Softwarelösung, die im Daten-

bankendesign sehr hilfreich ist. Welche Möglichkeiten Ihnen MySQL Workbench bie-

tet, erfahren Sie in Abschnitt 7.8.1, »MySQL Workbench«. Hier geht es vorerst noch

um die theoretischen Hintergründe.

2.4.2 Entitäten

Wenn Sie die Beschreibung des Flughafenszenarios erneut durchlesen, werden Ihnen

einige Bereiche auffallen, die in sich abgeschlossen sind und deren Daten zusam-

mengehören. Die Hauptaufgabe eines Flughafens ist die Verwaltung von Flügen.

Page 39: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.4 Datenbankdesign

69

2

Daher ist es ein guter Rat, Flüge als Einheit zusammenzufassen. Ein Flug besteht aus

einer Reihe von Eigenschaften bzw. Daten: Flugnummer, Fluglinie, Abflugzeit,

Ankunftszeit und weiteren Informationen. Die Tabelle »flug« wird mit einem ER-

Diagramm dargestellt (Abbildung 2.2). Die Attributnamen sind in diesem Beispiel

schon an ein reales Datenbankdesign angepasst.

Abbildung 2.2 ER-Diagramm der Tabelle »flug«

Wie Sie sehen, ist die Entität »flug« als Rechteck dargestellt. Eine solche Entität ent-

spricht einer eigenen Tabelle innerhalb des Datenbankenschemas, die grafische Dar-

stellung dient zur Veranschaulichung des Modells.

Innerhalb des Kästchens befinden sich die Attribute, die hier bereits ihren endgülti-

gen Datentyp zugewiesen haben. Was diese Werte genau bedeuten, ist noch nicht so

wichtig, das erfahren Sie in Kapitel 4, »Einführung in die Beispieldatenbank«. Wichtig

ist hier aber, dass Sie erkennen, wie die vorher festgelegten Eigenschaften zu einer

Einheit zusammengefasst werden. In diesem Beispiel ist ein Flug ein solches Objekt,

das durch die einzelnen Attribute beschrieben wird. Die Zusammengehörigkeit die-

ser Attribute wird mit Hilfe des Entitätssymbols im ER-Diagramm dargestellt. Die in

dem rechteckigen Kästchen dargestellte Entität trägt den Namen flug. Diese Bezeich-

nung ist im Titel des Kästchens dargestellt und dient auch der zugrundeliegenden

Tabelle als Bezeichner.

Unterhalb der Titelleiste sind alle Attribute aufgelistet, die einen Flug beschreiben. In

diesem Beispiel zählen dazu eine eindeutige Flug-ID namens flug_id. Sie dient zur

Identifizierung eines Fluges und wird von anderen Tabellen später referenziert wer-

den, zum Beispiel bei der Flugbuchung. In der Grafik erkennen Sie vor der Attributbe-

zeichnung flug_id ein kleines gelbes Schlüsselsymbol. Dabei handelt es sich um das

Symbol für den Primärschlüssel. Dieser Primärschlüssel gibt an, dass jeder einzelne

Flug, der später in dieser Tabelle gespeichert werden soll, durch ihn eindeutig unter-

Page 40: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

70

schieden werden kann. Es kann daher keine zwei Flüge mit einer identischen flug_id

innerhalb der Tabelle geben. Dieses unscheinbare Symbol ist daher von großer Wich-

tigkeit für diese Tabelle.

Rechts neben der Attributbezeichnung sehen Sie eine Abkürzung in Großbuchsta-

ben. Dabei handelt es sich um den Datentyp, der für die Speicherung der Flugnum-

mer eingesetzt werden soll. In diesem konkreten Beispiel der Flugnummer wird

INTEGER als Datentyp gewählt, die Kurzschreibweise lautet INT. Mit Hilfe dieses Typs

werden Ganzzahlen gespeichert. Darauf folgt das Attribut flug_nr, das vom Datentyp

CHAR ist und achtstellige Zeichenketten in sich aufnehmen kann. Eine Flugnummer

(flug_nr) besteht aus der internationalen Fluglinienbezeichnung – dem IATA-Code,

der zwei Zeichen für das Kürzel der Fluglinie vorsieht, sowie aus einer bis zu fünfstel-

ligen Nummer, die individuell vergeben wird.

Das nächste Attribut, die Spalte von, verfügt im Gegensatz dazu über den Datentyp

SMALLINT, was bedeutet, dass das Attribut ganzzahlige Werte in sich aufnimmt. Im

Unterschied zu INT nimmt der Datentyp SMALLINT jedoch nur Zahlen, die kleiner als

65535 sind, in sich auf. INT hingegen kann Zahlen bis zu 4294967295 speichern.

SMALLINT hat daher einen kleineren Wertebereich und benötigt daher auch weniger

Speicherplatz. Doch dazu später mehr. Genauso verhält es sich mit der spiegelbild-

lichen Spalte nach der Tabelle »flug«. Diese beiden Attribute stellen Beziehungen zu

dem Abflugs- bzw. Ankunftsflughafen her und enthalten eine ebenfalls eindeutige

Nummer, die in der Flughafentabelle definiert wird.

Danach folgen zwei Attribute zur Speicherung der Abflugs- und Ankunftszeit, inklu-

sive dem jeweiligen Datum. Beide Attribute – sowohl abflug als auch ankunft – sind

daher vom Datentyp DATETIME. Die Verknüpfung mit der Fluglinientabelle erfolgt

über das Attribut fluglinie_id, das erneut vom Typ SMALLINT ist. Das letzte Attribut

dieser Tabelle ist jenes des eingesetzten Flugzeugs namens flugzeug_id, mit dessen

Hilfe die Beziehung zur Flugzeugtabelle hergestellt wird. Dieses Attribut ist vom Typ

INT, das für ganzzahlige Werte verwendet wird.

Die Tabelle »flug« ist nun vollständig spezifiziert. Sie besteht aus den acht genannten

Attributen, der Primärschlüssel ist die ID flug_id, und die Bezeichnung lautet wie im

Titel: »flug«. Die sehr übersichtliche Darstellung mittels ER-Diagramm kann man

sich gedanklich sehr leicht als Tabelle vorstellen. Die Tabelle selbst enthält natürlich

noch keine Daten. Diese werden erst später eingefügt, wenn die Erstellung des

Modells abgeschlossen ist.

Ein Diagramm nur mit der Flugtabelle ist allerdings wenig hilfreich. Daher wird das

Diagramm immer weiter ausgebaut, bis es das gesamte Szenario der Flughafenver-

waltung beschreibt. Als Nächstes sollen diese Flüge von Passagieren gebucht werden

können. Diese einfache Aussage liefert gleich Rückschluss auf zwei Objekte, die

jeweils in einer eigenen Entität zusammengefasst werden können: Passagiere und

Page 41: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.4 Datenbankdesign

71

2

Buchungen. Die folgende Grafik zeigt die Tabelle der Buchungen, die nach demselben

Prinzip angelegt wird: Zuerst identifizieren Sie das konkrete Objekt, das Sie modellie-

ren wollen. In diesem Fall ist das die Flugbuchung. Als Nächstes legen Sie die Attri-

bute fest, deren Werte Sie innerhalb dieser Tabelle speichern wollen. Dazu zählen in

diesem Szenario die folgenden Attribute bzw. Spalten: flug_id, sitzplatz, passagier_

id, preis sowie eine intern vergebene Nummerierung der Buchungen, buchung_id.

Bei diesem letzten Attribut handelt es sich um einen künstlichen Primärschlüssel,

den MySQL automatisch durch Hochzählen vergibt. Die zu dieser Tabelle gehörende

ER-Entität ist in Abbildung 2.3 dargestellt.

Abbildung 2.3 ER-Diagramm der Buchungstabelle

Mit diesen fünf Attributen kann festgehalten werden, für welchen Flug eine Buchung

erfolgt ist. Die Attribute haben wieder je einen Datentyp zugeordnet bekommen. Die

Buchungsidentifikationsnummer (buchung_id), die Flugidentifikationsnummer

(flug_id) und die Passagieridentifikationsnummer (passagier_id) sind vom Daten-

typ INT, sie beinhalten demnach Ganzzahlenwerte. Die Spalte sitzplatz ist vom Typ

CHAR, also ein String-Typ, der vier Stellen in sich aufnehmen kann. Die Anzahl der

Stellen wird in Klammern nach der Datentypdefinition angezeigt. Das vierte Attri-

but, preis, nimmt Dezimalzahlen in sich auf. Die beiden Ziffern 4 und 2 geben an,

dass die Dezimalzahl insgesamt sechs Stellen aufnehmen kann, wobei zwei dieser

Stellen Nachkommastellen sind. Der teuerste Flug, der in diesem Szenario angeboten

werden kann, kostet damit höchstens 9.999,99 €.

Wie Sie bei der Erstellung der ersten Tabelle, »flug«, bereits gesehen haben, erlaubt

die Flugnummer den eindeutigen Rückschluss auf genau einen bestimmten Flug.

Um mit einem Flugzeug mitfliegen zu können, benötigen Sie einen Sitzplatz, weswe-

gen das nächste Attribut genau diesen Wert in sich aufnimmt. Ein Sitzplatz darf

innerhalb eines Flugzeuges für einen konkreten Flug nur ein einziges Mal vergeben

werden.

Wenn Sie nun beide Tabellen betrachten, dann fällt Ihnen sicherlich auf, dass beide

Tabellen eine Spalte bzw. ein Attribut mit demselben Namen besitzen. Natürlich ist

Page 42: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2 Datenbankmodellierung

72

die Vergabe eines identischen Namens in zwei unterschiedlichen Tabellen legitim,

schließlich muss nur innerhalb einer Tabelle Eindeutigkeit bei den Spaltennamen

herrschen. Dennoch zeigt allein die Namensgebung hier einen Zusammenhang zwi-

schen den beiden Tabellen an, der gedanklich bereits getroffen wurde. Eine Flugbu-

chung bezieht sich immer auf einen konkreten Flug, für den ein Ticket gekauft

wurde. Zwischen den Tabellen »flug« und »buchung« besteht daher eine Beziehung.

Es gibt verschiedene Arten von Beziehungen, die wir im Folgenden vorstellen.

2.4.3 Beziehungen

Mit den Beziehungen im Bereich der Datenbanken verhält es sich wie mit Beziehun-

gen im realen Leben: Es gibt einseitige, wechselseitige und gegenseitige Beziehun-

gen. Je nach Beziehungstyp müssen verschiedene Abhängigkeiten beachtet werden.

Beziehungen zwischen Entitäten werden durch ihre Attribute festgelegt. Die Anzahl

der Entitäten, auf die sich ein Attribut bezieht, wird mit der Kardinalität angegeben.

Eine Kardinalität gibt also an, auf wie viele konkrete Datensätze einer zweiten Tabelle

sich ein Datensatz der ersten Tabelle beziehen kann.

Der einfachste Fall einer Beziehung ist die sogenannte 1:1-Beziehung. Sie tritt dann

auf, wenn ein Element einer Entität genau einem Element einer anderen Entität

zugeordnet wird. Hier bezieht sich jedes Element einer Tabelle auf ein Element einer

anderen Tabelle und umgekehrt. Im mathematischen Sinne entspricht diese Bezie-

hung einer bijektiven Abbildung, die jedem Attribut der Ursprungstabelle genau ein

Attribut der Zieltabelle zuordnet und umgekehrt. Im Allgemeinen tritt dieser Bezie-

hungstyp nur sehr selten auf. Das hat den Grund, dass 1:1-Beziehungen nur dann not-

wendig sind, wenn eine Tabelle mit sehr vielen Attributen in zwei Teiltabellen

unterteilt werden soll. Anderenfalls könnten alle Attribute zweier Tabellen, die in die-

sem Beziehungstyp miteinander stehen, in einer Tabelle zusammengefasst werden,

da es offenbar immer genau zwei korrespondierende Datensätze gibt. Beide Tabellen

verweisen durch ihren Primärschlüssel auf die jeweils andere Tabelle. Für jede Zeile

der ersten Tabelle gibt es genau eine passende Zeile in der zweiten Tabelle und umge-

kehrt. Daher könnte man diese beiden Tabellen auch genauso gut zusammenfassen,

so dass alle Daten in nur einer einzigen Tabelle stehen. Das Aufteilen wird auch als

vertikale Partitionierung bezeichnet und dient vor allem der Leistungssteigerung

und der Vereinfachung von Datenbankenschemas. Details zur Partitionierung mit

MySQL finden Sie in Abschnitt 9.4. Der Vollständigkeit halber stellen wir die 1:1-Bezie-

hung im Folgenden trotz ihrer relativ geringen Bedeutung kurz vor.

Die Tabelle mit den Passagierdaten hat viele Attribute, für die Abfertigung werden

jedoch nur wenige Details eines Passagiers benötigt. Dazu zählen die Passnummer,

der Vor- und der Nachname eines Passagiers. Daher ist es sinnvoll, die Passagierda-

ten aufzuteilen, da beispielsweise beim Boarding nur die Stammdaten benötigt wer-

Page 43: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

2.4 Datenbankdesign

73

2

den, nicht jedoch die weiteren Details. Eine Tabelle »passagier« enthält durch diese

Partitionierung die grundlegenden Daten der Passagiere, die bei jedem Buchungs-

und Boardingvorgang benötigt werden. Eine zweite Tabelle, »passagierdetails«, ent-

hält die weiteren Daten, die nur während des Bestellvorgangs notwendig sind. Dazu

zählen beispielsweise erweiterte Informationen wie das Geburtsdatum, das Ge-

schlecht, die Telefonnummer und die E-Mail-Adresse der Passagiere.

Der Zusammenhang zwischen den beiden Tabellen kann mit Hilfe des ER-Dia-

gramms grafisch dargestellt werden. Es gibt für die Darstellung der verschiedenen

Beziehungsarten verschiedene Notationen, die etwas unterschiedlich aussehen, aber

dieselbe Bedeutung haben. Zu den bekanntesten Notationen zählen die Chen-Nota-

tion, UML-Klassendiagramme (Unified Modeling Language), IDEF1X (Integration

Definition for Information Modeling) und die Krähenfuß-Notation. Die Verwendung

einer bestimmten Notation ist Geschmackssache, Sie sollten sich jedoch auf eine

Methodik festlegen. In diesem Buch setzen wir die sogenannte Krähenfuß-Notation

ein, da sie sehr weit verbreitet und auch die voreingestellte Standardnotation der

MySQL Workbench ist. Die folgende Grafik zeigt diese 1:1-Beziehung zwischen der all-

gemeinen Passagiertabelle und den Passagierdetails (Abbildung 2.4).

Abbildung 2.4 Relation zwischen der Passagier- und der Passagierdetails-Tabelle in der

Krähenfuß-Notation

Im einleitenden Beispiel wurde für die Identifizierung eines Passagiers dessen Pass-

nummer verwendet. In der konkreten Datenbank wurde die Tabelle der Passagierda-

ten jedoch um einen künstlichen Schlüssel, eine automatisch vergebene Zahl,

erweitert. Dieses neu eingeführte Attribut passagier_id dient von nun an als Primär-

Page 44: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

255

7

Kapitel 7

MySQL administrieren

Hier lernen Sie, wie Sie MySQL administrieren, sich um Backups küm-

mern und an den richtigen Schrauben drehen, um einen sicheren und

zuverlässigen Betrieb zu gewährleisten.

Im vorigen Kapitel haben Sie gelernt, wie Sie MySQL selbst kompilieren, installieren

und grundlegend absichern. In diesem Kapitel erfahren Sie, welche Aufgaben Sie als

Administrator erwarten. Dieses Kapitel stellt zusätzlich die wichtigsten Tools vor,

mit deren Hilfe Sie die unterschiedlichsten Probleme lösen werden.

7.1 Der bordeigene Werkzeugkasten

Eine MySQL-Installation besteht aus mehreren Programmen, die Sie unabhängig

voneinander verwenden können, um mit dem vielleicht wichtigsten Programm Ser-

ver-Daemon mysqld – zu kommunizieren und zu arbeiten. Es handelt sich dabei um

Programme, die Sie direkt auf der Kommandozeile ausführen können. Diese Tools

sind bei der Binärdistribution für Ihr Betriebssystem bereits vorhanden, und falls Sie

MySQL manuell installiert haben, finden Sie sie auch im bin-Verzeichnis innerhalb

des Installationsverzeichnisses. Die wichtigsten dieser Werkzeuge sind:

� mysql: Das ist der interaktive Client, den Sie bereits kennen.

� mysqladmin: Das ist ein hilfreiches Tool für die Administration.

� mysqlimport: Importiert Daten in eine Datenbank.

� mysqldump: Ist notwendig für sichere Backups Ihrer Daten.

� mysqlcheck: Überprüft Tabellen und repariert sie gegebenenfalls.

� mysqlslap: Das ist ein Benchmarking-Programm zum Testen der Serverlast.

Neben diesen sehr wichtigen kommandozeilenbasierten Tools gibt es weitere Werk-

zeuge, die über eine grafische Oberfläche verfügen. Dazu gehören:

� MySQL Workbench

� MySQL Administrator

� MySQL Query Browser

Page 45: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

256

Diese Programme müssen Sie extra von den Webseiten1 von MySQL herunterladen

und eigens installieren. Sie haben den Vorteil, dass sie die Handhabung verschiede-

ner administrativer Aufgaben wesentlich vereinfachen. Dennoch ist es unabdingbar,

dass Sie die wichtigsten Werkzeuge und Tools auf Kommandozeilenebene beherr-

schen. Gerade in stressigen Situationen, wo Sie eventuell keinen Zugriff auf die Pro-

gramme mit Benutzeroberflächen haben, sind sie unverzichtbar. Außerdem lassen

sich viele wichtige Aufgaben, wie beispielsweise Backups, auch automatisieren. Das

funktioniert jedoch nur mit kommandozeilenbasierten Programmen, die Sie mit

Parametern steuern können.

Die meisten der folgenden Kommandozeilenprogramme befinden sich im bin-Ver-

zeichnis Ihrer MySQL-Installation. Wenn Sie den Pfad bereits zu den Umgebungsva-

riablen hinzugefügt haben, wie wir in Abschnitt 6.1.5, »Den MySQL-Dienst starten«,

erklärt haben, dann können Sie diese Programme einfach mit dem jeweiligen Namen

des Tools aufrufen.

7.2 Der Name ist Programm: »mysqladmin«

Das erste Tool, das Sie kennenlernen, heißt mysqladmin, und es handelt sich dabei um

ein Werkzeug, mit dem Sie – Sie ahnen es bereits – administrative Aufgaben erledi-

gen können.

7.2.1 Datenbanken anlegen und löschen

Beispielsweise können Sie mit mysqladmin schnell und unkompliziert Datenbanken

anlegen, indem Sie das Tool mit den Parametern aus Listing 7.1 aufrufen:

bash# mysqladmin create neueDatenbank -u root -p

Listing 7.1 Mit »mysqladmin« eine Datenbank anlegen

Mit diesem Befehl legt MySQL sofort eine neue und leere Datenbank an. Auch hier

müssen Sie den Benutzernamen »root« und das passende Passwort angeben. Dieser

Befehl ist beispielsweise dann nützlich, wenn Sie schnell und unkompliziert eine

neue Datenbank benötigen. Genauso schnell lassen sich Datenbanken auch wieder

löschen. Verwenden Sie dazu den Aufruf aus Listing 7.2:

bash# mysqladmin drop neueDatenbank -u root -pEnter password: ****Dropping the database is potentially a very bad thing to do. Any

1 http://dev.mysql.com/downloads/workbench/5.2.html und http://dev.mysql.com/downloads/gui-

tools/5.0.html

Page 46: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.2 Der Name ist Programm: »mysqladmin«

257

7

data stored in the database will be destroyed.

Do you really want to drop the 'neueDatenbank' database [y/N] yDatabase "neueDatenbank" dropped

Listing 7.2 Eine ganze Datenbank löschen

In diesem Fall warnt Sie MySQL davor, die gesamte Datenbank zu löschen; wenn Sie

sich direkt mit dem Client einloggen, würde das Löschen der Datenbank ohne War-

nung erfolgen. Das Resultat ist beide Male dasselbe: Die Datenbank neueDatenbank

wird sofort gelöscht.

7.2.2 Caches leeren

Ein weiteres wichtiges Gebiet, um das Sie sich kümmern müssen, sind die verschie-

denen Pufferspeicher, die Sie ebenfalls regelmäßig warten müssen. MySQL bietet

eine Reihe von verschiedenen Caches, die beispielsweise für Berechtigungen oder

Tabellenoptimierungen verwendet werden. Dazu zählen die folgenden Speicher für:

� Berechtigungen (flush-privileges)

� Host-Informationen (flush-hosts)

� Logs (flush-logs)

� Statusvariablen (flush-status)

� Tabellen (flush-tables)

� Threads (flush-threads)

Diese Zwischenspeicher können Sie flushen, also leeren, indem Sie den für den Spei-

cher zuständigen Flush-Befehl mysqladmin als Parameter angeben. Um beispielsweise

die Berechtigungstabellen neu zu laden, indem der aktive Berechtigungs-Cache

geleert wird, verwenden Sie die Befehlszeile aus Listing 7.3. Dadurch werden Ände-

rungen an den Berechtigungstabellen sofort wirksam.

bash# mysqladmin flush-privileges -u root -p

Listing 7.3 Berechtigungstabelle neu laden

MySQL bietet weitere Möglichkeiten an, die Zwischenspeicher von MySQL zu leeren.

Beispielsweise können Sie alle Berechtigungstabellen auch mit dem Befehl aus Lis-

ting 7.4 neu laden; die beiden Befehle bewirken dasselbe:

bash# mysqladmin reload

Listing 7.4 Kurzschreibweise zum Neuladen der Berechtigungstabelle

Page 47: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

258

Es gibt viele Szenarien, in denen Sie die Caches leeren müssen, um den Betrieb Ihres

Servers ordnungsgemäß fortsetzen zu können. Zum Beispiel verwaltet MySQL die

Anzahl der Verbindungsversuche pro Host in der Servervariablen max_connect_

errors. Diese ist standardmäßig auf 100 gesetzt und bewirkt, dass ein Client, der sich

mehr als hundertmal erfolglos zu verbinden versucht hat, blockiert wird. Diese Ein-

stellung schützt vor zu häufigen Verbindungsversuchen. Wenn ein Host diese Zahl

überschritten hat und somit gesperrt wurde, dann können Sie mit dem Befehl flush-

hosts aus Listing 7.5 diese Blockade wieder lösen, bis der Host den Grenzwert erneut

erreicht. Nur wenn Sie diesen Pufferspeicher leeren, kann ein gesperrter Host wieder

versuchen, sich zu verbinden.

bash# mysqladmin flush-hosts -u root -p

Listing 7.5 Den Hosts-Cache leeren

Um alle Tabellen-Caches neu zu laden und die Logfiles zu schließen und neu zu öff-

nen, können Sie entweder flush-tables und flush-logs nacheinander einsetzen,

oder Sie verwenden den Befehl aus Listing 7.6, der beide Aktionen nacheinander

durchführt:

bash# mysqladmin refresh

Listing 7.6 Tabellen- und Log-Caches neu laden

7.2.3 Das »root«-Passwort ändern

Sie können mysqladmin jedoch nicht nur zum Anlegen von Datenbanken und Lee-

ren von Caches verwenden. Sie können damit auch Ihr »root«-Passwort ändern. Dazu

müssen Sie den Befehl aus Listing 7.7 einsetzen:

mysqladmin -u root -p geheim neugeheimneu

Listing 7.7 Das eigene »root«-Passwort ändern

Dieser Befehl setzt das »root«-Passwort auf das angegebene Passwort neugeheimneu.

Damit Sie das Passwort neu setzen können, müssen Sie das aktuelle jedoch wissen,

denn der Client fragt dieses interaktiv ab. Dieser Befehl benötigt in jedem Fall die

Berechtigung SUPER, um das Passwort neu setzen zu können. Diese Methode hat

jedoch den entscheidenden Nachteil, dass das Passwort im Klartext in der Komman-

dozeile eingegeben werden muss.

Seit der neuen Version 5.6 können Sie Passwörter auch interaktiv ändern, damit

keine sensiblen Daten in der History der Kommandozeile gespeichert werden. Ver-

wenden Sie dazu einfach den Befehl aus Abschnitt A.8 und lassen das neue Passwort

Page 48: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.2 Der Name ist Programm: »mysqladmin«

259

7

einfach weg. Das System wird Sie auffordern, ein neues Passwort einzugeben, das

nicht am Bildschirm angezeigt wird.

bash# mysqladmin -u root -p geheim

Listing 7.8 Verdecktes Neusetzen des Passwortes

Selbstverständlich können Sie Passwörter auch mit Hilfe des MySQL-Clients setzen,

die hier gezeigte Methode ist aber oftmals schneller, da Sie nur das neue Passwort für

den »root«-Nutzer angeben müssen. Um ein Passwort als »root«-User für einen

beliebigen Benutzer zu setzen, verwenden Sie einfach das UPDATE-Statement, wie im

Beispiel in Listing 7.9 dargestellt:

mysql> UPDATE mysql.user SET-> Password=PASSWORD('geheim')-> WHERE User='testuser';

Listing 7.9 Ein Passwort im Client neu setzen

Diese Methode hat den Vorteil, dass Sie jedes Passwort ändern können, nicht nur von

Ihrem eigenen »root«-Account, sondern von jenem Nutzer, dessen Namen Sie in der

WHERE-Klausel angeben. Im obigen Beispiel wird das Kennwort des Users »testuser«

auf den neuen Wert geheim gesetzt. Nachdem Sie dieses Passwort geändert haben,

vergessen Sie nicht, die Berechtigungen neu zu laden. Erst dann werden die Änderun-

gen wirksam. Sie können dies innerhalb des Clients mit FLUSH PRIVILEGES oder außer-

halb des Clients mit dem Befehl aus Listing 7.10 tun:

bash# mysqladmin flush_privileges -u root -p

Listing 7.10 Berechtigungen neu laden mit »flush_privileges«

Selbstverständlich hätten Sie für diese Aufgabe auch den GRANT-Befehl verwenden

können, den Sie aus Abschnitt 6.2, »Usermanagement«, kennen.

Das »root«-Passwort neu setzen

Sollten Sie einmal aus Versehen Ihr MySQL »root«-Passwort vergessen haben, dann

bewahren Sie Ruhe, denn es gibt auch hier eine Lösung. Sie können MySQL mit einem

speziellen Parameter starten, durch den das System die Berechtigungstabelle nicht

berücksichtigt. Dadurch können Sie sich (genau wie jeder andere Benutzer auch!)

ohne Passwort anmelden. Stoppen Sie zuerst den MySQL-Server, falls er läuft, wie in

Listing 7.11 dargestellt ist. Wechseln Sie dazu in das »root«-Konto Ihres Linux-Sys-

tems, und rufen Sie das init-Skript mit dem Parameter stop auf:

bash# /etc/init.d/mysql stop

Listing 7.11 MySQL anhalten

Page 49: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

260

Daraufhin wird der Serverprozess beendet. Sie können den Server nun erneut mit der

Option --skip-grant-tables starten, siehe Listing 7.12:

bash# mysqld_safe --skip-grant-tables &

Listing 7.12 MySQL ohne Berechtigungstabellen laden

Nun wird der Server erneut hochgefahren, Sie benötigen jedoch kein Passwort mehr,

um sich am Server als Datenbankbenutzer »root« anzumelden. Mit der Option --

skip-grant-tables kann sich nun jeder ohne Passwort anmelden, auch über das

Netzwerk, sofern Sie keine weiteren Vorkehrungen getroffen haben. Um diese

Schwachstelle zu beheben, können Sie den MySQL-Dienst zusätzlich mit --skip-net-

working starten. Den Befehl dazu sehen Sie in Listing 7.13.

bash# mysqld_safe --skip-grant-tables --skip-networking &

Listing 7.13 Starten des MySQL-Dienstes ohne Passwort und ohne Netzwerkunterstützung

Verwenden Sie nun den Befehl aus Listing 7.14, um sich ohne Passwortabfrage vom

lokalen Rechner aus anzumelden:

bash# mysql -u root

Listing 7.14 Wie gewohnt anmelden

Beachten Sie, dass hier der bekannte Parameter -p nicht gesetzt wird, da Sie kein

Passwort angeben werden. Sie landen im MySQL-Client und verfügen dort über

alle Privilegien. Unter anderem können Sie nun endlich das neue »root«-Passwort

für den wichtigsten Zugang zu MySQL setzen. Hier kommt wieder der aus Listing 7.9

bekannte UPDATE-Befehl zum Einsatz:

mysql> UPDATE mysql.user SET Password=PASSWORD('geheim')-> WHERE User='root';

Listing 7.15 Das Passwort neu setzen

Als Nächstes müssen Sie die Berechtigungstabelle neu laden. Verwenden Sie dazu

den Befehl aus Listing 7.16:

mysql> FLUSH PRIVILEGES;

Listing 7.16 Die Berechtigungstabelle neu laden

Nach diesem Schritt sollten Sie sich aus dem Client abmelden und den MySQL-Ser-

ver, der mittels --skip-grant-tables manuell gestartet wurde, stoppen. Verwenden

Sie für diese Aufgabe wieder den Befehl aus Listing 7.17:

Page 50: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.2 Der Name ist Programm: »mysqladmin«

261

7

bash# /etc/init.d/mysql stop

Listing 7.17 MySQL-Server stoppen

Gleich danach können Sie den Server wieder neu durchstarten, dieses Mal jedoch

wieder mit Hilfe des init-Skripts und ohne die Angabe weiterer Parameter, siehe Lis-

ting 7.18:

bash# /etc/init.d/mysql start

Listing 7.18 MySQL mit Standardeinstellungen starten

Nach diesem Schritt startet Ihr MySQL-Server wieder mit Passwortschutz, und Sie

können sich mit dem neu gesetzten Passwort anmelden. Natürlich benötigen Sie die

»root«-Rechte für Ihr Linux-System, um den Server zuerst herunterfahren und dann

mit der speziellen Option starten zu können. Aus diesem und vielen anderen Grün-

den sollten Sie dieses »root«-Passwort auf keinen Fall vergessen.

7.2.4 Den Server überwachen

Doch mysqladmin ist nicht nur für die bisher genannten Aufgaben nützlich, es bietet

Ihnen auch die Möglichkeit, sich schnell und unkompliziert über den aktuellen

Zustand Ihres MySQL-Servers zu informieren. So können Sie beispielsweise überprü-

fen, ob Ihre Instanz von MySQL überhaupt läuft. Verwenden Sie dazu den Befehl aus

Listing 7.19:

bash# mysqladmin -u root -p pingmysqld is alive

Listing 7.19 Ein Lebenszeichen

In Produktivumgebungen sollten Sie selbstverständlich ein automatisches Überwa-

chungstool wie Nagios2 einsetzen. Solche Programme laufen selbständig und

benachrichtigen Sie per E-Mail oder sogar SMS über Störungen. Mit dem Werkzeug

Nagios können Sie nicht nur MySQL selbst überprüfen, sondern sämtliche Dienste,

wie etwa Apache oder den Mailserver, im Auge behalten.

Einen kurzen Überblick über den aktuellen Status holen Sie mit dem in Listing 7.20

dargestellten Aufruf ein:

bash# mysqladmin status -u root -pEnter password:

2 http://www.nagios.org

Page 51: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

262

Uptime: 1195 Threads: 1 Questions: 10 Slow queries: 0 Opens:33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.8

Listing 7.20 Statusinformationen anzeigen

Der Befehl status liefert Ihnen hier zwar eine sehr kurze, aber dafür auch sehr infor-

mative Ausgabe direkt auf die Kommandozeile zurück. So sehen Sie beispielsweise,

seit wie vielen Sekunden Ihr Server bereits läuft (Uptime), wie viele Clients momentan

verbunden sind (Threads) und weitere statistische Informationen über Anfragen und

Tabellen. Dazu zählen auch die Anzahl der abgearbeiteten Anfragen (Questions) und

insbesondere auffällige, das bedeutet langsame Anfragen (Slow queries).

Der Wert der Variablen Opens beschreibt, wie viele Tabellen der Server seit seinem

Start insgesamt geöffnet hat, Open tables zeigt hingegen die aktuelle Anzahl geöffne-

ter Tabellen an. Flush tables gibt Aufschluss darüber, wie viele flush-, refresh- oder

reload-Anweisungen der Server seit seinem Start durchgeführt hat. Die letzte

Angabe, Queries per second avg, listet die durchschnittliche Anzahl von Anfragen pro

Sekunde seit dem Serverstart auf.

Rufen Sie mysqladmin status immer dann auf, wenn Sie sich einen schnellen Über-

blick über den Zustand Ihres MySQL-Servers verschaffen wollen. Das bedeutet, dass

Sie sich regelmäßig vergewissern müssen, dass alle Anfragen nach Plan beantwortet

werden können. Auffälligen Änderungen in den hier angegebenen Werten sollten Sie

umgehend nachgehen!

Für eine ausführlichere Darstellung aktueller Servervariablen verwenden Sie den fol-

genden Befehl (Listing 7.21):

bash# mysqladmin extended-status -u root -p

Listing 7.21 Servervariablen anzeigen

Sie erhalten durch diesen Befehl eine vollständige Liste aller Optionen und Variablen

sowie deren aktuelle Belegung. Einen Auszug dieser Liste sehen Sie in Listing 7.22.

+-----------------------------------+----------+| Variable_name | Value |+-----------------------------------+----------+| Aborted_clients | 2 || Aborted_connects | 0 || Bytes_received | 464524 || Bytes_sent | 9194415 |...| Open_files | 128 |

Page 52: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.2 Der Name ist Programm: »mysqladmin«

263

7

| Open_streams | 0 || Open_table_definitions | 256 || Open_tables | 64 || Opened_files | 2269 || Opened_table_definitions | 522 || Opened_tables | 1735 |...

| Uptime | 18969 || Uptime_since_flush_status | 18969 |+-----------------------------------+----------+

Listing 7.22 Auszug der Variablenbelegungen

Um nach einer bestimmten Variablen zu filtern, können Sie das Linux-Tool grep ver-

wenden, das Sie bereits aus Abschnitt 3.3.2, »Schnellinstallation unter Linux«, ken-

nen. Beispielsweise erhalten Sie mit dem folgenden Befehl die Anzahl aller offenen

Tabellen, indem Sie die Ausgabe des mysqladmin-Tools an das Filterwerkzeug grep

weiterleiten (Listing 7.23). Sie erhalten jene Zeile mit der angegebenen Variablen (hier

Opened_tables) zurück.

bash# mysqladmin extended-status -u root -p | grep Opened_tables\| Opened_tables | 1735 |

Listing 7.23 Eine spezielle Variable herausfiltern

Wenn Sie sich für die aktuell laufenden Queries und Verbindungen interessieren,

dann benutzen Sie den Befehl aus Listing 7.24:

bash# mysqladmin processlist -u root -p+----+----+---------+---+-------+----+------+----------------+|Id |User|Host |db |Command|Time|State |Info |+----+----+---------+---+-------+----+------+----------------+|260 |php |localhost|CMS|Query |160 | | ||266 |root|localhost| |Query |0 | |show processlist|+----+----+---------+---+-------+----+------+----------------+

Listing 7.24 Aktive Prozesse anzeigen

Sie erhalten prompt eine Auflistung der aktuellen Anfragen. Mit dieser praktischen

Methode können Sie beispielsweise sehr lange dauernde Anfragen identifizieren und

entsprechend darauf reagieren. So brechen Sie beispielsweise mit dem Befehl KILL

eine Anfrage, die zu lange läuft, ab, wie in Listing 7.25 gezeigt:

Page 53: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

264

mysql> KILL QUERY 260;

Listing 7.25 Eine Anfrage abbrechen

Geben Sie bei diesem Befehl die Id der betreffenden Anfrage an, um diese zu been-

den. Sie bekommen diese Id mit Hilfe des Befehls aus Listing 7.24 oder indem Sie

direkt im Client den Befehl SHOW PROCESSLIST verwenden. Falls Sie eine ganze Verbin-

dung beenden müssen, verwenden Sie dazu den Befehl aus Listing 7.26:

mysql> KILL CONNECTION 1;

Listing 7.26 Eine Verbindung trennen

Wenn Sie über die Berechtigung SUPER verfügen, können Sie alle gelisteten Anfragen

und Verbindungen beenden. Ohne diese Berechtigung können Sie nur Ihre eigenen

Verbindungen und Queries abbrechen.

7.3 Daten importieren und exportieren

Von Zeit zu Zeit kann es notwendig sein, neue Daten in eine bestehende Datenbank

zu importieren oder vorhandene Daten außerhalb der Datenbank abzuspeichern,

diese also zu exportieren. Die vermutlich bekannteste Anwendung für diese Tätigkei-

ten stellen Backup und Recovery dar, die jedoch wir erst in Abschnitt 7.4, »Richtig

sichern – Backups und Strategien«, vorstellen werden. In diesem Abschnitt lernen Sie

Methoden kennen, mit denen Sie die Daten selbst ganz allgemein in Ihre Datenbank

laden und auch wieder aus ihr herausholen.

7.3.1 Daten aus Dateien importieren

Sie können Daten aus unterschiedlichen Quellen importieren, wenn Sie diese als

Textdatei vorliegen haben. So ist es beispielsweise möglich, Daten aus den unter-

schiedlichsten Anwendungen nach MySQL zu migrieren und Ihren Datenschatz dort

zu verwalten und zu bearbeiten.

Ein sehr wichtiger Befehl zum Importieren von Daten ist LOAD DATA INFILE. Mit die-

sem Aufruf laden Sie Daten aus Textdateien in eine bestehende Tabelle. Dieser Befehl

liest Textdateien zeilenweise ein, wobei ein Datensatz in einer Zeile steht. Das Einle-

sen erfolgt sehr schnell, weswegen dieser Befehl auch für sehr große Datenmengen

geeignet ist.

Natürlich könnten Sie die Daten auch mit dem INSERT-Statement einfügen. Dies ist

jedoch viel langsamer als die Methode LOAD DATA INFILE, da für jeden einzelnen

Datensatz, sofern einzeln angegeben, auch eine eigene Abfrage an den Server gestellt

Page 54: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.3 Daten importieren und exportieren

265

7

wird. Eine solche Abfrage umfasst neben dem Auf- und Abbauen der Verbindung

auch die Analyse dieser Abfragen und das Anlegen des Indexes, sofern ein solcher für

diese Tabelle vorgesehen ist, was ebenfalls sehr viel Zeit benötigt. Wann immer Sie

Daten in einer Textdatei vorliegen haben, sollten Sie daher die Variante LOAD DATA

INFILE einsetzen, da sie viel schneller ist.

Eine Standardanwendung für den Befehl LOAD DATA INFILE ist das Laden der Daten aus

einer CSV-Datei. CSV-Dateien lassen sich mit sehr vielen Programmen erstellen und

sind dementsprechend häufig anzutreffen. Verwenden Sie den Befehl aus Listing

7.27, um eine solche Datei in Ihre MySQL-Datenbank zu laden:

mysql> LOAD DATA INFILE '/tmp/daten.csv'-> INTO TABLE flug-> FIELDS TERMINATED BY ';'-> ENCLOSED BY '"' LINES TERMINATED BY '\n';

Listing 7.27 Eine CSV-Datei laden

Der in Listing 7.27 angegebene Befehl hat drei Parameter für die verschiedenen

Trennzeichen der Attribute, der Werte und eines gesamten Datensatzes. Im obigen

Beispiel werden Attribute durch das Semikolon getrennt (FIELDS TERMINATED BY ';'),

die eigentlichen Werte stehen in Hochkommas, und ein Datensatz wird durch einen

Zeilenumbruch beendet (ENCLOSED BY '"' LINES TERMINATED BY '\n';). Dies sind die

wichtigsten Parameter, mit denen Sie MySQL mitteilen, woran es die einzelnen Fel-

der eines Datensatzes erkennt. Sie hängen zum einen von der Formatierung Ihrer

CSV-Datei ab, zum anderen ist insbesondere das Symbol für den Zeilenvorschub von

Ihrem Betriebssystem abhängig. Unter Linux verwenden Sie im Regelfall das New-

line-Symbol '\n', unter Windows hingegen '\r\n'.

Beachten Sie hierbei, dass die Datei für den Linux-User »mysql« lesbar sein muss,

damit sie geladen werden kann. Sollten die Berechtigungen nicht korrekt sein, wird

in Listing 7.28 dargestellte Fehler angezeigt:

ERROR 13 (HY000): Can't get stat of '/tmp/daten.csv' (Errcode: 2)

Listing 7.28 Die Linux-Berechtigungen sind inkorrekt.

Ein weiterer Fehler, der ebenfalls häufig auftritt, ist in Listing 7.29 dargestellt. Hier

wurde die Datei nicht gefunden. Überprüfen Sie daher den Pfad der Datei.

ERROR 29 (HY000): File '/tmp/daten.csv' not found (Errcode: 13)

Listing 7.29 Die Datei wird nicht gefunden.

Beachten Sie, dass in diesem Beispiel die Dateien, die Sie laden möchten, auf dem

Server liegen müssen. Allgemein sollten Sie am besten absolute Pfade angeben, da-

Page 55: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

266

mit der Speicherort der gewünschten Datei eindeutig festgelegt ist. Bei relativen

Pfaden wird das Installationsverzeichnis des Servers als Ausgangspunkt verwendet.

Wie Sie Dateien verwenden können, die auf einem Clientrechner gespeichert sind, se-

hen Sie in Listing 7.36. Natürlich müssen Sie auch bei diesem Importvorgang bereits

festgelegte Constraints berücksichtigen. Andernfalls kann beispielsweise die Fehler-

meldung aus Listing 7.30 auftreten.

ERROR 1452 (23000): Cannot add or update a child row: a foreignkey constraint fails

Listing 7.30 Eine Fremdschlüsselbeziehung wird verletzt.

Dieser Fehler kann dann auftreten, wenn Tabellen untereinander Fremdschlüsselbe-

ziehungen aufweisen, wie es beispielsweise bei InnoDB-Tabellen möglich ist. Wenn

Sie den Namen der Fremdschlüsselbedingung vergessen haben, können Sie sie sich

entweder mit dem Befehl aus Listing 7.31 anzeigen lassen:

mysql> SHOW CREATE TABLE flug;

Listing 7.31 Die Anweisung SHOW CREATE TABLE zum Anzeigen der Tabellendefinition

Oder Sie greifen auf die interne Tabelle »INFORMATION_SCHEMA« zurück und fra-

gen mit dem Statement aus Listing 7.32 direkt die Fremdschlüsselbeziehungen ab:

mysql> SELECT-> CONCAT(table_name,'.',column_name)-> AS 'Fremdschluessel',-> CONCAT(referenced_table_name,'.',-> referenced_column_name) AS 'bezieht sich auf'-> FROM-> information_schema.key_column_usage-> WHERE-> referenced_table_name IS NOT NULL AND table_name-> LIKE 'flug';

Listing 7.32 Fremdschlüssel abfragen

Durch diese SELECT-Anfrage in Listing 7.32 bekommen Sie eine Liste aller Fremd-

schlüssel der Tabelle »flug« zurück. Damit Sie die Tabellen nicht manuell eintippen

müssen, hängt dieser Befehl mittels CONCAT die Tabellen- und Spaltennamen anei-

nander, die in der Datenbank »INFORMATION_SCHEMA« gespeichert sind. Mit AS wer-

den Aliasse für die Spaltennamen angelegt, damit diese leichter verständlich sind.

Details zur CONCAT-Funktion finden Sie in der Referenz. Die Ausgabe dieses Befehls

ist in Listing 7.33 dargestellt.

Page 56: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.3 Daten importieren und exportieren

267

7

+-------------------+------------------------+| Fremdschluessel | bezieht sich auf |+-------------------+------------------------+| flug.von | flughafen.flughafen_id || flug.nach | flughafen.flughafen_id || flug.fluglinie_id | fluglinie.fluglinie_id || flug.flugzeug_id | flugzeug.flugzeug_id |+-------------------+------------------------+

Listing 7.33 Fremdschlüsselbeziehungen anzeigen

Da Sie nun die Namen der Fremdschlüsselbeziehung kennen, können Sie Daten

leichter in der richtigen Reihenfolge in die Tabellen laden.

Zusätzlich zum Befehl LOAD DATA INFILE, den Sie direkt vom Client aus absetzen können,

finden Sie im Werkzeugkasten das Tool mysqlimport, das für genau denselben Zweck

vorgesehen ist. Es handelt sich dabei um den LOAD-Befehl, der in ein eigenständiges

Programm verpackt wurde, damit Sie Ihre Tabellen bequem von der Kommandozeile

aus befüllen können. Sie können die gleichen Parameter für die Zeilenschaltungen und

Trennzeichen verwenden.

Stellen Sie sich vor, Ihre geniale Marketingabteilung des Flughafens hat ein Gewinn-

spiel durchgeführt, bei dem Anrufer vergünstigte Flüge nach Denis Island gewinnen

konnten. Das Angebot galt nur für Stammkunden, und der Preis entsprach der Rei-

henfolge der Anrufer: Der erste bezahlte nur 1 €, der hundertste Anrufer 100 €, was

ebenfalls ein unschlagbar günstiger Preis für die Destination ist. Da diese Aktion sehr

kurzfristig angelegt war, um den Flieger in den warmen Süden noch voll zu bekom-

men, haben die Mitarbeiter des Telefondienstes die Daten der Anrufer manuell in

eine Excel-Tabelle eingetragen und als CSV-File exportiert. In Listing 7.34 sehen Sie

einen Ausschnitt der CSV-Datei:

87; 748654;90A;19800;88; 748654;90B;8123;89; 748654;90C;33122;

Listing 7.34 Die CSV-Datei mit den glücklichen Gewinnern

Paketgröße und Dateigrößen

Beachten Sie beim Importieren, dass die Dateigröße den Wert der Variablen max_allowed_packet nicht überschreiten darf, da MySQL sonst einen Fehler wirft. Stan-

dardmäßig ist dieser Wert seit der Version 5.6.6 auf 4 MB gesetzt, bei älteren Versio-

nen war die Standardgröße 1 MB. Setzen Sie gegebenenfalls die Variable ent-

sprechend auf einen passenden Wert. Den Befehl dazu finden Sie in Abschnitt 6.3.4,

»Servervariablen setzen und ändern«.

Page 57: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

268

Diese Datei wurde mit Excel erzeugt, die einzelnen Spalten enthalten der Reihe nach

den Preis des Flugs, die flug_id, die Sitznummer und die passagier_id, die die Mitar-

beiter aus der Kundendatei ausgelesen haben. Der Preis wurde in aufsteigender Rei-

henfolge eingegeben; die Flugnummer ist bei allen identisch, da die Destination des

Aktionsfluges vorgegeben ist. Die einzelnen Einträge sind nur durch Semikolons

getrennt.

Diese Daten sollen Sie nun möglichst unkompliziert in eine eigene Buchungstabelle

namens »gewinner_buchungen« eingeben. Legen Sie dazu die neue Tabelle wie in

Listing 7.35 angegeben an:

mysql> CREATE TABLE gewinner_buchungen (-> buchung_id int(11) NOT NULL AUTO_INCREMENT,-> flug_id int(11) NOT NULL,-> sitzplatz char(4) DEFAULT NULL,-> passagier_id int(11) NOT NULL,-> preis decimal(10,2) NOT NULL,-> PRIMARY KEY ( buchung_id ),-> KEY flug_id ( flug_id ),-> KEY passagier_id ( passagier_id ));

Listing 7.35 Die neue Gewinnertabelle

Um nun diese Daten aus der CSV-Datei zu importieren, können Sie den bereits vorge-

stellten LOAD-Befehl verwenden, oder Sie setzen das Tool mysqlimport ein, das über

denselben Funktionsumfang verfügt. Listing 7.36 zeigt diesen Befehl:

bash# mysqlimport\--fields-terminated-by=';'\--lines-terminated-by='\n'\-u root -p\--columns='preis,flug_id,sitzplatz,passagier_id'\--local\FlughafenDB Pfad/zur/Datei/gewinner_buchungen.csvEnter password:

Listing 7.36 Datenimport mit »mysqlimport«

Wie Sie leicht sehen können, heißen die Parameter gleich wie im LOAD-Befehl. Hier

wurde als Trennungszeichen das Semikolon verwendet, das Zeilenende wird mit

dem \n-Symbol kenntlich gemacht. Neu ist in diesem Beispiel der Parameter columns,

mit dem Sie die Reihenfolge der Spalten in der CSV-Datei angeben können, da sie sich

von der Reihenfolge in Ihrer Datenbank unterscheiden kann.

In diesem Beispiel steht der Preis als Erstes in der Datei, da die Mitarbeiter der

Gewinnhotline zuerst eine Liste mit 100 Plätzen für die Gewinner angelegt haben.

Page 58: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7.3 Daten importieren und exportieren

269

7

Mit der durch Kommas getrennten Liste teilen Sie MySQL mit, wie die Spalten aus der

CSV-Datei in der Datenbanktabelle angeordnet werden müssen. In diesem einfachs-

ten Beispiel sind auch in der CSV-Datei alle Felder relevant für Ihre Datenbank. Das

muss nicht immer der Fall sein. Stellen Sie sich vor, die Telefondienstmitarbeiter hät-

ten in ihrer Excel-Tabelle die Anrufer bewertet und in ihrer Tabelle den subjektiven

Eindruck über den Ausdruck der Freude der Gewinner notiert. Die CSV-Datei mit den

Enthusiasmuswerten sehen Sie in Listing 7.37:

87; 748654;90A;sehr;19800;88; 748654;90B;wenig;8123;89; 748654;90C;euphorisch;33122;

Listing 7.37 CSV-Datei mit einem Attribut, das nicht in der Datenbank erfasst werden soll

Dieses Attribut soll beim Einfügen ignoriert werden. Verwenden Sie dazu das @-Zei-

chen in der columns-Liste vor dem Attribut in der CSV-Datei. MySQL behandelt diese

Spalte nun wie eine Variable und speichert ihren Inhalt nicht in der Tabelle ab, was

andererseits zu einem Fehler führen würde, da sowohl Anzahl der Spalten als auch

die Wertebereiche der CSV-Datei nicht mehr mit der Tabelle zusammenpassen wür-

den. In Listing 7.38 sehen Sie den leicht abgeänderten Befehl in Gänze:

bash# mysqlimport\-d --fields-terminated-by=';'\--lines-terminated-by='\n'\-u root -p\--columns='preis,flug_id,sitzplatz,\@freude,passagier_id'\--local FlughafenDB Pfad/zur/Datei/gewinner_buchungen.csv

Listing 7.38 Der angepasste Aufruf an »mysqlimport«

Die restlichen Parameter stimmen in beiden Beispielen überein. So ist der Parameter

local – so unscheinbar er ist – wichtig. Durch diese Einstellung liest MySQL die Datei

aus dem Dateisystem des Clients, von dem aus der Aufruf erfolgt. Wenn Sie local

nicht angeben, sucht MySQL nach der Datei im Installationsverzeichnis des Servers;

dorthin müssten Sie die CSV-Datei vorher extra kopieren und auch auf die Datenbe-

rechtigungen achten. Wenn Sie jedoch local angeben, werden die Dateisystembe-

rechtigungen des Users verwendet, der mysqlimport aufruft.

Falls Sie sich wundern sollten, woher mysqlimport weiß, in welche Tabelle die Daten

geladen werden müssen, dann betrachten Sie den Dateinamen der CSV-Datei. Das

Tool verwendet immer diesen Namen ohne die Dateiendung – also ohne die Endung

.csv oder welche immer Sie auch gewählt haben – als Zieltabellennamen. Sie können

dieses Verhalten auch nicht durch eine zusätzliche Option ändern. Lediglich der

Page 59: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

7 MySQL administrieren

270

Datenbankname – FlughafenDB – wurde im Beispiel angegeben, der Tabellenname

wird automatisch bestimmt. Falls Sie diese Einschränkung – die zugegebenermaßen

nicht sehr praktisch ist – umgehen wollen, müssen Sie den LOAD-Befehl benutzen.

Verwenden Sie beispielsweise einen Aufruf wie in Listing 7.39. Der Parameter -e ist

die Kurzform von --execute.

bash# mysql -e\"LOAD DATA INFILE '/tmp/daten.csv'INTO TABLE flughafen_beschreibung;"\FlughafenDB -u root -p

Listing 7.39 Einfügen von der Kommandozeile mit Tabellenangabe

Ein weiterer Vorteil des LOAD-Befehls gegenüber mysqlimport ist die Tatsache, dass Sie

mit Letzterem keine Warnings ausgeben können, da die Session vom mysqlimport-

Befehl selbst beendet wird. Wenn Sie jedoch LOAD verwenden, können Sie sich etwaige

Warnungen einfach ausgeben lassen.

Sie könnten auch die CSV-Storage-Engine verwenden, die direkt mit CSV-Dateien

arbeitet. Tabellen, die diesen Engine-Typ einsetzen, werden direkt als CSV-Dateien

gespeichert. Durch diese Technik verzichten Sie jedoch auf viele Vorteile von MySQL,

wie beispielsweise die Indizierung.

7.3.2 Daten exportieren

Im vorherigen Abschnitt haben Sie gelernt, wie Sie Datensätze aus Dateien in Ihre

MySQL-Datenbank laden. Selbstverständlich ist auch der umgekehrte Weg möglich,

mit dem Sie die Datensätze Ihrer Tabellen oder auch die Ergebnisse exportieren. Das

ist oftmals notwendig, wenn Sie Ihre Datensammlung oder beliebige Ergebnisse – auch

komplexer – Anfragen mit einem anderen Programm weiterverarbeiten müssen.

Das Gegenstück zu den bereits vorgestellten Methoden, Daten zu laden, ist der Befehl

SELECT INTO OUTFILE, der das Ergebnis einer SELECT-Anfrage in eine Datei auf dem Ser-

ver schreibt. Sie können alle Parameter, Schalter und Optionen verwenden, die Sie

auch für gewöhnliche Abfragen einsetzen. Sie müssen lediglich die Klausel INTO

OUTFILE zusätzlich angeben. Die Anfrage in Listing 7.40 zeigt, wie Sie alle Datensätze

der Tabelle »passagier« in eine Datei im tmp-Verzeichnis Ihres Datenbankenservers

speichern können. Auch hier wurde ein absoluter Pfad verwendet, da dieser eindeu-

tig ist und auch auf Dateien außerhalb des Datenbanken-Installationsverzeichnisses

verweisen kann.

mysql> SELECT * INTO OUTFILE-> '/tmp/allePassagiere.csv'-> FIELDS TERMINATED BY ';'

Page 60: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

771

Index

.NET Framework............................................... 92, 659

@-Zeichen ................................................................. 269

[mysqld] ..................................................................... 240

1NF .................................................................................. 82

2NF .................................................................................. 86

32 Bit............................................................................... 94

3NF .................................................................................. 86

64 Bit............................................................................... 94

A

Abbruchbedingung ................................................ 581

Abfrageerweiterung .............................................. 408

Abfrageverarbeitung....................................... 155, 157

Abhängigkeit

funktionale.............................................................. 59

transitive .................................................................. 86

Abhörversuch ........................................................... 514

Ablaufsteuerung ....................................................... 571

Aborted_connects.................................................. 298

Abstraktion .................................................................. 35

Modellierung .......................................................... 49

Absturz ............................................................... 287, 292

ACID-Eigenschaften ....................................... 172, 183

ACID-konform .................................................. 191, 333

ACTION_CONDITION ........................................... 620

ACTION_ORDER...................................................... 620

ACTION_ORIENTATION........................................ 621

ACTION_REFERENCE_NEW_ROW .................... 621

ACTION_REFERENCE_NEW_TABLE ................. 621

ACTION_REFERENCE_OLD_ROW ..................... 621

ACTION_REFERENCE_OLD_TABLE .................. 621

ACTION_STATEMENT ............................................ 621

ACTION_TIMING ..................................................... 621

ADD PARTITION............................................. 458, 459

Administrationsaufgaben ................................... 255

Administratorberechtigungen ................... 94, 473

Administratorkonto............................................... 223

AFTER ........................................................................... 614

AFTER DELETE........................................................... 617

AFTER INSERT ........................................................... 616

AFTER UPDATE ......................................................... 617

Aktualisierung � Update

Algebra

relationale ............................................................. 149

Alias........................................................................ 65, 616

ALL ................................................................................ 488

ALL PRIVILEGES ...................................................... 470

ALTER .................................................................. 479, 558

ALTER EVENT ................................................... 629, 732

ALTER FUNCTION .......................................... 558, 730

ALTER PROCEDURE ....................................... 544, 728

ALTER ROUTINE.............................................. 482, 538

ALTER TABLE ............................................................. 126

ALTER TABLE ADD FOREIGN KEY .................... 704

ALTER TABLE ADD PARTITION .......................... 744

ALTER TABLE ANALYZE PARTITION ................ 745

ALTER TABLE CHECK PARTITION ..................... 745

ALTER TABLE COALESCE PARTITION .............. 745

ALTER TABLE DROP FOREIGN KEY ................. 704

ALTER TABLE DROP PARTITION ....................... 745

ALTER TABLE EXCHANGE PARTITION............ 746

ALTER TABLE OPTIMIZE PARTITION ............... 746

ALTER TABLE REBUILD PARTITION ................. 746

ALTER TABLE REMOVE PARTITIONING ......... 745

ALTER TABLE REORGANIZE PARTITION ........ 746

ALTER TABLE REPAIR PARTITION .................... 746

ALTER TABLE TRUNCATE PARTITION............. 747

ALTER VIEW ....................................................... 539, 725

ANALYZE PARTITION ........................................... 460

ANALYZE_TABLE ..................................................... 477

AND ............................................................................... 573

Änderungsanomalie ................................................. 81

AND-Verknüpfung ................................................. 705

Anfrageüberprüfung ............................................ 470

Anmeldung................................................................ 726

Anmeldung � Login ............................................. 230

ANSI SQL

2003 SQL/PSM..................................................... 532

Antelope ..................................................................... 194

Anweisung

bedingte .................................................................. 572

API .................................................................................. 251

Application Programming Interface � API

Applikationsberechtigungen ............................ 506

apt ................................................................................. 103

ARCHIVE .................................................................... 204

ASCII ..................................................................... 232, 714

ASTEXT ........................................................................ 743

ASTEXT() ..................................................................... 394

Atomarität .................................................................. 172

atomarity .................................................................... 172

Attribut .................................................................. 56, 68

Aufwärmen................................................................. 312

Page 61: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

772

Ausfallsicherheit...................................................... 361

Ausführer.................................................................... 169

Ausführung................................................................ 543

Ausführungseinheit ............................................... 169

Ausführungsplan ........................................... 149, 164

Ausgabe

vertikale.................................................................. 120

Ausgabeparameter ................................................ 546

Austrittspunkt .......................................................... 553

Authentifizierung ................................................... 231

Autocommit-Modus ...................................... 175, 176

Auto-Increment ....................................................... 367

auto-increment-increment................................ 368

auto-increment-offset.......................................... 368

automysqlbackup ................................................... 291

Axmark, David............................................................ 41

B

Backtick ....................................................................... 478

Backup .......................................... 37, 271, 272, 361, 537

inkrementelles ..................................................... 278

logisches ........................................................ 274, 278

physisches.............................................................. 274

volles ........................................................................ 277

Barracuda.................................................................... 194

BASE ............................................................................. 678

base_dir ...................................................................... 244

bashrc ........................................................................... 228

Bash-Shell ........................................................... 212, 227

Bedienfehler ............................................................. 288

Bedingte Anweisung .............................................. 572

BEFORE ........................................................................ 614

BEFORE DELETE........................................................ 617

BEFORE INSERT ........................................................ 616

BEFORE UPDATE ...................................................... 616

BEGIN ................................................................... 176, 722

BEGIN WORK ............................................................. 176

BEGIN/END-Blöcke ................................................. 733

Begrenzungszeichen .............................................. 533

BENCHMARK.................................................... 313, 760

Benchmark ........................................................ 297, 312

Benutzer erzeugen................................................. 488

Benutzerdefinierte MySQL-Variable .............. 566

Benutzereingaben maskieren ............................ 523

Benutzergruppe ...................................... 215, 219, 233

Benutzerkonto

Betriebssystemebene.......................................... 215

Benutzeroberfläche ................................................ 256

Benutzerrechte......................................................... 229

Owner ...................................................................... 219

Benutzerzugang ...................................................... 229

Berechtigungen ............................................... 231, 467

auf Zeilenebene ................................................... 507

Berechtigungsebene .............................................. 472

Berechtigungstabelle.............................................. 257

Bereichsanfrage .............................................. 203, 387

Berkeley DB ................................................................. 43

Bezeichner ............................................................ 52, 112

Bezeichnerschema ................................................. 566

Beziehung .............................................................. 68, 72

1:1-Beziehung........................................................... 75

1:n-Beziehung......................................................... 76

Arten ........................................................................... 73

identifizierende ...................................................... 75

n:m-Beziehung ...................................................... 76

symmetrische......................................................... 76

BIN.................................................................................. 715

Binärdatei..................................................................... 39

Binärdistribution ..................................................... 255

Binäres Logging ....................................................... 538

Binär-Log ........................................................... 242, 288

Binary............................................................................. 92

bind_address ............................................................ 244

binlog_format .......................................................... 242

BIT_LENGTH .............................................................. 715

BLACKHOLE.............................................................. 206

Blattknoten................................................................ 383

BLOB ............................................................................. 335

Block ............................................................ 382, 541, 563

Blog .................................................................................. 33

Boolesche Volltextsuche � Volltextsuche

Buffer-Management ............................................... 152

Bug .................................................................................. 46

Build-Tools.................................................................. 214

Business Intelligence................................................ 32

C

CA ................................................................................... 517

Cache ................................................................... 160, 257

CALL..................................................................... 543, 728

CallableStatements ................................................ 655

Cardinality ................................................................. 414

CASE...................................................................... 577, 734

Catch-all-Partition .................................................. 448

Certificate Authority � siehe CA

CHANGE MASTER ................................................... 372

CHANGE MASTER TO ........................................... 740

CHAR ............................................................................. 715

CHAR_LENGTH ......................................................... 715

CHARACTER_LENGTH ........................................... 715

Page 62: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

773

CHARACTER_MAXIMUM_LENGTH................ 560

CHARACTER_OCTET_LENGTH ......................... 560

CHARACTER_SET_CLIENT ....... 562, 619, 621, 630

CHARACTER_SET_NAME ..................................... 561

CHECK .......................................................................... 293

CHECK PARTITION................................................. 460

CHECK TABLE .................................................... 558, 755

Chen-Notation............................................................ 73

Cipher........................................................................... 518

Clearing ....................................................................... 631

Client .............................................................................. 93

Client-Server-System ............................................... 39

CLOSE ........................................................................... 585

CLOSE CURSOR ......................................................... 737

cmake ........................................................................... 214

COALESCE .................................................................. 460

Codd, Edgar ........................................................... 34, 82

Code wiederverwenden ........................................ 529

Cold Copy � Offline-Backup

COLLATION_CONNECTION..... 562, 619, 621, 630

COLLATION_NAME ................................................ 561

COLUMNS .................................................................. 446

columns_priv........................................................... 497

COLUMNS-Partitionierung ................................. 452

COMMENT.................................................................. 543

COMMIT ............................................ 174, 558, 612, 722

Community ................................................................. 39

Compiler ..................................................................... 212

CONCAT........................................................................ 715

CONCAT_WS............................................................... 715

Condition................................................................... 594

Connector................................................................... 641

Connector/J .............................................................. 650

Connector/NET ....................................................... 659

consistency ................................................................. 172

Constraint ......................................................... 127, 266

CONTAINS SQL ................................................ 542, 554

Content

dynamisch generierter ....................................... 32

Content-Management-System ............................ 33

Continue-Handler ......................................... 590, 595

Crash Recovery................................................ 287, 295

CREATE ............................................................... 477, 558

CREATE DATABASE ....................................... 699, 747

CREATE EVENT................................................. 624, 732

CREATE FUNCTION ........................................ 552, 729

CREATE INDEX ......................................................... 704

CREATE PROCEDURE ........................... 540, 541, 727

CREATE ROUTINE .................................................... 481

CREATE SERVER....................................................... 764

CREATE TABLE .................................................. 113, 699

mit Partitionen.................................................... 743

Storage-Engine-Einstellungen ...................... 764

CREATE TABLESPACE............................................ 489

CREATE TEMPORARY TABLE .............................. 478

CREATE TRIGGER ..................................................... 731

CREATE USER ................................................... 488, 752

CREATE VIEW ................................................... 480, 725

CREATE_ROUTINE .................................................. 538

CREATE_TEMPORARY_TABLES ........................ 608

CREATED.................................................... 562, 619, 621

Cronjob............................................................... 532, 622

CRUD ............................................................................. 122

CSV ....................................................................... 205, 265

CSV-Storage-Engine ............................................... 270

CURRENT_TIMESTAMP ........................................ 625

Cursor ................................................................. 583, 585

öffnen ...................................................................... 585

verschachtelter................................................... 604

D

Daemon ................................................................ 39, 221

Data Definition Language � DDL

Data Dictionary .......................................................... 35

DATA DIRECTORY .................................................. 450

DATA_TYPE .............................................................. 560

Database Collation ....................................... 619, 630

DATABASE_COLLATION ............................. 562, 621

Dateiberechtigung.......................................... 219, 223

Daten............................................................................... 23

Repräsentation....................................................... 35

Datenabstraktion ...................................................... 34

Datenbank ............................................................. 23, 24

aktivieren................................................................ 231

deduktive ................................................................. 28

Index........................................................................ 130

mobile ....................................................................... 28

objektorientierte.................................................... 27

XML-Datenbank .................................................... 27

Datenbankabstraktionsschicht......................... 641

Datenbankapplikation.......................................... 148

Datenbankdesign............................................... 36, 67

Datenbankebene ..................................................... 473

Datenbankentwurf

Anforderungsanalyse ......................................... 50

konzeptioneller ...................................................... 51

logischer.................................................................... 52

physischer ................................................................ 52

Datenbankindex ............................................... 33, 130

Page 63: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

774

Datenbankmanagementsystem ................ 24, 229

relationales ............................................................. 26

Datenbankmodell

hierarchisches ........................................................ 25

Netzwerkdatenbankmodell .............................. 25

objektorientiertes ................................................. 27

objektrelationales ................................................ 27

relationales ............................................... 25, 55, 147

Datenbankmodellierung........................................ 49

Datenbankserver ....................................................... 34

Datenbankverwaltung .......................................... 149

Datendurchsatz........................................................ 312

Datenintegrität .......................................................... 36

Datenkommunikation ......................................... 530

Datensatz ................................................................ 25, 56

Datensicherheit ......................................................... 37

Datenstruktur ............................................................. 26

Datentypen ................................................................ 536

Datenverzeichnis .................................................... 224

Datum ......................................................................... 697

aktuelles .................................................................. 712

Datumsangabe

erzeugen .................................................................. 711

Formatierung ....................................................... 714

umwandeln ............................................................ 711

Datumsarithmetik .................................................. 710

Dauerhaftigkeit ......................................................... 172

Db.................................................................................. 630

DBD .............................................................................. 664

mysql ...................................................................... 664

DBI ................................................................................ 664

DBMS � Datenbankmanagementsystem

DDL.......................................................................... 52, 558

Deadlock ..................................................................... 184

DEALLOCATE PREPARE ................................. 558, 755

Debian.......................................................................... 212

Debugging ........................................................ 549, 580

DECLARE ............................................................ 565, 736

DECLARE CONDITION ........................................... 738

DECLARE CURSOR .......................................... 584, 736

DECLARE HANDLER ....................................... 591, 737

default-character-set.............................................. 272

Default-Wert............................................................. 568

DEFINER .................................................... 483, 562, 621

Definer .............................................. 552, 614, 619, 630

Deklarieren ................................................................ 565

DELETE ....................................................... 234, 477, 703

Delimiter..................................................................... 533

DESCRIBE .................................................................... 726

DETERMINISTIC .............................................. 542, 554

Deterministisch ....................................................... 542

DHE-RSA-AES256-SHA ........................................... 519

Dirty Read ................................................................... 179

Disjunktion.................................................................. 63

Distance() ................................................................... 395

Distributed Transaction Processing:

The XA Specification.......................................... 183

DNS ................................................................................. 29

DO ................................................................................. 627

Dokumentation ....................................................... 536

Downloadlink .............................................................. 91

DROP ................................................................... 479, 558

DROP DATABASE ........................................... 699, 747

DROP EVENT .................................................... 628, 733

DROP FUNCTION .................................................... 730

DROP INDEX ............................................................. 705

DROP PARTITION.................................................... 459

DROP PREPARE ......................................................... 755

DROP PROCEDURE ........................................ 544, 728

DROP SERVER ........................................................... 764

DROP TABLE .............................................................. 701

DROP TRIGGER ................................................ 618, 731

DROP USER ................................................ 235, 471, 752

DROP VIEW ................................................................. 725

DTD_IDENTIFIER ...................................................... 561

durability..................................................................... 172

Durchschnitt............................................................... 63

-DWITH_PARTITION_STORAGE_ENGINE=1... 445

E

Ebene

Globale ................................................................... 473

Editor

nano......................................................................... 237

Eigenschaft

multidimensionale ............................................ 394

Einbenutzerbetrieb

virtueller.................................................................. 172

Einfügeanomalie ........................................................ 81

Eingabeparameter .................................................. 546

Einschränkungen .................................................... 465

Eintrittspunkt............................................................ 553

Einwegfunktion ....................................................... 233

ELSEIF ............................................................................ 575

ELT .................................................................................. 716

Ends ............................................................................. 630

End-User License Agreement � EULA

ENGINE=InnoDB ..................................................... 189

Entität .............................................................. 67, 68, 69

existenzabhängige ............................................... 75

Entity-Relationship-Modell � ER-Modell

Page 64: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

775

enumeration .............................................................. 133

ENVELOPE ......................................................... 398, 743

Ergebnismenge ....................................................... 550

Ende......................................................................... 589

ER-Modell ............................................................... 51, 68

error code ................................................................... 139

error.log � Error-Log

error_log ..................................................................... 242

Error-Log ................................................... 282, 285, 292

Erzeugen von Cursors ........................................... 584

Escapen ........................................................................ 522

Escape-Sequenz....................................................... 769

Escape-Sequenz � Maskierungszeichen

Escape-Zeichen ......................................................... 523

EULA ............................................................................... 95

EVENT.................................................................. 481, 632

Event............................................................ 531, 538, 622

bearbeiten............................................................. 628

EVENT_MANIPULATION ..................................... 620

EVENT_OBJECT _TABLE ....................................... 620

EVENT_OBJECT_CATALOG ................................. 620

EVENT_OBJECT_SCHEMA ................................... 620

event_scheduler ...................................................... 623

Events........................................................................... 619

Event-Scheduler....................................................... 623

EVERY .......................................................................... 626

EXECUTE ......................... 243, 482, 538, 558, 726, 755

Execute at .................................................................. 630

Execution-Engine............................................ 155, 169

Exit-Handler .................................................... 590, 596

EXPLAIN ............................................................. 410, 558

EXPLAIN PARTITIONS................................... 461, 747

Export.......................................................................... 270

Linux-Befehl .......................................................... 227

EXPORT_SET.............................................................. 716

EXTENDED STATUS ................................................ 748

EXTERNAL_LANGUAGE ........................................ 561

EXTERNAL_NAME ................................................... 561

F

Faktor Mensch .......................................................... 510

Fallunterscheidung ............................... 571, 572, 576

false ............................................................................... 572

FEDERATED............................................................... 204

Fehler........................................................................... 590

Fehlermeldung ......................................................... 591

Fehlernummer ...................................... 590, 592, 767

Fernwartungssoftware .......................................... 516

FETCH .......................................................................... 586

FETCH INTO ............................................................... 737

Fetchen

mehrfaches ........................................................... 588

FIELD ............................................................................. 716

FILE............................................................................... 489

Privileg..................................................................... 271

FIND_IN_SET ............................................................. 716

Firewall ................................................................ 322, 515

FIRST............................................................................ 204

FLOOR ................................................................. 398, 542

FLUSH .................................................................. 257, 558

FLUSH HOSTS ........................................................... 747

FLUSH LOGS .............................................................. 289

FLUSH PRIVILEGES ........................................ 499, 754

FLUSH QUERY CACHE ........................................... 762

FLUSH TABLES WITH READ LOCK ..................... 371

flush-hosts ......................................................... 257, 258

flush-logs ............................................................ 257, 258

flush-privileges ......................................................... 257

flush-status................................................................. 257

flush-tables ................................................................. 257

flush-threads.............................................................. 257

FORMAT ....................................................................... 716

Format

dynamisches ........................................................ 198

statisches ............................................................... 198

Forum ............................................................................. 33

Forward Engineering ..................................... 80, 305

Free Software Foundation � FSF

Fremdschlüsselbeziehung .................................. 266

frm-Datei ..................................................................... 191

FROM_BASE64 .......................................................... 717

FSF ................................................................................... 45

ft_boolean_syntax ................................................ 407

ft_max_word_len .................................................. 407

ft_min_word_len................................................... 407

ft_query_expansion_limit ...................... 407, 409

ft_stopword_file..................................................... 406

Full-Table-Scan................................................ 354, 379

FULLTEXT ................................................................... 401

FUNCTION................................................................... 552

Fünf-Schichten-Modell .......................................... 147

Funktion

statistische ............................................................... 32

Funktionale Abhängigkeit..................................... 59

Funktionalität ............................................................ 68

G

Geoinformationssystem � GIS

Geo-Koordinaten ...................................................... 34

Geometrieobjekt erzeugen ................................. 394

Page 65: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

776

GEOMETRY................................................................. 392

GEOMETRYCOLLECTION ...................................... 392

GeomFromText........................................................ 743

Geplanter Task.......................................................... 622

Gespeicherte Funktionen .................... 531, 551, 552

Gespeicherte Programme ......... 282, 399, 529, 531

Gespeicherte Prozeduren ............................ 531, 539

bearbeiten.............................................................. 544

erzeugen ................................................................ 540

löschen .................................................................... 544

GIS.................................................................................. 392

GLOBAL .............................................................. 245, 246

Globale Ebene ........................................................... 473

Globale Transaktions-ID....................................... 363

globale Transaktions-ID � GTID

GNU General Public License � GPL

GNU/Linux......................................................... 39, 100

GPL ........................................................................... 45, 95

GRANT................................................ 234, 471, 491, 752

GRANT OPTION........................................................ 487

Groß- und Kleinschreibung ............................... 402

Grundinstallation ..................................................... 93

GTID .............................................................................. 363

Gültigkeitsbereich ................................................. 569

einer Variablen ................................................... 569

eines Handlers .................................................... 603

Gültigkeitsbereich � Scope

H

Handler....................................................................... 590

Gültigkeitsbereich ............................................. 603

Hardwareanforderungen ....................................... 92

HASH ................................................................... 237, 446

Hashausdruck ........................................................... 453

Hashfunktion............................................................ 232

Hashindex .................................................................. 382

Hashing ....................................................................... 453

lineares ................................................................... 455

HASH-Partitionierung........................................... 453

Hashtabelle ................................................................ 382

Hauptverzeichnis ................................................... 284

have_query_cache ................................................... 161

HELP............................................................................. 766

HEX................................................................................. 717

Hintergrundprozess

Daemon .................................................................. 102

Hochverfügbarkeit .................................................. 40

Homeverzeichnis .................................................... 237

Horizontale Skalierung ......................................... 677

Host............................................................................... 258

Hostname ................................................................... 231

Hot Copy � Online-Backup

I

ib_logfile0 .................................................................. 194

ib_logfile1 .................................................................. 194

ibdata1.......................................................................... 193

IDEF1X ............................................................................ 73

Identifier

vollständig qualifizierter ................................. 112

Identität

Benutzeridentifizierung.................................... 231

IF-THEN-ELSE ............................................................. 572

IF-THEN-ELSEIF-ELSE ..................................... 575, 734

Import................................................................. 264, 757

komprimierter ..................................................... 758

INDEX.................................................................. 130, 479

Index ............................................................................... 33

adaptiver Hashindex ........................................ 192

B-Baum ................................................... 191, 197, 383

clustered......................................................... 191, 387

gruppierter ............................................................ 387

Hashindex .................................................... 192, 203

nicht gruppierter ................................................ 388

non-clustered .............................................. 198, 388

Primärindex ........................................................ 380

räumlicher.................................................... 393, 394

R-Baum ................................................. 197, 389, 394

Sekundärindex ........................................... 381, 388

Spatial-Index........................................................ 394

INDEX DIRECTORY ................................................ 450

Indexstruktur ........................................................... 394

Information Hiding ............................................... 529

INFORMATION_SCHEMA ......... 252, 266, 298, 559

INFORMATION_SCHEMA.PARTITIONS ......... 464

Informationssystem................................................. 33

init.d ............................................................................. 226

Initialized .................................................................... 631

Inkonsistenz......................................................... 28, 36

InnoDB ........................................................ 173, 191, 325

reparieren .............................................................. 287

innodb_buffer_pool_size........... 192, 193, 325, 331

innodb_file_format ............................................... 194

innodb_file_per_table .................................. 192, 193

innodb_flush_log_at_trx_commit ................. 332

innodb_force_recovery ....................................... 296

innodb_log_file_size.............................................. 193

INOUT .......................................................................... 622

INOUT-Parameter ................................................... 549

IN-Parameter ............................................................ 546

Page 66: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

777

INSERT......................................................... 234, 477, 717

INSERT DELAYED ............................................ 201, 539

INSERT INTO ............................................................. 703

INSTALL PLUGIN...................................................... 763

Instanz .................................................................. 62, 236

Integrität

Datenintegrität ..................................................... 36

referentielle ............................................................ 125

INTERVAL................................................................... 626

Interval Field ............................................................ 630

Interval Value........................................................... 630

INVOKER .................................................................... 483

IP-Adresse................................................................... 231

IS_DETERMINISTIC ................................................. 561

ISAM............................................................................. 386

Isolation ............................................................... 172, 177

Isolationslevel................................................... 177, 178

ITERATE .............................................................. 579, 735

Iteratives Vorgehensmodell ................................. 53

J

Java ............................................................................... 650

Java Database Connectivity � JDBC

JavaScript .................................................................... 671

JDBC ............................................................................. 650

Join � Verbund

Join-Reihenfolge ...................................................... 168

K

Kapselung ................................................ 485, 507, 529

Kapselungsschicht ................................................. 507

Kardinalität

Relation .................................................................... 72

Kartografiesystem .................................................... 34

Katalog ......................................................................... 149

KEY ............................................................................... 446

key_buffer .................................................................. 338

key_len ........................................................................ 412

Key-Cache ................................................................... 333

KEY-Partitionierung ............................................... 455

KILL ............................................................................... 263

KILL CONNECTION................................................. 749

KILL QUERY ............................................................... 749

Kindknoten ................................................................ 383

Knoten ......................................................................... 361

Kommandozeile ............................................. 102, 107

Kommandozeilenparameter

dynamischer ......................................................... 243

statischer................................................................ 243

Kommentar ........................................ 52, 237, 535, 543

einzeiliger .............................................................. 536

mehrzeiliger.......................................................... 536

Kompatibilität.......................................................... 566

Kompilieren ........................................................ 92, 211

Kompilierung ............................................................ 212

Komprimierte Tabelle........................................... 194

Konfigurationsdatei ...................... 211, 224, 235, 321

Beispielkonfiguration ........................................ 321

globale .................................................................... 236

sichern ..................................................................... 281

Konfigurationsdatei � my.cnf

Konkurrierende Schreibvorgänge ...................... 37

Konnektor ................................................. 153, 641, 643

nativer .................................................................... 643

Konsistenz ......................................... 36, 172, 590, 613

Konsole ....................................................................... 243

Kontext ....................................................................... 245

Kontrollfluss .............................................................. 553

Konzeptionelles Schema ....................................... 50

Korrektheit ............................................................... 590

Korrelierte Subquery ............................................. 422

Korruption................................................................. 292

Krähenfuß-Notation................................................. 73

Kreuzprodukt ............................................................. 65

Künstlicher Schlüssel ............................................ 418

Kurzschreibweise .................................................... 242

L

LANGUAGE ................................................................ 542

LANGUAGE SQL ....................................................... 554

Larsson, Allan .............................................................. 41

LAST ............................................................................. 204

LAST_ALTERED ........................................................ 562

Lastverteilung ........................................................... 361

Latenz............................................................................ 311

Laufzeit........................................................................ 243

LCASE ............................................................................ 721

LEAVE .................................................................. 579, 734

LEFT................................................................................ 717

LENGTH........................................................................ 717

LIKE ............................................................ 400, 430, 717

LINE............................................................................... 392

Lineare KEY-Partitionierung .............................. 456

Linearer Zweierpotenz-Algorithmus .............. 455

Lineares Hashing..................................................... 455

LINEARRING .............................................................. 392

LINESTRING ...................................................... 392, 393

Linux-User ................................................................. 285

LIST................................................................................ 446

Page 67: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

778

LIST COLUMNS ......................................................... 452

LIST-Paritionierung ............................................... 450

Lizenz

Open-Source-Lizenz ............................................. 44

Lizenzmodell............................................................... 38

duales ........................................................................ 46

Lizenznehmer ............................................................. 44

LOAD

Systemwerte ......................................................... 273

LOAD DATA.............................................. 264, 539, 759

LOAD TABLE .............................................................. 539

LOAD_FILE ................................................................. 718

local .............................................................................. 269

LOCATE ........................................................................ 718

Lochkarte ...................................................................... 24

LOCK ............................................................................. 558

Lock ............................................................................... 184

LOCK TABLES.......................... 185, 186, 479, 539, 724

Lock-Management .................................................. 184

Locks ............................................................................. 184

lock-tables ................................................................. 280

log_bin........................................................................ 370

log_bin_basename ................................................. 242

log_bin_trust_function_creators ........... 538, 555

Logarithmen............................................................. 707

Logging

binäres .................................................................... 538

logisches ................................................................ 364

Logik

ternäre...................................................................... 116

Login ............................................................................ 230

Logischer Operator ................................................. 573

Log-Tabelle ................................................................. 615

Lokalität ...................................................................... 381

LOOP .................................................................... 579, 735

Löschanomalie ........................................................... 81

Lost Update ................................................................. 171

LOWER .......................................................................... 721

LPAD ............................................................................. 718

LTRIM ........................................................................... 718

M

make .............................................................................. 217

install ...................................................................... 249

MAKE_SET .................................................................. 718

Maskieren ................................................................... 522

von Benutzereingaben ..................................... 523

Maskierungszeichen .............................................. 239

Master-Master-Replikation � Replikation

Master-Slave-Replikation � Replikation

max_allowed_packet ................................... 242, 267

max_binlog_size..................................................... 289

max_connect_errors............................................. 258

max_connections................................................... 329

MAX_CONNECTIONS_PER_HOUR .................. 492

MAX_QUERIES_PER_HOUR ............................... 492

max_sp_recursion_depth.................................. 608

MAX_UPDATES_PER_HOUR.............................. 492

MAX_USER_CONNECTIONS............................... 492

MAXVALUE................................................................ 448

MBRContains ................................................... 398, 743

md5-Hash.................................................................... 514

Mehrbenutzersystem.............................................. 36

Mehrfaches Fetchen .............................................. 588

Mehrfachzuweisung .............................................. 567

Memcached ............................................................... 679

memcached .............................................................. 206

MEMORY .................................................................... 202

Memory-Tabelle ..................................................... 609

Mengentheorie ........................................................... 55

MERGE ......................................................................... 203

Metadaten........................................................... 25, 298

Minimale Systemanforderungen....................... 92

Mixed Format........................................................... 364

Modellentwurf ........................................................... 50

MODIFIES SQL DATA ..................................... 542, 554

mSQL ............................................................................... 41

Multidimensionale Eigenschaft ....................... 394

MULTILINESTRING ................................................. 392

MULTIPOINT ............................................................. 392

Multipoint.................................................................. 397

MULTIPOLYGON ..................................................... 392

Multiversion Concurrency Control.................. 191

Munin .......................................................................... 273

Mutex .......................................................................... 342

my.cnf........................................ 224, 235, 236, 237, 321

Block ........................................................................ 238

Optionen ................................................................ 239

my.cnf � Konfigurationsdatei

MYD-Datei ................................................................. 199

MYI-Datei ................................................................... 199

MyISAM ............................................................. 197, 386

innodb_buffer_pool_size................................ 325

räumlicher Index ................................................ 393

skip-external-locking ........................................ 323

myisam_sort_buffer_size ................................... 325

myisamcheck............................................................ 295

myisamchk ...................................................... 200, 756

myisamchk (Komprimierung) .......................... 763

myisampack (Komprimierung) ........................ 763

mysql ............................................................................ 255

Page 68: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

779

MySQL AB ........................................................ 38, 42, 43

MySQL Administrator ................................. 255, 308

MySQL Cluster ............................................................ 46

MySQL Community Server ........................... 38, 211

MySQL Enterprise Edition ..................................... 46

MySQL Performance Tuning Script ................. 326

MySQL Proxy ............................................................ 365

MySQL Query Browser .......................................... 255

MySQL Stored Program Language .......... 530, 532

MySQL Workbench ....... 68, 255, 302, 373, 532, 534

mysql.db .................................................................... 496

mysql_install_db.................................................... 220

mysql_secure_installation.................................. 222

mysql_upgrade ....................................................... 250

mysqladmin ..................................................... 255, 256

mysqlbinlog...................................................... 289, 758

mysqlcheck ....................................................... 255, 294

mysqld ...................................................... 236, 240, 242

MySQL-Daemon....................................................... 102

MySQLdb ................................................................... 669

mysqldump ..................... 255, 275, 278, 371, 537, 757

mysqlfailover ............................................................ 373

mysqlhotcopy.................................................. 285, 758

mysqli .......................................................................... 655

mysqlimport .................................................... 255, 267

MySQL-Konsole........................................................ 533

MySQL-Python ........................................................ 669

mysqlreplicate .......................................................... 373

mysqlrpladmin ........................................................ 373

mysqlrplcheck .......................................................... 373

mysqlrplshow ........................................................... 373

mysqlslap .................................................. 255, 297, 761

MySQLStartupItem.pkg ....................................... 106

MySQL-Variable

benutzerdefinierte............................................. 566

mytop.................................................................. 301, 761

N

Nagios .......................................................................... 261

Name ........................................................................... 630

Namensschema ...................................................... 566

Natürlichsprachliche Suche ............................... 402

Nebenläufigkeit ............................................... 170, 611

.NET Framework............................................... 92, 659

Netzwerk

absichern................................................................. 515

NEW .............................................................................. 616

Newline........................................................................ 265

NO SQL ................................................................ 542, 554

Node.js ......................................................................... 671

node-mysql ................................................................ 671

Non_unique .............................................................. 414

Non-clustered Index.............................................. 388

Non-repeatable Read ............................................. 180

Normalform ................................................................. 81

dritte .......................................................................... 86

erste ........................................................................... 82

weitere ...................................................................... 88

zweite ................................................................. 84, 86

Normalform:Adritte ................................................ 82

Normalform:Bdritte ......................................... 84, 86

Normalform:Cdritte ................................................ 86

Normalform:Ddritte................................................ 88

NoSQL .......................................................................... 675

NOT ................................................................................ 573

NOT DETERMINISTIC............................................. 542

NOT FOUND .............................................................. 594

NOT LIKE...................................................................... 717

NOT NULL.................................................................... 116

Not Only SQL ............................................................ 675

NOT REGEXP .............................................................. 719

NOT-Verknüpfung.................................................. 705

NOW() .......................................................................... 364

NUMERIC_PRECISION............................................ 561

NUMERIC_SCALE ..................................................... 561

Numerische Datentypen

(Ganzzahlen) .............................................. 696, 698

Numerische Datentypen (reelle Zahlen) ...... 696

Nutzungsrechte ......................................................... 44

O

Object Relational Mapping ................................. 641

Objektebene .............................................................. 474

OCTET_LENGTH ....................................................... 717

ODBC ........................................................................... 646

ODBC-Konnektor ................................................... 646

OFF ................................................................................ 247

Offline-Backup ......................................................... 276

OLAP................................................................................ 31

OLD ............................................................................... 616

OLTP ................................................................................ 31

ON ................................................................................. 247

ON COMPLETION PRESERVE .............................. 628

ON DELETE CASCADE ............................................. 127

ON SCHEDULE .......................................................... 628

Online Analytical Processing � OLAP

Online Transaction Processing � OLTP

Online-Backup.......................................................... 276

OPEN ............................................................................ 585

OPEN CURSOR ........................................................... 737

Page 69: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

780

Open Database Connectivity � ODBC

Open Geospatial Consortium ............................ 392

Open Group ............................................................... 183

Open Source ........................................................ 44, 311

Open Source Initiative ............................................ 45

OpenGIS Simple Features Specification

for SQL..................................................................... 392

Operator

logischer ................................................................. 573

Operatorgraph.......................................................... 149

Optimierer ................................................ 149, 155, 164

Optimierung .............................................................. 40

Kompilierung ....................................................... 212

OPTIMIZE .................................................................... 756

OPTIMIZE PARTITION........................................... 460

OPTIMIZE TABLE............................................ 199, 294

OPTIMIZE_TABLE .................................................... 477

optimizer_prune_level ......................................... 165

optimizer_search_depth...................................... 165

Optionen

Wert.......................................................................... 243

Zuweisung ............................................................. 243

Optionsdatei � Konfigurationsdatei ............. 235

Optionsname ............................................................ 239

OR .................................................................................. 573

Oracle ...................................................................... 38, 43

Originator .................................................................. 630

OR-Verknüpfung .................................................... 705

OS X 10.2.x ................................................................. 105

OUT ............................................................................... 622

OUTFILE...................................................................... 270

OUT-Parameter ........................................................ 548

P

PACK_KEYS ................................................................ 198

Paging .......................................................................... 325

Paketgröße ................................................................. 267

Paketmanager.......................................................... 249

apt............................................................................. 213

Parameter ......................................................... 239, 546

PARAMETER_STYLE................................................ 561

Parametrisierte Anweisung � Prepared

Statement

Parser............................................................................. 155

Partition

hinzufügen ............................................................ 458

partition ...................................................................... 445

PARTITION BY RANGE() ........................................ 447

Partition Lock Pruning.......................................... 461

Partition Pruning .................................................... 461

Partition Selection.................................................. 461

Partitionieren ........................................................... 443

zusammengesetztes.......................................... 456

Partitionierung

basierend auf mehreren Spalten.................. 452

horizontale ........................................................... 443

vertikale ................................................................. 444

Partitionierungsschlüssel ................................... 446

Partitionsfunktion ................................................. 445

Partitionsschlüssel ................................................. 445

Partitionsunterstützung...................................... 445

PASSWORD ..................................... 232, 455, 497, 748

Passwort

neu setzen ............................................................. 259

root ................................................................. 223, 258

Sicherheit ............................................................... 223

Passwort-Hashing.................................................... 514

PATH ................................................................... 107, 226

PDO ............................................................................... 655

Percona ........................................................................ 321

Percona Toolkit................................................ 318, 414

Percona XtraBackup .............................................. 286

Performance Schema

Aggregattabelle .................................................. 356

Einstellungen ....................................................... 344

history ..................................................................... 342

Messinstrument .................................................. 343

performance_schema (Datenbank)............ 339

PERFORMANCE_SCHEMA (Engine) ............ 339

performance_timers .......................................... 357

setup_actors......................................................... 344

setup_timers ......................................................... 357

Statusvariablen.................................................... 351

summary ............................................................... 356

Timer ....................................................................... 345

TRUNCATE ............................................................ 359

Performane Schema

Digest ...................................................................... 359

Normalisierung ................................................... 359

Statistiken ............................................................. 358

Zugriffsstatistiken.............................................. 358

Peripherie-Speicherverwaltung ......................... 152

Perl ....................................................................... 285, 664

Perl's Database Interface � DBI

perl-DBD-MySQL .................................................... 664

Pfad � Umgebungsvariable

Phantom-Read .......................................................... 181

PHP ............................................................................... 655

PHP Data Objects � PDO

PING .................................................................... 261, 748

Pipe ............................................................................... 102

Page 70: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

781

Plugin ................................................................... 251, 445

Plugin-API.................................................................... 251

Plugin-Status ............................................................. 252

POINT ......................................................... 392, 393, 742

Point-in-Time Recovery....................................... 290

POLYGON.................................................................... 392

Port............................................................. 239, 240, 322

Portabilität ................................................................. 592

POSITION .................................................................... 718

POSIX-Thread.............................................................. 92

possible_keys ............................................................. 411

POW ............................................................................. 398

PREPARE............................................................. 558, 754

Prepared Statement ............................. 524, 558, 644

Primärindex � Index

PRIMARY KEY............................................................ 417

Privater Schlüssel ..................................................... 517

Privilegientabelle .................................................... 223

priv-Tabelle ............................................................... 497

proc ............................................................................... 537

PROCESS..................................................................... 490

PROCESSLIST .................................................... 263, 748

procs_priv ................................................................. 497

Profildatei................................................................... 227

Profildatei � bashrc

Programmiersprache.............................................. 40

prozedurale ........................................................... 532

Projektion .................................................................... 60

Prozedurkopf ............................................................ 541

Prozess � Daemon

Prozessliste ................................................................ 214

pt .................................................................................... 318

pt-visual-explain ..................................................... 415

Python ........................................................................ 669

Q

QCache_free_blocks............................................... 163

QCache_free_memory.......................................... 163

Qcache_hits ............................................................... 163

QCache_inserts ........................................................ 163

Qcache_lowmem_prunes.................................... 163

Qcache_not_cached ............................................... 163

Qcache_queries_in_cache................................... 163

QCache_total_blocks ............................................. 163

Quellcode.............................................. 45, 91, 212, 229

Quelldistribution .................................................... 214

query_cache_size ............................................ 161, 325

query_cache_type.................................. 160, 161, 162

query_cache_wlock_invalidate ........................ 162

Query-Cache ...................................... 155, 157, 158, 335

QUOTE .......................................................................... 719

R

RANGE ......................................................................... 446

RANGE COLUMNS................................................... 452

RANGE-Partitionierung........................................ 447

Raumbezogene Erweiterung .............................. 392

Raymond, Eric ............................................................ 45

RDBMS........................................................................... 26

READ.............................................................................. 185

READ COMMITTED......................................... 178, 180

READ UNCOMMITTED .................................. 178, 179

read_buffer_size ..................................................... 324

read_rnd_buffer_size............................................ 325

READS SQL DATA ............................................ 542, 554

REBUILD PARTITION ............................................. 461

Rechte ................................................................. 467, 538

Rechtemanagement .............................................. 467

Recovery ....................................................................... 38

Redo.............................................................................. 296

Redundanz............................................................ 28, 36

Referentielle Integrität ......................... 125, 126, 191

REFRESH ..................................................................... 748

REGEXP.............................................................. 400, 719

Regulärer Ausdruck .............................................. 400

Rekursion .................................................................. 608

Rekursionstiefe ....................................................... 609

Rekursiv ...................................................................... 558

Relation ............................................................ 26, 55, 59

Relationale Algebra ................................... 55, 58, 149

Relationale-Algebra-Verwaltung ...................... 149

Relationenverwaltung ............................................ 151

Relationship ................................................................ 68

Relay-Log .................................................................... 364

RELEASE SAVEPOINT ..................................... 177, 723

RELOAD ............................................................. 257, 490

REORGANIZE PARTITION .................................... 459

REPAIR ................................................................. 293, 755

REPAIR PARTITION................................................ 460

REPAIR_TABLE ......................................................... 477

REPEAT ......................................................................... 719

REPEAT UNTIL ......................................... 579, 581, 735

REPEATABLE READ .......................................... 178, 181

REPLACE....................................................................... 719

REPLICATION CLIENT ........................................... 490

REPLICATION SLAVE..................................... 369, 491

Replikation ......................................................... 40, 361

asynchrone ........................................................... 363

Ausfallsicherheit .................................................. 361

Backup .................................................................... 291

Page 71: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

782

Replikation (Forts.)

Binär-Logging am Master-Knoten ............. 368

CHANGE MASTER ............................................... 372

Lastverteilung ...................................................... 361

logische ................................................................... 363

Master ..................................................................... 362

Master – Slave mit zwischen-

geschaltetem Slave ...................................... 366

Master-Master-.................................................... 367

Master-Slave- ....................................................... 365

mehrstufige Master-Slave-Replikation..... 366

semisynchrone..................................................... 363

Slave ......................................................................... 362

statementbasierte .............................................. 363

Topologie ...................................................... 362, 365

zeilenweise .................................................. 363, 364

REQUIRE ..................................................................... 492

RESET QUERY CACHE............................................. 762

RESIGNAL.......................................................... 602, 739

Restrukturierung....................................................... 29

RETURN ...................................................................... 730

RETURNS ..................................................................... 552

REVERSE ...................................................................... 719

Reverse Engineering ..................................... 80, 304

Dekompilieren ....................................................... 44

REVOKE ...................................................... 471, 493, 753

RIGHT ............................................................................ 717

RLIKE............................................................................. 719

ROLLBACK ................................................. 175, 558, 723

Rollback ....................................................................... 176

ROLLBACK TO SAVEPOINT .......................... 176, 723

ROUTINE_BODY....................................................... 561

ROUTINE_CATALOG ............................................. 560

ROUTINE_COMMENT............................................ 562

ROUTINE_DEFINITION.......................................... 561

ROUTINE_NAME..................................................... 560

ROUTINE_SCHEMA ............................................... 560

ROUTINE_TYPE ....................................................... 560

ROUTINES ................................................................... 559

ROUTINES-Tabelle................................................... 559

RPAD............................................................................. 718

RPM .............................................................................. 104

RTRIM........................................................................... 718

Ruby ............................................................................. 667

Ruby on Rails............................................................ 667

ruby-mysql................................................................ 667

Rückgabe..................................................................... 541

Rückgabeparameter ............................................... 548

Rückgabewert ........................................................... 552

atomarer ................................................................. 551

Rumpf .................................................................. 541, 553

S

Sakila .............................................................................. 39

SAVEPOINT ................................................................ 723

Savepoint .................................................................... 176

Schema

konzeptionelles ..................................................... 50

Schleife ................................................................ 571, 579

Schlüssel ................................................................. 58, 59

Fremdschlüssel ............................................... 68, 76

künstlicher .............................................................. 58

künstlicher Primärschlüssel ..................... 60, 114

Primärschlüssel .............................................. 59, 69

Schlüsselkandidat ................................................ 59

Superschlüssel ....................................................... 59

zusammengesetzter ............................................ 84

Schnellstart-Tutorial............................................... 211

Schnittstelle ...................................................... 40, 640

Schreibsperre

externe ..................................................................... 241

Schwachstellen ........................................................ 247

Scope ................................................................... 244, 569

SCP ................................................................................ 284

SECURITY_TYPE ........................................................ 561

Segmentverwaltung ............................................... 152

Sekundärindex � Index

SELECT .............................................. 120, 476, 558, 701

Select

ungebundenes ............................................. 551, 622

SELECT INTO ............................................ 558, 567, 736

SELECT INTO OUTFILE.......................................... 760

SELECT VERSION ............................................ 250, 727

select_type.................................................................. 412

Selection Push-Down ............................................. 167

SELECT-Statement

ungebundenes .................................................... 607

Selektion ...................................................................... 60

Semikolon .................................................................. 268

Semisynchrone Replikation ............................... 363

Seq_in_index............................................................ 414

SERIALIZABLE ............................................................ 182

Server .................................................................... 93, 242

Serverhardware ....................................................... 284

Server-ID ..................................................................... 370

Serverport ................................................................... 515

Servervariable

anzeigen................................................................. 262

SESSION.............................................................. 245, 246

Session......................................................................... 244

Sessionkontext ........................................................ 246

Sessionvariable � Sitzungsvariable

Page 72: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

783

SET ...................................................... 245, 566, 726, 736

SET AUTOCOMMIT ................................ 176, 558, 723

SET GLOBAL TRANSACTION ISOLATION

LEVEL ....................................................................... 178

SET SESSION TRANSACTION ISOLATION

LEVEL ....................................................................... 178

SET TRANSACTION ISOLATION LEVEL............ 724

Shell

History ................................................................... 230

Kommandozeileninterpreter ......................... 212

SHOW .................................................................. 558, 749

SHOW CHARACTER SET ....................................... 770

SHOW COLLATION ................................................ 770

SHOW CREATE .......................................................... 545

SHOW CREATE EVENT ................................... 631, 733

SHOW CREATE FUNCTION ................................. 730

SHOW CREATE PROCEDURE ...................... 562, 729

SHOW CREATE TRIGGER ...................................... 621

SHOW CREATE VIEW............................................. 480

SHOW DATABASES ............................... 110, 491, 699

SHOW ENGINES ....................................................... 763

SHOW ERRORS ........................................................ 766

SHOW EVENTS ................................................. 629, 733

SHOW FUNCTION STATUS ................ 559, 562, 730

SHOW GRANTS................................................ 495, 754

SHOW MASTER STATUS ............................... 371, 742

SHOW OPEN TABLES.............................................. 727

SHOW PLUGINS ....................................................... 762

SHOW PROCEDURE STATUS ............. 559, 562, 729

SHOW PROFILE......................................................... 761

SHOW SLAVE STATUS............................................ 742

SHOW STATUS ......................................................... 298

SHOW TABLES................................................. 608, 701

SHOW TRIGGERS ............................................. 618, 731

SHOW VARIABLES .......................................... 245, 726

SHOW VIEW .............................................................. 480

SHOW WARNINGS ......................................... 119, 766

SHUTDOWN .............................................................. 491

Sicherheit........................................................... 467, 529

Sicherheits- und Benutzerkonzept ................. 503

Sicherheitsschicht.................................................. 505

Sicherheitsupdate ................................................... 247

Sicherung.................................................................... 537

Sicht ............................................................ 508, 537, 632

aktualisierbare .......................................... 509, 635

eingeschränkte .................................................... 633

updatefähige ........................................................ 635

SIGNAL .............................................................. 600, 738

single-transaction .................................................. 280

Sitzungsvariable ............................................. 244, 245

Skalierung

horizontale ........................................................... 677

vertikale ................................................................. 677

skip_external_locking ........................................... 241

Skript

Absicherung........................................................... 221

Initialisierung ....................................................... 221

Startskript ............................................................. 225

Socket........................................................ 239, 240, 322

Software

Free Software ......................................................... 45

proprietäre .............................................................. 44

quelloffene .............................................................. 44

Solaris ............................................................................ 42

sort_buffer_size .................................... 247, 324, 336

Sort-Cache .................................................................. 336

SOUNDEX ................................................................... 720

SOUNDS LIKE ............................................................ 720

SOURCE .............................................................. 534, 760

Sourceforge ............................................................... 291

SPACE ........................................................................... 720

Spaltenebene ............................................................ 474

Spatial Extension .................................................... 392

SPECIFIC_NAME ..................................................... 560

Speichermedium

externes .................................................................. 284

Speicherort ................................................................ 449

Speicherschema......................................................... 26

Sperre ........................................................................... 184

Sperre � Lock

Sperren

von Zeilen .............................................................. 186

Spion ............................................................................ 230

Sprache........................................................................... 52

Sprechende Namen................................................... 51

Sprechende Variablennamen ............................ 566

SQL .................................................................................. 26

SQL SECURITY.................................................. 483, 543

SQL SECURITY DEFINER........................................ 543

SQL SECURITY INVOKER ...................................... 543

SQL_CACHE ............................................. 160, 761, 762

SQL_DATA_ACCESS ................................................ 561

SQL_MODE ............................................... 562, 619, 621

SQL_NO_CACHE............................................. 160, 762

SQL_PATH ................................................................... 561

SQL-Einschleusung................................................. 520

SQLEXCEPTION ........................................................ 593

SQL-Injection ............................................................ 520

SQL-States ......................................................... 592, 767

SQLWARNING........................................................... 595

SQRT ............................................................................. 398

Page 73: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

784

SSH ................................................................................ 516

SSL.................................................................................. 516

ssl-ca .............................................................................. 517

ssl-cert ........................................................................... 517

ssl-key............................................................................ 517

Stallman, Richard ...................................................... 45

Standardfunktionen ............................................. 707

Standardkonfiguration ......................................... 212

Standardwert............................................................ 568

START SLAVE ............................................................. 741

START TRANSACTION.................. 176, 558, 612, 722

Starten

automatisch ......................................................... 225

manuell................................................................... 225

Starts............................................................................ 630

Statement ............................................................ 111, 619

STATUS ............................................. 261, 630, 727, 748

Statusvariablen

accounts ................................................................. 353

View.......................................................................... 353

STOP SLAVE ............................................................... 742

Storage-Engine ......................................... 123, 155, 187

BLACKHOLE .......................................................... 252

Speichermanagement........................................ 40

Stored Functions .............................................. 531, 551

Stored Procedures .................................. 282, 531, 539

STRCMP ........................................................................ 721

String .......................................................................... 400

String-Datentypen ................................................. 697

SUBPARTITION BY KEY() ..................................... 456

Subquery.................................................................... 420

korrelierte .............................................................. 422

SUBSTR ....................................................................... 720

SUBSTRING ............................................................... 720

SUBSTRING_INDEX ............................................... 720

Suche

natürlichsprachliche ................................ 131, 402

Sun Microsystems .................................................... 42

SUPER ................................................ 245, 258, 489, 538

Surrogatschlüssel � Künstlicher Schlüssel

Swapping .................................................................... 325

Syntaxfehler .............................................................. 541

Syntax-Highlighting .............................................. 535

System R...................................................................... 147

System V ..................................................................... 226

Systemanforderungen

minimale .................................................................. 92

Systemdienst .................................................... 221, 225

Systemleiche .............................................................. 511

T

Tabelle ............................................................................ 55

komprimierte ....................................................... 194

partitionierte, erzeugen................................... 445

reparieren .............................................................. 293

sperren ..................................................................... 185

temporäre ............................................................ 607

virtuelle .................................................................. 632

Tabelle optimieren � OPTIMIZE TABLE

Tabellen-Cache ......................................................... 258

Tabellendump ................................................. 278, 279

Tabellenebene .......................................................... 474

Tabellenname............................................................. 56

Tabellenoptimierung ............................................. 257

Table ............................................................................. 619

table_open_cache................................................... 325

tables_priv ................................................................. 497

Tablespace.................................................................. 194

tail.................................................................................. 283

tar .......................................................................... 212, 284

Task

geplanter ............................................................... 622

TCP/IP ............................................................................ 93

TEMPORARY............................................................. 607

Terminal ..................................................................... 107

Terminalfenster........................................................ 215

Ternäre Logik ............................................................. 572

Text-Datentypen ..................................................... 697

Texteditor .................................................................. 534

Textsammlung ........................................................ 401

Thread................................................................. 262, 328

thread_cache_size .................................................. 325

Time zone.................................................................. 630

Timing ......................................................................... 619

TO_BASE64 ................................................................. 721

TO_DAYS(datum).................................................... 449

Transaktion ......................................... 37, 170, 171, 611

Transaktionsanweisung ....................................... 558

Transaktionsbefehl ................................................ 621

Transitive Abhängigkeit......................................... 86

Transparenz ............................................................... 617

Treiber ......................................................................... 641

TRIGGER............................................................. 482, 619

Trigger ................................................ 531, 538, 613, 619

TRIGGER_CATALOG.............................................. 620

TRIGGER_NAME ..................................................... 620

TRIGGER_SCHEMA................................................ 620

TRIM .............................................................................. 721

true................................................................................. 572

TrueWORM ................................................................. 277

Page 74: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

785

TRUNCATE................................................................. 703

TRUNCATE TABLE .................................................. 479

Trunkierung .............................................................. 431

Tuning.......................................................................... 312

Tupel ............................................................................... 57

Tupelverwaltung ...................................................... 151

tx_isolation (Variable) .......................................... 178

Type ............................................................................. 630

U

Überladen .................................................................. 570

Ubuntu Linux .......................................................... 100

UCASE............................................................................ 721

Umgebungsvariable ............................. 107, 226, 256

Pfadangaben ........................................................ 225

Pfadeinstellungen .............................................. 228

Umkreissuche .................................................. 392, 395

UML................................................................................. 73

Unbounded Select........................................... 551, 622

Undo ................................................................... 288, 296

Undo-Handler.......................................................... 590

Ungebundenes Select .................................... 551, 622

Ungebundenes SELECT-Statement ................. 607

UNHEX .......................................................................... 721

Unified Modeling Language � UML ................. 73

UNINSTALL PLUGIN ............................................... 763

Union ............................................................................. 63

UNIQUE-Schlüssel.................................................. 446

UNIREG .......................................................................... 41

UNIX_TIMESTAMP(datum)................................ 449

UNLOCK TABLES ............................ 186, 539, 558, 725

Unterpartition ......................................................... 456

UNTIL............................................................................ 581

UPDATE ..................................................... 234, 477, 703

Statement .............................................................. 259

Update.......................................................................... 247

UPGRADE.................................................................... 756

Upgrade .............................................................. 248, 251

UPPER............................................................................ 721

Uptime ......................................................................... 262

Urheberrecht............................................................... 44

USAGE ......................................................................... 490

USE ............................................................................... 699

user (Tabelle) ............................................................ 496

Usermanagement .......................................... 229, 235

V

V8-Engine ................................................................... 672

VALUES ......................................................................... 118

VALUES IN() ................................................................ 451

VALUES LESS THAN................................................ 447

Variable .............................................................. 269, 565

globale .................................................................... 244

Gültigkeitsbereich .............................................. 569

lokale ....................................................................... 244

Verbindung

aktive....................................................................... 244

verschlüsselte ........................................................ 516

Verbindung � Session

Verbindungsüberprüfung.................................. 469

Verbund ................................................................. 63, 64

Vereinigung................................................................. 63

Verifizierung .............................................................. 231

Vermittlungsschicht............................................. 646

Verschachtelte Anfrage � Subquery

Verschlüsseln ............................................................ 515

Verschlüsselungsalgorithmus............................ 518

Versionierung

Versionsnummer .................................................. 43

Vertikale Skalierung............................................... 677

Verwendung von Cursors.................................... 585

Verzahnungen von Operationen ..................... 170

View ............................................................ 508, 537, 632

Virtuelle Tabelle ...................................................... 632

Virtueller Einbenutzerbetrieb ............................ 172

Volltextindex.................................................... 131, 401

Volltextsuche ........................................ 401, 404, 739

Abfrageerweiterung ......................................... 408

boolesche Operatoren ..................................... 404

IN BOOLEAN MODE.......................................... 404

Länge der Wörter............................................... 407

MATCH() AGAINST()......................................... 402

natürlichsprachliche Abfrage ...................... 402

Probleme und Einschränkungen................. 409

Relevanzwert....................................................... 403

Stoppwörter......................................................... 406

Stoppwörter-Liste.............................................. 406

Vorgehensmodell

iteratives ................................................................... 53

W

wait_timeout ............................................................ 245

Waiting for next activation ................................. 631

Waiting for scheduler to stop ............................. 631

Waiting on empty queue ...................................... 631

Warm Copy ................................................................. 277

Warnung .................................................................... 590

Wartungsarbeiten.................................................... 531

Web 2.0 ........................................................................... 33

Page 75: Das umfassende Handbuch - Amazon S3€¦ · Stefan Pröll, Eva Zangerle, Wolfgang Gassler MySQL 5.6 Das umfassende Handbuch

Index

786

Web-Programmierung .......................................... 655

WEIGHT_STRING..................................................... 722

Well-Known Binary � WKB

Well-Known Text � WKT

WHILE.......................................................... 579, 582, 735

Widenius, Michael .................................................... 41

Wiederherstellung .................................................. 273

Wiederherstellungsmethode ............................. 281

Wiederkehrende Aufgaben ................................ 530

Wiederverwendung

von Code................................................................. 529

Wildcard ...................................................................... 120

Wildcard-Character................................................. 431

Winkelfunktionen.................................................. 706

WITH............................................................................ 492

WITH GRANT OPTION ........................................... 471

--with-partition ........................................................ 445

WKB............................................................................... 393

WKT............................................................................... 393

Workflow ..................................................................... 511

WRITE ........................................................................... 185

Wurzelknoten ........................................................... 383

X

X509 .............................................................................. 519

XA-Transaktionen ................................................... 183

XML ................................................................................. 27

XOR ............................................................................... 573

XOR-Verknüpfung ................................................. 706

Xtrabackup................................................................. 758

xtrabackup ................................................................. 287

Y

YEAR(datum)............................................................. 449

Z

Zahlensysteme ......................................................... 707

Zeichenkette ............................................................ 400

Zeiger .................................................................. 584, 585

Zeile sperren ............................................................. 186

Zeilenebene ...................................................... 474, 507

Zeit ................................................................................ 697

aktuelle .................................................................... 712

Zeitangabe

erzeugen.................................................................. 711

Formatierung........................................................ 714

umwandeln............................................................ 711

Zeitarithmetik .......................................................... 710

Zeiteinheiten ........................................................... 708

Zeitformate............................................................... 709

Zeitstempel........................................................ 537, 625

Zertifikat ...................................................................... 517

Zugriff

gekapselter........................................................... 504

Zugriffsberechtigungssystem........................... 469

Zugriffsphase ........................................................... 469

Zusammengesetztes Partitionieren................ 456

Zustand

konsistenter .......................................................... 287

Zuweisung.................................................................. 566

Zuweisungszeichen................................................ 242

Zwischentabelle .......................................................... 77