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