Vorwort zur 2. Auflage 13. Vorwort zur 1. Auflage 15. Inhalt der Buch-CD Einführung 21

Größe: px
Ab Seite anzeigen:

Download "Vorwort zur 2. Auflage 13. Vorwort zur 1. Auflage 15. Inhalt der Buch-CD Einführung 21"

Transkript

1

2 Auf einen Blick Vorwort zur 2. Auflage Vorwort zur 1. Auflage Inhalt der Buch-CD Einführung Entscheidungshilfen für den MySQL-Einsatz Installation Datenbankentwurf Datenbanken und Tabellen anlegen Mit Daten arbeiten Realisierung von Benutzerschnittstellen Administration Beispiel: In 12 Schritten zur MySQL-Anwendung Beispiel: PHP/MySQL-Anwendung in 6 Schritten Anwendungsentwicklung unter Windows Referenz A Glossar B Weiterführende Informationsquellen C Installationshinweise für phpmyadmin D Lizenztexte Index

3 Inhalt Vorwort zur 2. Auflage 13 Vorwort zur 1. Auflage 15 Inhalt der Buch-CD 17 1 Einführung Was ist MySQL? Die wichtigsten Eigenschaften von MySQL Bezugsquellen und Versionen Neuerungen in MySQL MySQL im Vergleich zu anderen Datenbanken Einstiegshilfen für MySQL Entscheidungshilfen für den MySQL-Einsatz Einsatzbereiche Überblick MySQL auf dem Desktop? E-Business Prozesse für eine erfolgreiche Umsetzung von E-Business-Projekten Schulungsbedarf Kompatibilität zu SQL-Standards MySQL-Lizenzierung Produktsupport Kostenkalkulation/Unternehmensentscheidung Inhalt 5

4 3 Installation Überblick MySQL-Server Installation Installation auf Unix/Linux-Systemen Installation auf Windows-Systemen Installation überprüfen Die Konfigurationsdatei my.cnf / my.ini Zeichensätze/Lokalisierung Version 4.0: Definition der Zeichensätze auf Tabellenebenen MySQL-Installation aktualisieren Mehrere MySQL-Server auf einem Rechner MySQL bei Internet Service Providern Angebote Funktionsumfang von MySQL feststellen Server-Sharing (Webspace) Vor- und Nachteile Eigener Webserver mit MySQL Kommandozeilenwerkzeuge von MySQL mysql die SQL-Shell mysqladmin mysqlshow Weitere Hilfsprogramme Grafische MySQL-Clients phpmyadmin (Browser) MySQL Control Center (Linux, Windows) EMS MySQL Manager (Linux, Windows) MySQL Studio (Windows, Mac OS X) MySQLManager (Windows) SQL-Win MySQLFront (Windows) KSql (Linux) Weitere grafische Clients Datenbankzugang über ODBC einrichten LAMP (Linux-Apache-MySQL-PHP) Leistungsfähigkeit von LAMP-Systemen Programmierschnittstellen C PHP Perl Java MySQL-Cluster Replikationssystem RAID Load Balancing Version : Embedded MySQL Inhalt

5 4 Datenbankentwurf Phasen der Datenbankentwicklung Datenbankentwurf Datenmodell ER-Modell Relationales Datenmodell Primärschlüssel Fremdschlüssel und referenzielle Integrität Optimierung des Datenmodells (Normalisierung) Implementierung und Nutzung: Speaking SQL Datenbanken und Tabellen anlegen Überblick Datentypen Zeichenketten-Datentypen Numerische Datentypen Datums- und Zeit-Datentypen Aufzählungen Datentyp-Mapping Datenbank anlegen und löschen Tabellen Tabellen anlegen Schlüsselfelder für Tabellen Indices für Tabellen Tabellentypen Der Tabellentyp InnoDB Autowert definieren, Tabellen kopieren Referenzielle Integrität, Fremdschlüssel (FOREIGN KEY) und Konsistenzbedingungen Ändern des Tabellenlayouts (ALTER TABLE) Tabellen umbenennen und löschen Version : Unicode Mit Daten arbeiten Benutzerwerkzeuge und -schnittstellen Daten einfügen, ändern und löschen Einfügen von Daten in Tabellen Daten aktualisieren Daten löschen Version 4.0: Daten aus mehreren Tabellen gleichzeitig löschen Daten aus anderen Datenbanken und Programmen übernehmen Inhalt 7

6 6.3 Befehle für die Datenausgabe Abfragen mit SELECT (Daten suchen) Vergleichsoperatoren (Filterbedingungen) Abfragen mit logischen Operatoren Mathematische Funktionen Datums- und Zeitfunktionen Zeichenketten Auswahlanweisungen Zählen Version 4.0: Tabellen vereinigen (UNION) Tabellen verknüpfen (JOIN) Ausgabe sortieren Version 4.0: Deutsche Sortierung Ausgabedatei über SELECT erzeugen Abfragen analysieren NULL-Marken Version : Unterabfragen (Sub-Selects) Unterabfragen, die eine Zeile zurückgeben Unterabfragen, die mehr als eine Zeile zurückgeben Unterabfragen in UPDATE-Befehlen Unterabfragen in DELETE-Befehlen Regeln für die Verwendung von Unterabfragen Unscharfe Suche Suche mit LIKE und IN Volltextsuche Soundex Reguläre Ausdrücke Version : Abfragen beschleunigen: Der Query Cache Transaktionen Benutzerdefinierte Funktionen zu MySQL hinzufügen Neue Funktionen für UDF-Schnittstelle erstellen Funktionen nativ hinzufügen Version : Geometrische Daten Realisierung von Benutzerschnittstellen Überblick Externe Aufbereitung von MySQL-Daten Delimited ASCII-Daten weiterverarbeiten Daten über ODBC-Schnittstelle weiterverarbeiten Formulare und Berichte mit Desktop-Programmen erstellen Formulare und Berichte mit StarOffice erstellen Formulare und Berichte mit MS Access erstellen Programmierung von Benutzerschnittstellen Überblick PHP Inhalt

7 7.4.3 Perl C/C Java XML Einführung XML-Dateien mit mysql und mysqldump erstellen XML mit PHP oder Perl erstellen XML-Dokumente in MySQL mit PHP speichern Administration Laufenden Betrieb überwachen Version 4.1: Warnungs- und Fehlermeldungen ausgeben Protokollierung von Servervorgängen Das Fehlerprotokoll (error log) Laufenden Betrieb protokollieren (Query-Protokoll und Änderungsprotokoll) Tabellenüberprüfung und -wartung Tabellenüberprüfung MyISAM-Tabellen reparieren Tabellen optimieren Sicherheit Passwortsystem Daten verschlüsselt speichern SSH-Verbindungen Version 4.0: SSL-verschlüsselte Verbindungen Backup und Datensicherung Grundsätzliche Strategien für die Datensicherung Backup mit mysqldump Backup durch Datenbankkopie Backup mit BACKUP TABLE Datensicherung mit SELECT INTO OUTFILE Programmierung von Hilfsprogrammen für das Backup Replikationsmechanismen von MySQL Uploads und Datensicherung bei Internet Service Providern Datenbanktests durchführen Tipps zur Optimierung von MySQL Optimierung von SQL-Befehlen Performancemessung in PHP-Anwendungen Inhalt 9

8 9 Beispiel: In 12 Schritten zur MySQL-Anwendung Ziel Planung und Definition der Anwendung Schritt 1: Anwendungsübersicht Schritt 2: Anwendungsfunktionen Datenbankentwurf Schritt 3: Entitätstypen und Beziehungen ermitteln Schritt 4: ER-Modell erstellen Schritt 5: Relationales Datenmodell erstellen Schritt 6: Datenmodell optimieren (Normalisierung) Benutzerschnittstellen Schritt 7: Softwarekomponenten definieren Schritt 8: Benutzerschnittstellen (Dialoge) entwerfen Implementierung Schritt 9: Datenbank und Tabellen anlegen Schritt 10: PHP-Funktionen definieren Schritt 11: Benutzerschnittstelle und Funktionen integrieren Schritt 12: Anwendung testen und weitergehende Fragen Beispiel: PHP/MySQL-Anwendung in 6 Schritten Schritt 1: PHP-Installation überprüfen Schritt 2: Das erste Bild Schritt 3: Grafikelemente hinzufügen Schritt 4: Schrift hinzufügen Schritt 5: Dynamischen Content aus Datenbank einfügen Schritt 6: Einbindung in HTML Anwendungsentwicklung unter Windows Einführung Die Zeos-Komponenten (Version 5.3) Installation der Zeos-Komponenten Zeos-Komponenten (Version 6.0.x) Programmierung mit den Zeos-Komponenten Einführungsbeispiele Fortgeschrittene Programmierung am Beispiel eines Windows-Clients für MySQL Inhalt

9 Vergleich von verschiedenen Lösungen für die Anwendungsentwicklung Referenz Datentypen SQL-Referenz (alphabetisch) Optionen für MySQL-Programme Konfigurationsdateien Programmvariablen MySQL-Server (mysqld) MySQL-Kommandozeilenwerkzeuge Fehlercodes und -meldungen ESCAPE-Zeichen C-API Zeos-Komponenten Perl-DBI A Glossar 647 B Weiterführende Informationsquellen 651 C Installationshinweise für phpmyadmin 653 D Lizenztexte 655 D.1 MySQL D.2 Berkeley DB Index 669 Inhalt 11

10 Vorwort zur 2. Auflage Nach nur zwölf Monaten war die erste Auflage dieses Buches vergriffen. Ich bedanke mich bei allen meinen Lesern. Dieser Erfolg hat dazu beigetragen, dass ich die zweite Auflage sehr zeitnah an die aktuelle Entwicklung von MySQL anpassen konnte. Alle Kapitel sind auf den neuesten Stand gebracht, und die Neuerungen, die MySQL in dieser Zeit durch die Version 4.0 bzw 4.1 erhalten hat, sind eingearbeitet. So werden jetzt z.b. auch Unterabfragen und die Verarbeitung geometrischer Daten behandelt. Aus den Erfahrungen der ersten Auflage konnten eine Reihe von Detailverbesserungen integriert werden. So wurde durch leichte Layoutveränderungen die Lesbarkeit der Buchs verbessert. Die Anzahl der Beispiele in den einzelnen Kapiteln wurde erweitert, um Ihnen die Theorie so anschaulich wie möglich zu machen. Auch hier habe ich darauf geachtet, dass die Beispiele sich an praktischen Fragestellungen orientieren. Mit der herausnehmbaren SQL-Referenzkarte erhalten Sie alle wichtigen Befehle auf einen Blick. Ziel war wieder, den Funktionsumfang und die Einsatzmöglichkeiten von MySQL umfassend und praxisnah darzustellen. Mein besonderer Dank gilt der engagierten Unterstützung von Barbara Lauer, die mit zielorientierten und konstruktiven Hinweisen und Kritiken zum Gelingen dieses Buchs einen wesentlichen Beitrag geleistet hat. Bonn, Mai 2003 Marcus Throll Vorwort zur 2. Auflage 13

11 Vorwort zur 1. Auflage»Wir sind äußerst zufrieden mit MySQL und MySQL wird auch in Zukunft die Datenbank unserer Wahl sein, obwohl uns Oracle 85% Rabatt auf ihre Produkte geben wollte«, schreibt ein Mitarbeiter von Handy.de auf der Homepage von MySQL. Dieser Satz umschreibt in aller Kürze das Erfolgsgeheimnis von MySQL. MySQL entspricht den Bedürfnissen vieler Anwender für die Lösung ihrer Aufgaben. Und da diejenigen, die MySQL in funktionierenden Projekten einsetzen, sich mit dem Produkt identifizieren, ist es zweitrangig, welche anderen Datenbanken mit vielleicht insgesamt längeren Featurelisten noch auf dem Markt sind. Und noch eine Lebensweisheit ist für den Erfolg von MySQL verantwortlich: Aus Gründen der Bequemlichkeit werden in der Regel einfache Dinge eine größere Verbreitung finden als die gleiche Lösung, die schwerer zu verstehen ist. MySQL ist gemessen an anderen Datenbanklösungen einfach aber effektiv und deshalb auch erfolgreich. Nachdem MySQL zunächst vor allem in Linux-Umgebungen eingesetzt wurde, nimmt seine Verbreitung auch unter Windows-Systemen immer mehr zu. Das Buch berücksichtigt beide Plattformen in gleicher Weise. Dieses Buch soll Ihnen einen Leitfaden und eine Referenz für die Arbeit mit MySQL geben. Im Aufbau entspricht es sowohl dem Ablauf von Projekten als auch den wachsenden Erfahrungen mit MySQL. Zu Beginn erhalten Sie einen Überblick über MySQL und auch Entscheidungshilfen für den Einsatz von MySQL für Ihre Projekte. Insbesondere wird gezeigt, wie Sie die Kosten für den Einsatz von MySQL vorab realistisch kalkulieren können. Der Grundlagenteil stellt Techniken der Datenbankplanung und die ersten Schritte mit MySQL wie Installation sowie das Anlegen von Datenbanken und Tabellen dar. Im anschließenden Funktionsteil werden alle für einen produktiven Einsatz von MySQL notwendigen Techniken beschrieben. Hierzu gehören das Einfügen, Ändern, Löschen und Abfragen von Daten, die Realisierung von Benutzerschnittstellen sowie Aufgaben der Administration. Im abschließenden Praxisteil werden anhand einer Internetanwendung die Informationen Vorwort zur 1. Auflage 15

12 zusammenfassend angewendet und dargestellt. Ein spezielles Kapitel zeigt, wie Sie Anwendungsprogramme mit MySQL unter Windows erstellen können. Abgerundet wird das Buch durch einen Referenzteil, in dem die Befehle, Hilfsprogramme und Schnittstellen kompakt dargestellt sind, sowie durch die Buch-CD, auf der Sie Programme und Listings für den sofortigen Gebrauch finden. Dieses Buch beinhaltet bereits die Neuerungen der Version 4, die in den jeweiligen Kapiteln besonders gekennzeichnet sind. Aktualisierungen, die nach Erscheinen des Buchs erfolgen, werden im Webangebot von Galileo-Press dargestellt, zu dem Sie mit Ihrer persönlichen Registriernummer am Ende dieses Buchs unter Zugang erhalten. Ich wünsche viel Vergnügen bei der Lektüre und einen erfolgreichen, entspannten Umgang mit MySQL. Bonn, April 2002 Marcus Throll 16 Vorwort zur 1. Auflage

13 1Einführung 1.1 Was ist MySQL? Die wichtigsten Eigenschaften von MySQL Bezugsquellen und Versionen Neuerungen in MySQL MySQL im Vergleich zu anderen Datenbanken Einstiegshilfen für MySQL... 35

14 1 Einführung MySQL hat in den vergangenen Jahren eine spürbare Verbreitung erlangt. In dieser Einführung erhalten Sie einen Überblick über die wichtigsten Eigenschaften von MySQL. 1.1 Was ist MySQL? Wenn Sie die Kataloge von Softwareversendern durchschauen, treffen Sie immer wieder auf die Softwarekategorie Datenbanken. In der Angebotspalette finden sich dann so bekannte und klangvolle Namen wie z.b. Oracle, Sybase, MS SQL Server oder MS Access. All diese Softwareprodukte haben die Aufgabe, Daten systematisch strukturiert zu speichern und Werkzeuge zur Manipulation dieser Daten zu bieten. Dabei kann von dieser Softwarekategorie nahezu jede digitale Prozesskette unterstützt werden, die auf Daten basiert, die häufig abgefragt, verändert oder ausgewertet werden. Datenbanken sind also in breiten Anwendungsgebieten einsetzbar. MySQL ist eine solche Datenbank. Datenbanken sind heute aus den wichtigsten Wirtschaftsprozessen nicht mehr wegzudenken. Kein Finanzdienstleistungsunternehmen, keine Logistik- oder Handelskette ist heute ohne Datenbanken in irgendeiner Form wettbewerbsfähig. Auch viele Internetangebote, wie z.b. Ebay oder Yahoo! sind ohne Datenbanken nicht funktionsfähig. Insofern stellen Datenbanken einen hohen wirtschaftlichen Wert dar. Den Stellenwert von Datenbanken mag man auch an der Marktkapitalisierung von Unternehmen messen, die solche Technologie herstellen. So wird z.b. Oracle zurzeit (Mai 2003) von der Börse mit rund 60 Mrd. EUR und damit immer noch 10 Mrd. EUR höher als die Deutsche Telekom AG bewertet. Als relationales Datenbanksystem erlaubt MySQL die Speicherung der Daten in einem verknüpften und damit schnellen und flexiblen System von einzelnen Tabellen. Die Tabellen wiederum sind so organisiert, dass sie einzelne Datensätze (Reihen) und Felder (Spalten) besitzen. Stellenwert von Datenbanken Relationale SQL-Datenbank Was ist MySQL? 23

15 Die Speicherung der Daten und die Möglichkeiten der Bearbeitung basieren dabei weitgehend auf dem SQL-Standard (»Structured Query Language«), der am häufigsten benutzten Sprache für relationale Datenbanksysteme. SQL verfügt über Befehle zur Abfrage von Daten zum Einfügen, Ändern und Löschen von Daten in Tabellen zum Erzeugen, Ersetzen, Ändern und Löschen von Objekten zur Zugangskontrolle zur Datenbank und ihrer Objekte zur Sicherstellung der Datenkonsistenz und -integrität SQL gehört in der Informationstechnologie, gemessen an den Innovationszyklen dieser Branche, zu den schon etwas älteren Standards. Dies zeigt aber auch, dass sich dieses Konzept erfolgreich behauptet hat. Die Ursprünge von SQL gründen auf Dr. E.F. Codd, der 1970»A Relational Model of Large Shared Data Banks«veröffentlichte. Später wurde dieses Modell von IBM als»structured English Query Language«(»SEQUEL«), aus dem später SQL wurde, initiiert folgte vom American National Standards Institute (ANSI) die erste De-facto-Standardisierung wurde von der International Organization for Standardization (ISO) die erste technische Standardisierung von SQL herausgegeben. Es folgte 1989 mit SQL-89 die zweite und 1992 mit SQL-92 die dritte offizielle Überarbeitung des Standards. Allerdings hat eigentlich jeder Hersteller eines relationalen Datenbanksystems zu diesem Standard eigene Ergänzungen implementiert, um fehlende Eigenschaften zu kompensieren. So kennt der SQL-Standard z.b. noch keinen Datentyp zur Speicherung großer Datenmengen. Entwickler und Herausgeber von MySQL ist die schwedische Firma MySQL AB, die unter im Internet erreichbar ist. Open Source- Software Als Open Source-Software ist es für jedermann möglich, MySQL zu benutzen und für seine Zwecke anzupassen. MySQL kann einschließlich seines vollständigen Quellcodes aus dem Internet oder anderen Quellen bezogen werden, ohne dass hierfür ein Preis an den Hersteller MySQL AB bezahlt werden muss. Grundlage für die Nutzung ist die GPL (GNU General Public License). Falls MySQL in 24 Einführung

16 kommerziellen Produkten eingesetzt wird, die nicht als Open Source weiterbetrieben werden sollen, kann auch eine kommerzielle Lizenz erworben werden. Durch die hohe Performance, Zuverlässigkeit und einfache Bedienung hat MySQL insbesondere in vernetzten und Internet- Umgebungen in den vergangenen Jahren eine große Verbreitung gefunden. Hinzu kommt, dass MySQL auf allen wichtigen Betriebssystemen verfügbar ist und als Datenbankserver zuverlässig wichtige Funktionen in digitalen Prozessketten einnehmen kann. Der Ursprung und Schwerpunkt liegt dabei auf Unix-Systemen. Man kann auch deutlich festhalten, dass ein Einsatz von MySQL auf Unix-Systemen grundsätzlich Vorteile bringt. Zum einen ist MySQL hier am besten getestet, so dass Fehlfunktionen unwahrscheinlicher sind, und zum anderen sind einige Merkmale wie z.b. die Erweiterung um eigene Funktionen (UDF) nur für Unix-Betriebssysteme verfügbar. Wenn Sie die Möglichkeit und die entsprechende Erfahrung mit dem Betriebssystem haben, sollten Sie aus diesen Gründen den MySQL-Server unter Unix einsetzen. Unabhängig davon ist die Wahl der Clients. Dass MySQL in verschiedenen Einsatzgebieten professionellen Ansprüchen genügen kann, ist erkennbar an seinem Einsatz in bekannten Internet-Portalen namhafter Unternehmen oder am Angebot von Migrationswerkzeugen führender Datenbankhersteller. Es hat diese Verbreitung erreicht, obwohl dem Programm einige Funktionen anderer Datenbanken fehlen. Es findet schwerpunktmäßig bei Internet-/Intranetprojekten, meistens unter Unix/Linux- Betriebssystemen, Anwendung. Grenzen findet der Einsatz von MySQL bei Aufgaben, bei denen höchste Ansprüche an Datensicherheit und -integrität oder flexible Skalierbarkeit gestellt werden. So wird MySQL im Allgemeinen nicht im Finanzsektor eingesetzt. Grenzen Nach einer Umfrage auf der MySQL-Hompage vom August 2001 mit ca Teilnehmern sind 94% der MySQL-Benutzer männlich. 40% kommen aus Europa und 40% aus Nordamerika; zwei Drittel der Befragten würden MySQL auf jeden Fall weiterempfehlen. Was ist MySQL? 25

17 Zwei Drittel aller Benutzer haben MySQL nach dieser Umfrage auf Linux-Systemen installiert; etwa 50% arbeiten mit Windows-Systemen (Angabe von Parallelinstallationen war möglich). Die am meisten verwendeten Programmiersprachen waren Java/Javascript, PHP, Perl und C Die wichtigsten Eigenschaften von MySQL MySQL AB, der schwedische Hersteller des Programms, hat die Nutzung von MySQL sowohl unter den Bedingungen der GNU Public License (GPL) als auch einer Nicht-GPL-Lizenz zur Verwendung in kommerziellen Produkten gewährt. Details zur Lizenzierung finden Sie in Abschnitt 2.3,»MySQL Lizenzierung«. Client/Server MySQL ist ein Client-/Server-System. Auf den MySQL-Server können dabei beliebig viele Clients zugreifen bzw. Anfragen an ihn richten. Die Art der Clientprogramme ist völlig unerheblich, sie müssen sich nur auf irgendeine Art und Weise über die Schnittstellen, die MySQL bietet, verständigen können. Ein typisches Client-/ Server-System ist z.b. das Internet. Sie verfügen mit Ihrem Browser über einen Client, der in der Lage ist, von einem Server (in diesem Fall dem Webserver) Verbindung aufzunehmen und Informationen dieses Servers (in diesem Fall Webseiten) abzurufen bzw. über Formularfelder Informationen an den Webserver zu senden. Die Clients können dabei auf demselben Rechner installiert sein wie der Server oder über eine TCP/IP-Netzwerkverbindung und unter Windows mit Named Pipes über NetBEUI zum Server Verbindung aufnehmen, soweit die entsprechenden Zugriffsrechte vorhanden sind. Die Anzahl an Clients, die gleichzeitig auf MySQL zugreifen können, wird in erster Linie durch technische Begrenzungen der Hardware und der Netzwerkbedingungen bestimmt und nicht durch MySQL selbst. SQL-Syntax Überblick Die SQL-Syntax, die MySQL verwendet, basiert grundsätzlich auf ANSI-SQL/92. Allerdings sind hierbei einige Einschränkungen und Erweiterungen zu beachten. Einen Überblick über die wichtigsten Eigenschaften von MySQL erhalten Sie in der folgenden Tabelle. Dort sind die wichtigsten Datenbankfunktionen und ihre Umsetzung in MySQL aufgeführt. 26 Einführung

18 Lokaler Client Lokaler Client Lokaler Client Lokaler Client Abbildung 1.1 Client-/Server-Architektur Entfernte Clients Feature Plattformen Windows 95/98/NT/2000, Linux, Solaris, AIX, HP-UX, FreeBSD, NetBSD, OpenBSD, Amiga, BSDI, Dec Unix, Mac OS, OS/2, SGI Irix, Solaris 2.5, SunOS 4.x, SCO OpenServer, SCO UnixWare, True64 Unix Bemerkung Portierung auf verschiedene Plattformen möglich Administration Textkonsole Grafische Zusatztools durch Drittanbieter Tabelle 1.1 Wichtige Datenbankfunktionen und ihre Umsetzung in MySQL Die wichtigsten Eigenschaften von MySQL 27

19 Feature Datensicherung Eigenes Programm, direkte Kopie der DB-Datei Bemerkung Auch einzelne Tabellen können gesichert bzw. restauriert werden. Kein Hot Backup XML Ja XML-Ausgabe ODBC-Treiber Ja MyODBC 2.5 und MyODBC 3.52 mit Level 0, Level 1- und Level 2-Funktionen JDBC-Treiber Ja Connector/J Eigene SQL- Erweiterungen Ja Z.B. Datentypen wie ENUM und SET Viele kleine Erweiterungen der SQL-Syntax Integration von regulären Ausdrücken in SQL-Befehlen Ja Ab Version 4.1 Transaktionen Bedingt Nur mit den Tabellentypen Berkeley DB und InnoDB Unicode-Unterstützung Mehrprozessorfähig Trigger Ja Nein Parallele Ausführung von Programmen (Multithreading) Stored Procedures Benutzerdefinierte Funktionen (UDF) Nein Vorgesehen für Version 5 Ja Sub-Selects Ja Ab Version 4.1 Views Nein Einschränkungen für Benutzer über Rechtesystem möglich Fremdschlüssel (FOREIGN KEY) Eingeschränkt Unterstützung nur bei den Tabellentypen InnoDB und Berkeley DB Locking Abhängig vom Tabellentyp MyISAM-Tabellentyp:Nur auf Tabellenebene InnoDB: auf Datensatzebene Tabelle 1.1 Wichtige Datenbankfunktionen und ihre Umsetzung in MySQL (Forts.) 28 Einführung

20 Feature SSL-Verschlüsselung zwischen Server und Client Bemerkung Ja Ab Version 4.0 Datenimport Delimited ASCII, ODBC Drittanbieter API'S C/C++, Eiffel, Java, Perl, PHP, Python, TCL u.a. Programmierschnittstellen für alle wichtigen Programmiersprachen Reportgenerator Nein Über Drittprogramme oder Programmierung Tabelle 1.1 Wichtige Datenbankfunktionen und ihre Umsetzung in MySQL (Forts.) 1.3 Bezugsquellen und Versionen Die beste Bezugsquelle ist die Homepage von MySQL AB unter In einer eigenen, sehr übersichtlich gehaltenen Download-Area ( finden Sie sowohl Sourcen als auch fertig übersetzte Programme sowie eine gut sortierte und gepflegte Liste für Hilfs- und Zusatzprogramme wie grafische Clients für verschiedene Plattformen, Schnittstellenprogramme (API und Import/Export) und Programme von Drittanbietern. MySQL AB unterscheidet Alpha-, Beta- und stabile Versionen. Alpha-Versionen sind alle Versionen, die für einen öffentlichen Test zur Verfügung stehen; Beta-Versionen sind Versionen, die von MySQL AB als abgeschlossen und frei von bekannten Fehlern angegeben werden. Auftretende Fehler werden sofort beseitigt. Als stabil werden alle Versionen bezeichnet, die uneingeschränkt auch für Produktivumgebungen eingesetzt werden können. Bei Drucklegung dieses Buches sind folgende Versionen aktuell: Versionen Stabile Version: MySQL-Standard 3.23 Die Standardversion von MySQL ist optimiert auf Geschwindigkeit und unterstützt keine Transaktionen. Minor-Releases, die an der dritten Zahl (z.b ) zu erkennen sind, beinhalten Änderungen im Rahmen der Programmpflege. Bezugsquellen und Versionen 29

21 Stabile Version: MySQL-Max 3.23 Die MySQL-Max-Version beinhaltet über den Umfang der Standardversion hinaus insbesondere die Unterstützung von Transaktionen. Version 4.0 Version 4.1 Stabile Version: MySQL MySQL 4.0 wurde am für Produktumgebungen freigegeben. In Erfahrungsberichten werden Umstellungen von Benutzern von Version 3.xx auf 4.0 in der Regel positiv beurteilt. Bei Webhostern ist diese Version zurzeit noch wenig verbreitet, weil die Administration aufwändiger geworden ist. Aus diesem Grund sind die Neuerungen der Version 4 in diesem Buch eigens gekennzeichnet und werden im nächsten Abschnitt gesondert vorgestellt. Alpha Version: MySQL 4.1. Auch die Version 4.1, die bislang als Alpha-Version vorliegt, bietet einige interessante Neuerungen, die im nächsten Abschnitt genauer vorgestellt werden. Diese Version befindet sich aber noch in einem Entwicklungsstadium und sollte deshalb nicht in Produktivumgebungen eingesetzt werden. Da dieses Buch Sie umfassend über die Funktionen und Einsatzgebiete von MySQL informieren soll, sind auch alle neuen Funktionen der Version 4.1 enthalten, und auch diese Version liegt dem Buch auf CD bei. Eine genaue Liste der Änderungen zwischen den einzelnen Versionen wird von MySQL veröffentlicht und ist unter der URL verfügbar. CD Die oben genannten MySQL-Versionen finden Sie auf der beiliegenden Buch-CD-ROM. 1.4 Neuerungen in MySQL 4 Der Funktionsumfang von MySQL hat sich in den letzten Monaten deutlich entwickelt. Die Versionen 3.xx und 4.0 sind stabile Versionen, die in Produktivumgebungen eingesetzt werden. Beide Versionen unterscheiden sich im Funktionsumfang. Sowohl für den Anfänger, aber auch für den fortgeschrittenen MySQL-Benutzer stellt sich hier die Frage, welche Version die geeignetste ist. Daher finden Sie hier die wesentlichen Neuerungen der Version Einführung

22 Version 4.0 Die Version 4.0 enthält viele Erweiterungen, die insbesondere den Betrieb der Datenbank verbessern. Hierzu gehören: Version 4.0 Query Cache Mit dem Query Cache können wiederkehrende Abfragen merklich beschleunigt werden. Eine ausführliche Beschreibung dazu finden Sie in Abschnitt 6.5,»Abfragen beschleunigen: Der Query Cache«. Volltextsuche bzw. -indizierung Version 4.0 enthält neu die Möglichkeit, auch nach Phrasen zu suchen. Informationen dazu gibt es in Abschnitt 6.4.2,»Volltextsuche«. SSL-Verschlüsselung MySQL erlaubt jetzt auch die komplette Kommunikation über verschlüsselte SSL-Verbindungen. Ausführungen einschließlich Installationsanleitung finden Sie in Abschnitt 8.4.4,»SSL-verschlüsselte Verbindungen«. Embedded MySQL Der komplette MySQL-Server kann mit der Version 4.0 auch als eigenständige Library in andere Programme eingebunden werden. Dieses Thema wird in Abschnitt 3.9,»Embedded MySQL«, behandelt. Ein Beispielprogramm befindet sich auf der beiliegenden Buch-CD. InnoDB im Standardumfang Der Tabellentyp InnoDB, der Transaktion und Locking auf Datensatzebene sowie den Einsatz von Fremdschlüssel erlaubt, gehört jetzt zum Standardumfang des MySQL-Servers (wird in Abschnitt 5.4.5,»InnoDB«,sowie im Rahmen verschiedener Abschnitte behandelt). Verbesserte deutsche Sprachunterstützung für die Sortierung (siehe dazu Abschnitt 3.2.5,»Zeichensätze/ Lokalisierung«) Verbesserte Benutzerverwaltung Für einzelne Benutzer können Anzahl der Abfragen und Verbindungen pro Stunde definiert werden. Nähere Informationen dazu finden Sie in Abschnitt 8.4.1,»Passwortsystem«. Neuerungen in MySQL 4 31

23 UNION Mehrere Tabellen können jetzt auch über UNION kombiniert werden. Die Erläuterung des Befehl erfolgt in Abschnitt 6.3.9,»Tabellen vereinigen (UNION)«. Typkonversion Mit den Funktionen CAST() bzw. CONVERT() können Sie während eines SQL-Befehls ein Datentyp umwandeln. Die Behandlung der Funktionen finden Sie in Abschnitt ,»Typkonversion«. Weitere neue Befehle Im Rahmen dieses Buches werden auch weitere neue Befehle besprochen z.b TRUNCATE oder DELETE über mehrere Tabellen. Nähere Informationen enthalten die Abschnitte 6.2.3,»Daten löschen«und 6.2.4,»Daten aus mehreren Tabellen gleichzeitig löschen«verbesserung des Geschwindigkeitsverhaltens Bei einzelnen Befehle wurde die Geschwindigkeit deutlich optimiert. So ist z.b. ein COUNT(DISTINCT) um 30% schneller oder die Erzeugung eines Volltextindex signifikant beschleunigt. Leichtere Migration nach MySQL Die Migration von anderen Datenbanken ist durch die Befehle TRUNCATE TABLE (Abschnitt 6.2.3,»Daten löschen«) oder IDEN- TITY (Synonym für automatische Zähler) erleichtert worden. XML-Ausgabe Hinzugekommen ist also eine Reihe von kleinen Befehlserweiterungen, die die Arbeit mit MySQL vereinfachen. Anders als Version 3.xx, die bei Webhostern aufgrund des problemlosen Einsatzes sehr verbreitet ist, konnte sich die Version 4 in diesem Bereich noch nicht sehr weit durchsetzen, weil die Administration aufwändiger geworden ist. Insbesondere die Aktivierung des Tabellentyps InnoDB läuft den Interessen von Providern teilweise entgegen. Die Datensicherung ist durch die Fremdschlüssel schwieriger, der mögliche Supportaufwand steigt dadurch. Auch werden hier die Daten nicht mehr für jede Datenbank in getrennten Dateien gehalten. Die Sicherstellung der Datenintegrität der Benutzerdatenbanken ist nicht unabhängig zwischen einzelnen Benutzern zu sehen. 32 Einführung

24 Version 4.1 MySQL 4.1 bringt ebenfalls einige neue Funktionen, die die Einsatzmöglichkeiten von MySQL erweitern. Zu nennen sind hier: Unterabfragen (Sub-Selects) Unterabfragen erlauben auch die Lösung von Abfragen, die auf den Ergebnissen einer Abfrage basieren. Diese Neuerung wird in Abschnitt 6.4.,»Unterabfragen (Sub-Selects)«ausführlich behandelt.. FOREIGN-KEY-Erweiterungen Erweiterung der Fremdschlüssel (FOREIGN KEY)-Eigenschaften für die referenzielle Integrität der Datenbank Unterstützung von geometrischen Daten (GIS) Durch die Integration der Verarbeitung von geometrischen Daten sind auch Anwendungen, die eine raumbezogene Speicherung und Auswertung von Daten erfordern, möglich. Ausführliche Informationen dazu bietet Abschnitt 6.8,»Geometrische Daten«. Unterstützung von Unicode Unicode-Unterstützung erlaubt die Speicherung von Daten unabhängig vom Zeichensatz. Länderübergreifende Anwendungen mit unterschiedlichen Zeichensätzen sind so realisierbar. Hierzu gehört auch, dass Zeichensätze für Datenbanken, Tabellen und Spalten unabhängig definiert werden können. Dieses Thema wird in Abschnitt 5.4.8,»Unicode«, behandelt. Neue Befehle SHOW WARNINGS und SHOW ERRORS Mit diesen Befehlen lassen sich Warnungen bzw. Fehler, die bei SQL-Befehlen aufgetreten sind, anzeigen. Sie werden in Abschnit 8.1.1,»Warnungs- und Fehlermeldungen ausgeben«, vorgestellt. Um Ihnen die Arbeit mit diesem Buch leichter zu machen, haben wir die Funktionen gekennzeichnet, die nur in Version 4.0 bzw. 4.1 zur Verfügung stehen. Sie können so sehr schnell erkennen, welche Funktionen nicht allen Versionen zur Verfügung stehen. Version MySQL im Vergleich zu anderen Datenbanken Der Vergleich zwischen verschiedenen Datenbanken muss eine Reihe unterschiedlicher Faktoren berücksichtigen. Ein wichtiger Vergleichsfaktor ist der Leistungs- und Funktionsumfang der Datenbank. MySQL im Vergleich zu anderen Datenbanken 33

25 Der Funktionsumfang einschließlich der Erweiterung des SQL- Sprachumfangs ist bei MySQL im Vergleich zu anderen Datenbanken in der Regel geringer. Entsprechend der 80/20-Regel, nach der 20% der SQL-Funktionen für 80% der Anwendungen ausreichen, werden Sie bei einfacheren Aufgaben in der Regel mit MySQL ans Ziel kommen. Oder positiver ausgedrückt: Bei den meisten Anwendungen benötigen Sie nicht den Ballast einer umfangreicheren Datenbank. Falls Sie noch in der Planungsphase für den Einsatz einer Datenbank sind, empfiehlt es sich, Ihre Anforderungen möglichst genau aufzulisten und anschließend zu erkunden, ob der Funktionsumfang des Datenbanksystems diese unterstützt. Ein Vorteil dabei ist, dass fehlende Funktionen von MySQL durchaus offen diskutiert werden. Die MySQL-Dokumentation widmet diesem Thema sogar ein eigenes Kapitel. Letztendlich hat jede Datenbank Schwachstellen, sei es nun im Leistungsumfang, in der Bedienbarkeit, der Performance oder in den Anschaffungs- und Betriebskosten. Durch diese offene Informationspolitik besteht nicht die Gefahr, dass falsche Vorstellungen über die Leistungsfähigkeit erst in einem fortgeschrittenen Projektstadium erkannt werden. Man kann diese offene Informationspolitik somit als eine positive Eigenschaft des Lizenzmodells werten. Da kein Druck durch Marketingmaßnahmen zur Verkaufsförderung besteht, sind alle Angaben zum Leistungsumfang als authentisch zu betrachten. ACID-Test: Ermitteln des Leistungsumfangs Zur Unterscheidung von Datenbanken bezüglich ihres Leistungsumfangs und zu einem Qualitätstest insbesondere bei geschäftskritischen Anwendungen wird häufig der so genannte ACID-Test herangezogen. ACID ist die Abkürzung für die englischen Wörter Atomicity, Consistency, Isolation und Durability. Dabei wird untersucht, wie eine Datenbank Informationen speichert und behandelt. Als Messlatte dient hier der Idealzustand einer völlig konsistenten und ausfallsicheren Datenbank. Der Standard-Tabellentyp MyISAM von MySQL entspricht nicht dieser ACID-Regel. Die Tabellentypen Berkeley und InnoDB sind 34 Einführung

26 dagegen ACID kompatibel. Nähere Informationen zu den verschiedenen Tabellentypen unter MySQL erhalten Sie bei der Erklärung der CREATE TABLE-Syntax in Abschnitt 5.4.1,»Tabellen anlegen«, und in Abschnitt 5.4.4,»Tabellentypen«. Tatsächlich werden allerdings nur bei geschätzten 5% aller Anwendungen Transaktionen bzw. ACID-Kompatibilität benötigt. Der Vorteil einer fehlenden ACID-Kompatibilität liegt in der höheren Performance, weil, wie oben ausgeführt, zeitraubende Locking- Mechanismen zum Sperren der bei Ausführung einer Transaktion betroffenen Datensätze für andere Zugriffe nicht notwendig sind. 1.6 Einstiegshilfen für MySQL Um Anfängern den Einstieg in MySQL zu erleichtern, werden im Folgenden einige Tipps gegeben. Als Datenbankserver läuft MySQL als Prozess (Task), der in der Regel schon beim Hochfahren des Betriebssystems gestartet wird. Eine Eigenschaft von Prozessen auf Computern ist, dass sie nicht sichtbar sind, solange sie nicht benötigt werden. Für Anwender aus dem Desktop-Bereich, die das manuelle Starten von Programmen gewöhnt sind, ist deshalb erst einmal ein gewisses Umdenken erforderlich. Halten Sie sich am Anfang nicht weiter mit der Installation auf. Am einfachsten kann MySQL zurzeit auf Linux- und Windows-Systemen installiert werden. Bei SuSE-Linux kann die Installation des MySQL-Servers per Yast (ein menügeführtes Installationsprogramm) erfolgen. Bei Windows ist das Installationsprogramm sehr einfach. Ein Windows-System ist im Übrigen für Testzwecke und zum Kennenlernen gut geeignet. Lernen Sie festzustellen, ob der MySQL-Datenbankserver aktiv ist. Denn falls Schwierigkeiten auftreten, sollte dies als Erstes überprüft werden. Unter Unix-Betriebssystemen können Sie die Prozessliste mit $> ps grep mysqld aufrufen. Falls hier mysqld erscheint, sollte der Server aktiv sein. Unter Windows-Systemen schauen Sie sich am einfachsten die Tas- Einstiegshilfen für MySQL 35

27 kliste an. Der MySQL-Task ist durch einen Eintrag mysqld-xxx erkenntlich, wobei xxx für bestimmte MySQL-Versionen variieren kann. Ihr Zugang zur Datenbank ist immer durch eine Benutzerkennung mit Passwort geregelt. Dies legt die Rechte fest, die Sie auf der Datenbank besitzen. Lernen Sie die Rechte kennen, die Ihnen auf der Datenbank eingeräumt sind. Die Kommandozeile des jeweiligen Betriebssystems ist eine wichtige Anlaufstelle. Falls Sie nicht gerne auf der Befehlszeile arbeiten, verwenden Sie einen grafischen Client. So werden Sie sicherer im Umgang mit MySQL. In Abschnitt 3.5,»Grafische MySQL-Clients«, finden Sie eine Auflistung von grafischen Clients. Für die Kommandozeilentools wie mysql, mysqladmin, mysqldump kann help, also die Auflistung aller Optionen, eine wertvolle Unterstützung sein. Fangen Sie erst einmal damit an, mit SQL-Befehlen Datenbanken und Tabellen anzulegen und diese mit Daten zu füllen. Die Kenntnis der wichtigsten SQL-Befehle ist zur effektiven Arbeit mit MySQL notwendig. Sie finden in diesem Buch in den Kapiteln 5,»Datenbanken und Tabellen anlegen«, und 6,»Mit Daten arbeiten«, die notwendigen Grundlagen. Nutzen Sie Mailinglisten und Newsgroups. In der Regel können Sie dort durch den Austausch mit erfahrenen Anwendern wertvolle Informationen erhalten. Eine deutschsprachige Mailingliste ist unter com/mysql/ erreichbar. Eine deutschsprachige Newsgroup finden Sie bei de.comp.datenbanken.mysql. 36 Einführung

28 5 Datenbanken und Tabellen anlegen 5.1 Überblick Datentypen Datenbank anlegen und löschen Tabellen Version : Unicode

29 5 Datenbanken und Tabellen anlegen Nach der erfolgreichen Installation und Festlegung des Datenbankdesigns sind im nächsten Schritt die Datenbank und die Tabellen anzulegen. In diesem Kapitel wird gezeigt, wie es funktioniert. 5.1 Überblick Die Anlage einer vollständigen Datenbank mit ihren Tabellen und Daten erfolgt in MySQL in mehreren Schritten. Zuerst wird die Datenbank angelegt, es folgt die Anlage aller notwendigen Tabellen und anschließend die Speicherung von Daten in der Datenbank. Abbildung 5.1 gibt einen Überblick über den Ablauf. Falls Sie ein größeres Projekt planen, sollten Sie vor der Anlage der Datenbank und der notwendigen Tabellen das logische Schema der Datenbank, wie im vorhergehenden Kapitel erläutert, erarbeitet haben. Anlage Datenbank Name definieren Tabellen anlegen Logisches Schema in Tabellen, Felder und Datentypen umsetzen Daten eingeben Eingabe (Import) von einzelnen oder mehreren Datensätzen Daten ausgeben Abbildung 5.1 Ablauf beim Anlegen einer Datenbank Überblick 147

30 Wenn Sie festgelegt haben, welche Inhalte Ihre Datenbank aufweisen soll und in welchen Feldern die Informationen hierfür zu speichern sind, kann die eigentliche Arbeit mit MySQL beginnen. Hierzu benötigen Sie die im vorhergehenden Kapitel eingeführten SQL-Befehle und ein Programm, um die SQL-Befehle an den MySQL-Server zu senden. Sie können hierfür eines der in Abschnitt 3.5,»Grafische MySQL-Clients«, beschriebenen Programme benutzen. SQL Falls Sie bisher noch nicht mit Datenbanken gearbeitet haben oder es gewöhnt waren, mit grafischen Programmen (wie z.b. MS Access) die Datenbank- und Tabellenstruktur zu definieren, müssen Sie sich jetzt daran gewöhnen, dass alle Definitionen von Datenbanken und Tabellen über SQL-Befehle erfolgen und damit gerade für Anfänger gewöhnungsbedürftig sind. Denken Sie bei der Definition von Tabellen auch immer daran, dass Sie ein relationales Datenbanksystem vor sich haben, d.h. in der Regel eine Reihe von Verknüpfungen zwischen verschiedenen Tabellen. Diese Verknüpfungen aufzustellen, zu warten aber auch zu optimieren, ist eine durchaus lohnende Aufgabe und gar nicht so schwer, wie es auf den ersten Blick erscheinen mag. Sie werden im Folgenden sehen, wie schnell Sie Ihre ersten Tabellen erstellt haben. Datentypen Bevor wir aber zum eigentlichen Anlegen von Tabellen kommen, müssen Sie erst noch einen kurzen Überblick über Datentypen erhalten. Die Besprechung von Datentypen ist sicherlich ein trockenes Thema, weil es letztendlich nur darum geht, um es einmal bildhaft auszudrücken,»daten in eine passende Schublade zu stecken«, um später mit diesen effektiver und einfacher arbeiten zu können. Da Datentypen auf die Performance, Größe und Möglichkeiten der Auswertung der Daten aber einen entscheidenden Einfluss haben, gehören sie zum Basiswissen. Bei näherer Betrachtung der Datentypen werden Sie feststellen, dass es dabei eine Reihe verschiedener Typen mit unterschiedlichem Verhalten zu studieren gilt. Noch ein Tipp am Rande für Anfänger, die sich mit Datenbanken und Tabellenlayout beschäftigen. Im Internet gibt es eine Reihe von Open Source-Projekten, die MySQL als Datenbank-Backend verwenden. Da diese Projekte auch immer die vollständige Definition der Datenbank mitliefern, kann man an diesen Programmen sehr 148 Datenbanken und Tabellen anlegen

31 gut das Datenbanklayout studieren. Eine Quelle für solche Programme ist z.b. Wenn Sie dort als Suchbegriff MySQL eingeben, erhalten Sie eine umfangreiche Liste mit Programmen, die MySQL verwenden. Abbildung 5.2 Suche nach MySQL-Anwendungen bei HotScripts 5.2 Datentypen Die kleinste Einheit, die mit SQL-Befehlen verändert werden kann, ist ein Spaltenwert (Attribut) einer Tabelle. Wie dieser Wert zu behandeln ist, hängt vom Datentyp ab, den dieser Wert besitzt. Ein Datentyp charakterisiert also Daten und determiniert die Möglichkeiten der Behandlung, z.b. in Abfragen. Ein Datentyp kann vielleicht mit einem Fahrzeugtyp verglichen werden, der Sie dabei unterstützt, eine Transportaufgabe zu bewältigen. Wenn Sie viele Personen zu transportieren haben, nehmen Sie einen Bus mit ausreichenden Sitzplätzen. Wollen Sie lediglich eine Person transportieren, können Sie z.b. ein Fahrrad verwenden. Analoges gilt für Datentypen. Wenn Sie in einem Feld lange Zeichenketten speichern wollen, muss das Feld ausreichend dimensioniert sein, oder wenn Sie mit Zahlenwerten arbeiten, brauchen Sie einen Feldtyp, der arithmetische Operationen ermöglicht. Datentypen 149

32 Kategorisierung von Datentypen Jedes Attribut einer Tabelle besitzt immer zwingend einen Datentyp, der die Eigenschaften dieses Wertes bestimmt. Diese Typen können bei MySQL in Zeichenketten (Zeichen, String) Numerische Datentypen (Zahlen) Datums- und Zeit-Datentypen unterteilt werden. Es sei an dieser Stelle noch einmal an das Beispiel»Kunde kauft Produkt«aus dem vorhergehenden Kapitel erinnert. In diesem Fall haben die Namens- und Adressbestandteile den Datentyp Zeichen und die Kunden- bzw. Produktnummer den Datentyp Zahl. Zeichenketten Zahlen Datums- und Zeitwerte Wenn Sie z.b. in einer Adressdatei Namen wie Schmidt oder Meyer speichern wollen, ist das eine Zeichenkette. Sie werden damit beim späteren Arbeiten mit der Datenbank vielleicht solche Abfragen machen wie»suche alle Adressen mit dem Namen Meyer«. Es könnte aber auch sein, dass Sie alle Namen selektieren wollen, die mit einem»m«beginnen. Diese Abfragen müssen über einen so genannten Zeichenkettenvergleich erzeugt werden. Kaum anders sieht es aus, wenn Sie zu den Adressen z.b. ein Einkommen gespeichert haben. Dann handelt es sich um Zahlen und eine Abfrage würde mit arithmetischen Mitteln, wie z.b.»suche alle Adressen, deren Einkommen größer als EUR ist«, erfolgen. An diesem Beispiel können Sie sehen, dass eine Abfrage wie»suche alle Adressen, deren Namen größer Meyer ist«, nicht funktionieren kann, weil»größer Meyer«keinen gültigen Wert hat. Sie kommen also bei der Arbeit mit MySQL um die Kenntnis von Datentypen und Möglichkeiten, mit diesen zu arbeiten, nicht herum. Die Behandlung der Datentypen bei Abfragen wird dann von MySQL vorgegeben. So können z.b. mathematische Berechnungen verständlicherweise nur bei numerischen Werten durchgeführt werden, und für Datumsvergleiche werden dementsprechend Datumsund Zeitwerte benötigt. SQL unterstützt hier, im Gegensatz zu vielen Programmiersprachen, Datums- und Zeitwerte, so dass Operationen mit Datums- und Zeitwerten einfach zu bewerkstelligen sind. Ein Beispiel für eine Operation mit Datumswerten ist die Berechnung der Anzahl von Tagen zwischen zwei Datumswerten. 150 Datenbanken und Tabellen anlegen

33 Beim Anlegen einer Datenbank ist grundsätzlich der präziseste Wert für die Speicherung der Information zu wählen. Bei unpassenden oder zu klein gewählten Datentypen kann die Information nicht richtig oder nicht vollständig gespeichert werden; bei zu groß dimensionierten Datentypen wird die Datenbank unnötig vergrößert, was sich negativ auf die Performance des Systems auswirken kann. YEAR TIME Datetime DATE CHAR(N) N bytes, 1 <= N <= 255 TIMESTAMP VARCHAR(N) L+1 bytes, wobei L <= N and 1 <= N <= 255 DATETIME ENUM 1 oder 2 Bytes. abhängig von der Zahl der Werte (max Werte) String Zeichen Binär SET 1, 2, 3, 4 oder 8 Bytes, abhängig von der Zahl der Elemente (max. 64 Elemente) BLOB (TINY,MEDIUM,LONG) TINYBLOB: Länge+1 Byte, wobei Länge < 2^8 BLOB: Länge+2 Byte, wobei Länge < 2^16 MEDIUMBLOB: Länge+3 Byte, wobei Länge < 2^24 LONGBLOB: Länge+4 Byte, wobei Länge < 2^32 Behandlung case insensitive Text (TINY, MEDIUM, LONG) TINYTEXT: Länge+1 Byte, wobei Länge < 2^8 TEXT: Länge+2 Byte, wobei Länge < 2^16 MEDIUMTEXT: Länge+3 Byte, wobei Länge < 2^24 LONGTEXT: Länge+4 Byte, wobei Länge < 2^32 DECIMAL Numerisch Speicherbedarf 1 Byte 2 Byte 3 Byte 4 Byte 8 Byte v ariabel Genau Ungenau TINYINT SMALLINT MEDIUMINT INT BIGINT FLOAT REAL, DOUBLE Abbildung 5.3 Die Datentypen von MySQL im Überblick Datentypen 151

34 Auch bei der Konvertierung von Daten, der Übertragung von Daten in eine MySQL-Datenbank oder der Übertragung von Daten in eine andere Datenbank sichert der korrekte Datentyp eine verlustfreie Datenübernahme. So können z.b. Zeichen nicht in Zahlenfeldern gespeichert werden. Die Datentypen im Überblick Abbildung 5.3 gibt Ihnen einen Überblick über die in MySQL vorhandenen Datentypen. Im Folgenden werden nähere Informationen zu wichtigen Datentypen gegeben. Die vollständige Referenz der Datentypen können Sie in Abschnitt 11.1,»Datentypen«, nachschlagen Zeichenketten-Datentypen Zeichenorientierte und binäre Typen Bei Datentypen für Zeichenketten wird noch einmal in zeichenorientierte und binäre Typen unterschieden. Der Unterschied besteht darin, dass bei zeichenorientierten Zeichentypen der Inhalt auf Basis des verwendeten Zeichensatzes behandelt, insbesondere sortiert wird, während binäre Typen binär verglichen werden. Textfelder werden in anderen Datenbanken auch als Memo-Felder bezeichnet. Die folgende Abbildung zeigt die Zeichenkette»Ich bin ein Text«als Binärdatei: Abbildung 5.4 Binärfelder Zeichenorientierte Typen sind CHAR, VARCHAR und TEXT. CHAR CHAR(n) sind Zeichenketten mit einer festen Länge, wobei n die Anzahl der Zeichen ist. n darf maximal 255 betragen. Ein Feld, das mit CHAR(50) definiert ist, kann also maximal 50 Zeichen aufnehmen. Für CHAR-Felder werden von der Datenbank immer n Bytes an Speicherplatz reserviert, und zwar unabhängig davon, wie viele Zeichen wirklich jeweils gespeichert sind. Der Speicherbedarf von CHAR-Feldern lässt sich deshalb mit Byte mal Länge der Felder einfach berechnen. 152 Datenbanken und Tabellen anlegen

35 Diesen festen Speicherverbrauch haben VARCHAR(n)-Datentypen nicht. Hier wird nur der Speicherplatz belegt, der auch der Länge der jeweilig gespeicherten Zeichenkette entspricht. Auch für diesen Datentyp darf n maximal 255 betragen. VARCHAR In der Regel sind VARCHAR-Felder aufgrund der besseren Speichernutzung CHAR-Feldern vorzuziehen. Hinzu kommt noch, dass CHAR-Felder mit allen Stellen, also auch den Leerstellen, ausgegeben werden, was zu Formatierungsschwierigkeiten führen kann. Falls Sie größere Zeichenketten speichern wollen, können Sie das mit Hilfe des Datentyps TEXT tun. Hierbei können Sie Zeichenketten bis zu einer variablen Länge von 2^16-1 Zeichen speichern. Außer TEXT können Sie auch in Abhängigkeit von der benötigten Feldgröße TINYTEXT (255 Zeichen), MEDIUMTEXT (2^24-1 Zeichen) oder LONGTEXT (2^32-1 Zeichen) verwenden. Binäre Datentypen sind BLOB, TINYBLOB, MEDIUMBLOB und LONGBLOB. Die maximale Zeichenlänge ist analog dem Datentyp TEXT. TEXT BLOB Bei TEXT- und BLOB-Datentypen werden auch führende Leerzeichen gespeichert, während VARCHAR führende Leerzeichen löscht Numerische Datentypen MySQL unterstützt alle numerischen Datentypen, die in ANSI SQL92 definiert sind. Dies sind die Datentypen mit fester Länge wie NUMERIC, DECIMAL, INTEGER (INT) und SMALLINT sowie die Fließkommazahlen FLOAT, REAL und DOUBLE. Darüber hinaus hat MySQL einige Erweiterungen implementiert. So können INTEGER-Werte je nach Länge noch als TINYINT (1 Byte), MEDIUMINT (3 Byte) und BIGINT (8 Byte) definiert werden. Diese Erweiterungen der Datentypen gegenüber dem SQL-Standard bieten Optimierungsvorteile in der Datenbankgröße. Erkauft werden diese Vorteile allerdings mit einer geringeren SQL-Kompatibilität. Falls Sie also eine hohe Kompatibilität zu anderen SQL-Datenbanken erreichen wollen, weil Sie sich z.b. die Übertragung von Daten offen halten wollen, sollten Sie wenn möglich immer die Standard-SQL-Typen verwenden. Datentypen 153

36 Ganzzahlen INTEGER-Werte, also Ganzzahlen, werden einfach mit dem konkreten Datentyp deklariert. Optional kann noch mit dem Schlüsselwort UNSIGNED festgelegt werden, dass nur positive Werte zulässig sind. So definiert z.b.: Fließkommazahlen Festkommazahl INT eine Ganzzahl mit der Länge von 32 Bit (4 Byte); zulässige Werte sind also bis und TINYINT UNSIGNED eine positive Ganzzahl mit einer Länge von 8 Bit (1 Byte); zulässige Werte sind also 0 bis 255. MySQL bietet mit FLOAT und DOUBLE (REAL) zwei Typen für Fließkommazahlen an. Der Unterschied zwischen diesen beiden besteht lediglich in ihrer Größe. Während der 32 Bit-(4 Byte-) Datentyp FLOAT eine einfache Genauigkeit aufweist, kann DOUBLE 64 Bit (8 Byte) mit doppelter Genauigkeit groß sein. REAL und DOUBLE sind unter MySQL synonyme Bezeichnungen. Fließkommazahlen können optional mit zwei Parametern in der Form DOUBLE (M,D) für die Definition der Länge und der Nachkommastellen definiert werden. Hinzuweisen ist noch darauf, dass das Dezimaltrennzeichen immer ein Punkt (z.b ) sein muss. Während Fließkommazahlen beliebig viele Nachkommastellen haben können, werden Festkommazahlen mit fester Stellenzahl definiert. So wird der Festkommazahlentyp DECIMAL mit der Anzahl der Vorkomma- und Nachkommastellen definiert. Mit umsatz DECIMAL (9,2) wird eine Dezimalzahl (für das Feld Umsatz) definiert, die 9 Ziffern mit 2 Nachkommastellen lang ist. DEC(IMAL) Für DECIMAL sind in MySQL auch die beiden Synonyme DEC und NUMERIC möglich Datums- und Zeit-Datentypen Datums- und Zeitdatentypen sind sehr praktische Datentypen für alle Felder, in denen Datums- und Zeitinformationen wie z.b. Geburtsdatum oder Datum der letzten Änderung gespeichert werden sollen. Mit diesem Typ lassen sich insbesondere Datums- und Zeitberechnungen wie die Differenz von Tagen auf Basis des Datums leicht durchführen. 154 Datenbanken und Tabellen anlegen

37 MySQL bietet folgende Datums- und Zeitdatentypen an: Mit DATETIME und DATE können Datumstypen definiert werden. DATETIME nimmt dabei Werte auf, die sowohl das Datum als auch die Zeit in der Form JJJJ-MM-DD SS:MM:SS (z.b :00:00) speichern. DATE kann benutzt werden, wenn nur das Datum gespeichert werden soll. Das Format hierfür ist JJJJ-MM-DD (z. B ). Ein besonderer Datumstyp ist TIMESTAMP. Bei Einfüge- oder Updatevorgängen wird ein Feld, das mit einem solchen Datentyp definiert ist, automatisch mit dem aktuellen Datum und der aktuellen Zeit versehen. Standardmäßig erfolgen Ausgaben von TIME- STAMP-Feldern 14-stellig in der Form JJJJMMDDHHMMSS. Die Angabe würde also für den 12. Dezember 2001, 21 Uhr 51 Minuten und 3 Sekunden stehen. Falls Sie mehrere TIMESTAMP-Felder in einer Tabelle haben, wird nur die jeweils erste aktualisiert. Sollen Zeitwerte gespeichert werden, steht hierfür der Datentyp TIME zur Verfügung. Zeiten werden im Format HH:MM:SS gespeichert, also z.b. 11:50:00. Da MySQL auch Zeitdifferenzen berechnen kann, dürfen Felder dieses Typs Werte zwischen 838:59:59 und 838:59:59 annehmen. Ungültige Eingaben werden auf den Wert 00:00:00 gesetzt. Weiterhin kennt MySQL den Datentyp YEAR, der vierstellige Jahreswerte zwischen 1901 und 2155 speichern kann. Mit nur einem Byte verbraucht dieser Datentyp wenig Speicherplatz. Werte in YEAR-Feldern können als Zahl (z.b. 1999) oder Zeichenkette (z.b. '1998') erfolgen; Jahresangaben können auch zweistellig von 00 bis 99 erfolgen. Die Zahlen 70 bis 99 werden dabei in 1970 bis 1999, die übrigen in 2000 bis 2069 umgesetzt. Falls Sie ungültige Werte (z.b. Jahreszahlen größer 2155) oder leere Werte speichern, werden diese als 0000 gespeichert. DATETIME, DATE TIMESTAMP TIME YEAR Für die Behandlung von Datums- und Zeitwerten hält MySQL eine Reihe von Funktionen wie z.b. die Berechnung von Zeitdifferenzen zur Verfügung. Da diese thematisch zu den Abfragen gehören, sind sie dort genauer beschrieben (siehe Abschnitt 6.3,»Befehle für die Datenausgabe«). Datentypen 155

38 5.2.4 Aufzählungen Aufzählungstypen: ENUM, SET Als besondere Datentypen hält MySQL noch die Aufzählungstypen ENUM und SET bereit. Sie sind Varianten von Zeichendatentypen und dienen dazu, eine Liste von definierten Werten zu speichern. Wenn Sie beispielsweise eine Datenbank zur Verwaltung von Medienprodukten (wie z.b. Amazon) erstellen wollen und dabei die Produkte nach ihrer Art, wie Video, Buch, DVD oder CD, kategorisieren möchten, ist der Einsatz dieser Aufzählungstypen sinnvoll. ENUM- bzw. SET-Datentypen werden wie folgt definiert: ENUM ('Buch','CD','DVD','Video','MC') bzw. SET ('Buch','CD','DVD','Video','MC') Die gewünschten Werte werden also mit Komma getrennt und in Hochkommas definiert. Der Unterschied zwischen beiden Typen besteht in den verschiedenen Möglichkeiten, die definierten Werte zu speichern. Während ENUM-Typen nur einen jeweils definierten Wert erlauben, können in SET-Feldern auch Kombinationen gespeichert werden. Im oben gezeigten Beispiel könnte in einem SET-Feld DVD,CD gespeichert werden. ENUM- und SET-Typen werden intern mit einem fortlaufenden numerischen Index versehen. Aus diesem Grund sind diese Datentypen insbesondere bei verknüpften Abfragen und Einfügevorgängen schneller. Ein weiterer Vorteil ist die Tatsache, dass nur die definierten Werte zugelassen werden, Fehleingaben also datenbankseitig abgefangen werden. Nachteilig an ENUM- und SET- Typen ist die fehlende SQL-92-Kompatibilität Datentyp-Mapping Zum Abschluss dieses Themas soll noch ein kurzer Blick auf das so genannte Datentyp-Mapping geworfen werden. Das Mapping von Datentypen ist immer dann erforderlich, wenn Sie Daten nach oder aus MySQL in eine andere (SQL)-Datenbank überführen wollen. Um beim Bild der Schubladen zu bleiben, muss in einem solchen Fall die jeweilige Schublade, in der diese Daten gespeichert werden sollen, die passende Größe haben. Ist z.b. das Datenfeld zu klein, kann es zu Datenverlusten kommen. 156 Datenbanken und Tabellen anlegen

39 Die folgende Tabelle zeigt das Datentyp-Mapping zwischen Standard-SQL- und den MySQL-Datentypen. MySQL CHAR(N) BINARY VARCHAR (N) FLOAT DOUBLE TINYINT SMALLINT MEDIUMINT INT BIGINT MEDIUMBLOB MEDIUMTEXT MEDIUMINT VARCHAR(N) BINARY Standard-SQL BINARY (N) CHAR VARYING (N) FLOAT4 FLOAT8 INT1 INT2 INT3 INT4 INT8 LONG VARBINARY LONG VARCHAR MIDDLEINT VARBINARY(N) Tabelle 5.1 Datentyp-Mapping zwischen Standard-SQL- und MySQL-Daten-typen Wenn Sie also Inhalte eines Feldes, das als INT8 definiert ist, nach MySQL transferieren wollen, werden die Inhalte sicher problemlos in ein Feld passen, das unter MySQL als BIGINT definiert ist. 5.3 Datenbank anlegen und löschen In Kapitel 4,»Datenbankentwurf«, wurden die Grundlagen des Datenbankdesigns und die Vorgehensweise bei der Arbeit mit Datenbanken besprochen. Es sollen hier noch einmal die einzelnen Schritte eines Datenbankprojekts, nämlich Projektdefinition, Datenbankentwurf, Implementierung und Nutzung, in Erinnerung gerufen werden. Steht der Datenbankentwurf, kann die Implementierung in MySQL beginnen. Datenbank anlegen und löschen 157

40 Neue Datenbank anlegen Eine neue Datenbank wird mit dem Befehl mysql>create DATABASE [IF NOT EXISTS] <Datenbankname>; erzeugt. Dieser Befehl legt eine Datenbank ohne Tabellen an. Gleichzeitig wird von MySQL ein Verzeichnis im MySQL-Datenverzeichnis mit dem Namen der Datenbank angelegt. Dieses Verzeichnis nimmt dann beim späteren Arbeiten alle Dateien auf. Wenn Sie z.b. eine Datenbank mit dem Namen Adressen anlegen wollen, lautet der Befehl hierzu: mysql>create DATABASE Adressen; Abbildung 5.5 Mit CREATE DATABASE wird eine leere Datenbank erzeugt. Mit der Option IF NOT EXISTS kann die Existenz der Datenbank überprüft werden. Vorhandene Datenbanken werden nicht überschrieben. Mit IF NOT EXISTS wird vor allem das Erscheinen von Fehlermeldungen (Fehlermeldung: Database exists) unterbunden, das innerhalb von Anwendungen zu Programmabbrüchen führen kann. Die Datenbankbezeichnung darf maximal 64 Zeichen besitzen. Erlaubt sind dabei alle Zeichen, die auch bei der Benennung von Dateien möglich sind, d.h. / und. sind als Datenbankbezeich- 158 Datenbanken und Tabellen anlegen

41 nungen nicht möglich, ebenso wenig numerische Zeichen. Gleiches gilt für die Benennung von Tabellen. Das Löschen von Datenbanken können Sie mit dem Befehl mysql>drop DATABASE <Datenbankname>; Datenbank löschen durchführen. Dabei ist zu beachten, dass die Datenbank mit allen Tabellen unwiderruflich gelöscht wird. Insofern erfolgt an dieser Stelle der warnende Hinweis, dass das Löschen von kompletten Datenbanken nur sehr bewusst erfolgen sollte. Um die oben angelegte Datenbank wieder zu löschen, lautet der Befehl wie folgt: mysql>drop DATABASE Adressen; In Mehrbenutzersystemen ist es zur Verhinderung unerwünschter Zugriffe, die das Löschen von Datenbanken verursachen können, ratsam, entsprechende Zugriffsrechte auf Datenbankebene zu vergeben. Die Beschreibung des Zugriffsschutzes in MySQL und wie Datenbanken gegen unbeabsichtigtes Löschen geschützt werden können, finden Sie in Abschnitt 8.4.1,»Passwortsystem«. Um alle vorhandenen Datenbanken auf einem System anzuzeigen, steht der Befehl Datenbanken anzeigen mysql>show DATABASES; zur Verfügung. Datenbanken können alternativ auch mit dem MySQL beiliegenden Kommandozeilenwerkzeug mysqladmin erzeugt oder gelöscht werden. mysqladmin Die Befehlssyntax für das Anlegen von Datenbanken ist dann $>mysqladmin CREATE <Datenbankname>; bzw. $>mysqladmin DROP <Datenbankname>; Ob Sie die SQL-Befehle oder mysqladmin zur Anlage bzw. zum Löschen von Datenbanken verwenden, ist Ihrem Geschmack oder Ihren Vorlieben vorbehalten. Einen Unterschied zwischen beiden Arten gibt es nicht. Datenbank anlegen und löschen 159

42 Abbildung 5.6 Mit SHOW DATABASES können alle vorhandenen Datenbanken angezeigt werden. Aktive Datenbank festlegen Wenn Sie später auf eine Datenbank zugreifen wollen, muss immer zuerst die gewünschte Datenbank ausgewählt werden. Unter MySQL erfolgt das mit dem Befehl mysql>use <Datenbankname>; Alle nachfolgenden Befehle verwenden dann die gewählte Datenbank als Standard. 5.4 Tabellen Tabellen anlegen Nachdem die gewünschte Datenbank angelegt ist, können Sie anschließend die Tabellenstruktur festlegen. Neue Tabellen werden mit dem Befehl CREATE TABLE erzeugt. Als Parameter beim Erzeugen einer Tabelle werden die Datenbankfelder sowie die Definition ihrer Datentypen mit angegeben. Einstiegsbeispiel Zum Einstieg werden wir die Kundentabelle aus Abschnitt 4.2.6,»Optimierung des Datenmodells (Normalisierung)«, anlegen. Geben Sie dazu die folgenden Zeilen ein: 160 Datenbanken und Tabellen anlegen

43 Listing 5.1 Tabelle erstellen mysql>create TABLE kunden( id INT, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50)); und schon haben Sie Ihre erste Tabelle erstellt. Ein CREATE TABLE sieht in der einfachsten Form folgendermaßen aus: mysql>create TABLE <Tabellenname> ( <Spaltenname> <Datentyp>,...); Syntax Diese Syntax entspricht dem oben gezeigten Beispiel. Sie benötigen also bei der Anlage einer Tabelle die in Abschnitt 5.2,»Datentypen«, besprochenen Datentypen zur Festlegung der Spalteninhalte. Oft stellt sich dabei die Frage, welcher Datentyp der am besten geeignete ist. Um diese Frage beantworten zu können, sollten Sie den Inhalt und die maximale Größe der zu speichernden Information kennen. In der Grundsyntax ist das Anlegen von Tabellen relativ einfach. Allerdings müssen in der Tabellendefinition alle Informationen des relationalen Datenmodells mit seinen Verknüpfungen sowie der Indizierung (zur Geschwindigkeitsoptimierung) vorgegeben sein. Befehlssyntax für CREATE TABLE Die Syntax des CREATE TABLE-Befehls kennt deshalb noch eine Reihe von Parametern, die auf das Verhalten der Tabelle Einfluss haben. Zu nennen sind hier z.b. die Definition von Indexfeldern oder die optionale Angabe von Tabellentypen. Auch wenn die Syntax im ersten Augenblick ein wenig unübersichtlich erscheint, kann ich sie Ihnen an dieser Stelle nicht ersparen. Die grundsätzliche Syntax des CREATE TABLE-Befehls lautet wie folgt: mysql>create [TEMPORARY] TABLE [IF NOT EXISTS] <Tabellenname> [<Erstellungsanweisung>] [<Tabellenoptionen>] [<Auswahlanweisung>]; CREATE TABLE Tabellen 161

44 <Tabellenname> ist dabei der von Ihnen gewünschte (neue) Tabellenname. Unter <Erstellungsanweisung> werden alle Felder der Tabelle einschließlich ihrer Datentypen und des Feldverhaltens definiert. Der Aufbau der <Erstellungsanweisung> ist dabei grundsätzlich wie folgt: Spaltenname type [NOT NULL NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [Referenzdefinition] <Tabellenoptionen> sind alle Optionen, die Sie für Ihre Tabelle vorbelegen können. Dies sind z.b. der Tabellentyp oder der Speicherort der Tabelle. DEFAULT-Werte Feldern in der Tabelle können Werte als so genannte Default-Werte voreingestellt werden. Dies erfolgt mit dem Schlüsselwort DEFAULT. Ein häufiger Anwendungsfall ist die Verhinderung von NULL-Werten. Wenn Sie einen Datensatz einfügen und dabei für ein Feld keinen Wert eintragen, würde MySQL standardmäßig hier NULL für»nicht bekannt«eintragen, wenn kein DEFAULT-Wert gesetzt ist. Folgendes Beispiel setzt den DEFAULT-Wert für das Feld»aktiv«auf 'Y'. Listing 5.2 Default-Werte mysql> CREATE TABLE kunden( id INT, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50), aktiv CHAR(1) DEFAULT 'Y'); Mit <Auswahlanweisung> nach dem CREATE-Befehl können Sie automatisch Tabellen mit einem SELECT-Befehl, also über die Abfrage von Tabellen, mit Werten füllen. Beim Anlegen einer Tabelle legen Sie im Allgemeinen auch die Schlüsselfelder, die relationalen Abhängigkeiten zwischen verschiedenen Tabellen und die Felder, die indiziert werden sollen, fest. 162 Datenbanken und Tabellen anlegen

45 5.4.2 Schlüsselfelder für Tabellen Wie bereits im Abschnitt 4.2.4,»Primärschlüssel«, erläutert, werden eindeutige Schlüsselfelder benötigt, um relationale Verknüpfungen zwischen verschiedenen Tabellen herstellen zu können. Dieser Wert, mit dem jeder Datensatz einer Tabelle eindeutig identifiziert werden kann, wird als Primärschlüssel bezeichnet Ein einfaches, aber effektives Verfahren zur Definition eines Primärschlüssels für eine Tabelle, ist es, in jeder Tabelle ein Feld mit einer ausreichend großen INTEGER (32- oder 64-Bit-)Zahl zu definieren. Primärschlüssel definieren Bei der Anlage einer Tabelle werden solche Felder sinnvoller Weise so definiert, dass keine NULL-Werte und keine doppelten Werte zugelassen werden. Hierfür stehen innerhalb der <Erstellungsanweisung> des CREATE TABLE-Befehls folgende Optionen zur Verfügung, die diese Vorgabe unterstützen: NOT NULL für die Vorgabe, dass keine leeren Werte gespeichert werden dürfen. NOT NULL folgt hinter der Definition des Datentyps. MySQL ergänzt bei fehlendem Eintrag je nach Datentyp automatisch einen Wert nach folgenden Regeln: Bei numerischen Werten (abgesehen von AUTO_INCREMENT-Feldern) ist das 0; bei AUTO_INCREMENT-Feldern wird der nächste Wert in der Sequenz verwendet. Bei Datumsfeldern außer TIMESTAMP wird der erste gültige Wert verwendet; bei TIMESTAMP setzt MySQL das aktuelle Datum und die aktuelle Zeit ein. Zeichen-Datentypen (z.b. VARCHAR) erhalten einen leeren String; außer ENUM-Typen, die den ersten definierten Wert zugewiesen bekommen. UNIQUE bzw. PRIMARY KEY zur Festlegung, dass keine doppelten Werte für dieses Feld vorkommen dürfen. Doppelte Werte werden von MySQL mit dem Fehler 'Duplicate Key' abgewiesen. Durch die Abweisung von doppelten Werten ist sichergestellt, dass Tabellenverknüpfungen über diese Felder eindeutig sind. Hierbei können mehrere Felder zu einem UNIQUE oder PRIMARY KEY zusammengeführt werden. Innerhalb einer Tabelle dürfen nur ein PRIMARY KEY, aber mehrere UNIQUE- Felder definiert werden. Die Definition erfolgt in der Form Optionen Erstellungsanweisung Tabellen 163

46 UNIQUE (<Spaltenname>,...) bzw. PRIMARY KEY (<Spaltenname>,...) Der Unterschied zwischen PRIMARY KEY und UNIQUE besteht darin, dass PRIMARY KEY Felder erwartet, die als NOT NULL definiert sind. Falls Anwendungen, die auf die MySQL- Datenbank zugreifen, einen PRIMARY KEY erwarten, obwohl keiner definiert ist, liefert MySQL das erste UNIQUE-Feld zurück, das keine NULL-Werte aufweist. Bezogen auf das oben genannte Beispiel sieht die Definition der Tabelle folgendermaßen aus, wenn die ID das Schlüsselfeld darstellt und als PRIMARY KEY und AUTO_INCREMENT-Feld definiert wird: Listing 5.3 Tabelle erstellen mit ID als Schlüsselfeld mysql>create TABLE kunden( id INT NOT NULL, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50), PRIMARY KEY (ID)); Indices für Tabellen Eine besondere Bedeutung für die Suche und die Performance von Datenbanken haben Indices. Indices beschleunigen: Aufgabe und Zweck eines Index das Auffinden von Informationen bei Abfragen die Sortierung von Tabellen die Suche nach Maximal- und Minimalwerten innerhalb einer Datenreihe die Abfragen über verschiedene Tabellen Ein Index ist nichts anderes als eine interne Aufbereitung der Daten in einer Form, die schnelleres Suchen bzw. Auffinden von einzelnen Datensätzen erlaubt. Ist ein Index auf ein gesuchtes Merkmal vorhanden, können Vorgänge wie z.b. Suchen beschleunigt durchgeführt werden. Indices werden vollständig von der Datenbank verwaltet und beim Löschen oder Hinzufügen von Datensätzen in einer Tabelle automatisch aktualisiert. Sie müssen für die Tabelle lediglich definieren, 164 Datenbanken und Tabellen anlegen

47 welche Datenfelder mit einem Suchindex ausgestattet werden sollen. Hierbei ist es möglich, dass eine Tabelle keinen, einen oder mehrere Indices besitzt. Indices können aus einem oder mehreren Feldern bestehen. Indices haben aber auch Nachteile. Während Abfragen beschleunigt werden, werden im Gegenzug Änderungs-, Löschungs- oder Ergänzungsvorgänge verlangsamt, weil der Index jeweils neu organisiert werden muss. Indices führen in der Regel auch zu einem höheren Bedarf an Speicherplatz auf der Festplatte, weil eine zusätzliche Index-Datei angelegt wird. Beim MyISAM-Tabellentyp ist das z.b. die Datei <Tabellenname>.MYI, bei anderen Tabellentypen erkennen Sie die Index-Datei analog an dem I in der Dateiextension. Ein Index unter MySQL wird bei der Tabellendefinition auf Feldebene mit dem Befehl mysql>index [<Indexname>] (<Spaltenname>, ); Nachteile Index bei der Tabellendefinition anlegen angelegt. Werden mehrere Tabellenfelder angegeben, wird der Index mit allen angegebenen Feldern erzeugt. Es handelt sich dann um einen so genannten zusammengesetzten oder»multi-column«-index. Die Tabellenfelder (<Spaltenname>), auf die der Index angewendet werden soll, müssen dabei bereits in der Tabellendefinition angelegt sein. Die Angabe eines Indexnamens ist optional. Die Definition eines Index innerhalb unserer Beispieltabelle sieht dann wie folgt aus: Listing 5.4 Index definieren mysql>create TABLE kunden( id INT NOT NULL, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50), PRIMARY KEY (ID), INDEX indexname (name)); Indices können auch für bestehende Tabellen definiert werden. Da die Indizierung einer Datenbank unter Umständen einige Zeit in Anspruch nehmen kann, erfolgt eine Indizierung von Feldern sinn- Index bei bestehenden Tabellen anlegen Tabellen 165

48 vollerweise vor Inbetriebnahme der Datenbank im Wirkbetrieb. Die Befehlssyntax für die Anlage eines Index auf eine bestehende Tabelle lautet wie folgt: Syntax mysql>create INDEX <Indexname> ON <Tabellenname> (<Spaltenname>, ); MySQL erlaubt auch die Indizierung von Teilen von Feldern. Interessant ist das bei Feldern, die anhand der ersten x-zeichen unterschieden werden können, wie z.b. Namensfelder. Die Definition erfolgt einfach durch eine Längenangabe nach dem Spaltennamen in der Form <Spaltenname>(Länge). In der vollständigen Syntax sieht eine solche Längenbegrenzung des Index wie folgt aus: mysql>create INDEX <Indexname> ON <Tabellenname> (<Spaltenname>(10)); oder als konkretes Beispiel: mysql>create INDEX IDX_Name ON Anschriften (Name(10)); In diesem Beispiel werden die ersten zehn Zeichen des Namens für den Index verwendet, der die Bezeichnung IDX_Name erhält. Wann sollte ein Index angelegt werden? Auch die Anlage von Indices sollte geplant werden, weil der positive Effekt der schnelleren Suche nach einzelnen Datensätzen durch eine erhöhte Anzahl an Festplattenzugriffen zunichte gemacht werden kann. Ebenfalls ist der Erfolg einer Indizierung von der Art und Weise abhängig, in der die Daten später abgefragt werden. Denken Sie bei der Indizierung also auch immer an die spätere Anwendung und an den use case. Folgende Regeln gelten für die Anlage von Indices unter MySQL: Indices werden nur für Felder angelegt, in denen häufig gesucht wird. Tabellen, die vor allem zur Speicherung von Informationen (wie z.b. LOG-Dateien) dienen und nicht abgefragt werden, benötigen in der Regel keinen Index. 166 Datenbanken und Tabellen anlegen

49 Die Anlage von Indices lohnt nur bei einer großen Datenmenge in den jeweiligen Feldern. Bei z.b. nur zehn Einträgen in einer Tabelle lohnt eine Indizierung nicht. Der Datentyp darf nicht TEXT/BLOB sein oder NULL-Werte zulassen. Indices sollten nur bei Feldern angewendet werden, in denen insbesondere einzelne Datensätze gesucht werden. Wenn Sie z.b. immer Teile einer Tabelle abfragen, kann der Suchvorgang durch vermehrte Festplattenzugriffe ineffektiv werden. Ein Beispiel für einen solchen Fall ist die Ausgabe aller Mitglieder aus einer Mitgliederliste. Als Richtwert werden hier 30% der vorhandenen Einträge genannt, d.h., wenn Sie in der Regel mehr als 30% aller Datensätze einer Tabelle ausgeben, lohnt eine Indizierung nicht. Zusammengesetzte Indices sollten dann eingesetzt werden, wenn häufige Abfragen über die jeweils gleichen Spalten durchgeführt werden. Diese Abfragen dürfen auch keine Oder-Abfragen sein, bei denen nur einzelne Felder abgefragt werden. In diesem Fall muss die Datenbank trotzdem den ganzen Index durchsuchen. Sie verlieren damit den Vorteil der Indizierung. Eine Tabelle kann mit maximal 32 Indices mit jeweils 1 bis 16 Spalten definiert werden. Wenn Sie wissen wollen, welche Indices auf einer vorhandenen Tabelle definiert sind, steht der Befehl Indices einer Tabelle anzeigen mysql>show INDEX FROM <Tabellenname>; zur Verfügung. Ein Index kann mit folgendem Befehl gelöscht werden: Index löschen mysql>alter TABLE <Tabellenname> DROP INDEX <Indexname>; Wenn Sie Indices nicht mehr benötigen, sollten Sie diese auch löschen, um nicht unnötigen Festplattenplatz zu belegen Tabellentypen Zur Speicherung der Daten auf der Festplatte verfügt MySQL über eigene Tabellentypen. Eigene Tabellentypen werden aufgrund der Notwendigkeit eines effektiven, gleichzeitigen Zugriffs auf die Informationen in der Datenbank benötigt. Tabellen 167

50 Die Tabellentypen organisieren die Art und Weise, wie die Informationen physikalisch gespeichert werden und haben aufgrund ihrer Entstehungsgeschichte und ihres Entwicklungszieles verschiedene Eigenschaften, z.b. bezüglich der Unterstützung von Datentypen, der Suchmöglichkeiten innerhalb der Datei, der Behandlung von Zugriffsrechten und der maximalen Dateigröße. Relativ verbreitet sind z.b. die Typen HEAP, HASH, ISAM oder BTREE. Für Sie könnte sich die Frage stellen, warum Sie sich überhaupt mit dem Thema Tabellentypen auseinandersetzen sollten. In der Regel können Sie den voreingestellten Tabellentyp MyISAM verwenden. Falls Sie allerdings Transaktionen (siehe Abschnitt 6.6,»Transaktionen«) verwenden wollen, müssen Sie hierfür einen transaktionsfähigen Tabellentyp für MySQL benutzen. Auch die Verwendung von Fremdschlüsseln (FOREIGN KEY) ist nur bei bestimmten Tabellentypen wie InnoDB möglich. Weiterhin interessant kann die Wahl des Tabellentyps bei Optimierungsfragen sein. So werden z.b. beim Tabellentyp HEAP die Daten im Speicher abgelegt. Dieser Tabellentyp ist deshalb sehr schnell, birgt allerdings das Risiko, bei Absturz des Systems die kompletten Daten zu verlieren. Grundsätzlich können Sie für jede Tabelle einen anderen Tabellentyp wählen. Die Definition des Tabellentyps wird über das Schlüsselwort TYPE = gewählt. Die Syntax lautet wie folgt: TYPE = {BDB HEAP ISAM InnoDB MERGE MYISAM } MyISAM als Standard Vergleich MySQL wählt standardmäßig den Typ MyISAM aus. Die Auseinandersetzung mit den Tabellentypen ist ein Thema für den fortgeschrittenen Umgang mit MySQL, weil Sie diese Tabellentypen nur bei bestimmten Einsatzgebieten benötigen. Als MySQL-Anfänger sollten Sie erst einmal mit dem von MySQL vorgegebenen Standardtyp arbeiten. Bitte beachten Sie hierbei auch, dass in Version 3.xx nur die Tabellentypen HEAP, ISAM und MyISAM zum Standardumfang von MySQL gehören. Insgesamt kann zum Thema Tabellentypen gesagt werden, dass MySQL auf den Typ MyISAM konzipiert ist. Dieser ist ausgereift und zuverlässig. Ein Einsatz des älteren Tabellenformats ISAM ist grundsätzlich obsolet, weil er keine Vorteile bietet. HEAP und MERGE sind Tabellentypen, die insbesondere für Spezialbereiche Vorteile bringen, wie z.b. HEAP für schnelle Temporärtabellen. 168 Datenbanken und Tabellen anlegen

51 Für die transaktionsfähigen Tabellentypen BDB und InnoDB gilt insbesondere, dass diese Transaktionen unterstützen. Bei InnoDB kommt noch, was durchaus bemerkenswert ist, die Unterstützung von Fremdschlüsseln (FOREIGN KEY) hinzu. Wer also Anwendungen entwickeln möchte, die ohne Transaktionen nicht möglich sind, wird auf diese Tabellentypen zurückgreifen müssen. Da MySQL für die Tabellen einer Datenbank auch verschiedene Tabellentypen zulässt, ist es also durchaus möglich, nur die Tabellen, bei denen Transaktionen notwendig sind, als Berkeley DB bzw. InnoDB zu deklarieren, während die restlichen noch als MyISAM definiert sind. Transaktionsfähige und nicht transaktionsfähige Tabellentypen Grundsätzlich verfügt MySQL also über transaktionsfähige und nicht transaktionsfähige Tabellentypen. Nicht transaktionsfähig sind die Tabellentypen ISAM, HEAP, MyISAM und MERGE. Transaktionsfähig sind BDB (Berkeley DB) und InnoDB-Tabellen. Die transaktionsfähigen Tabellentypen stehen nur zur Verfügung, wenn MySQL-Max (Version 3.x) oder MySQL ab Version 4.0 installiert ist oder MySQL mit den entsprechenden Optionen kompiliert wurde. Die transaktionsfähigen Tabellentypen InnoDB und BDB werden zurzeit nach einer Umfrage auf der MySQL-Hompage von knapp 10% (InnoDB) bzw. 3% (BDB) der Anwender benutzt. Insgesamt kann das Thema Tabellentypen bei MySQL insbesondere für diejenigen, die neu mit MySQL arbeiten, etwas undurchsichtig sein. Der Grund hierfür liegt in der Historie der Tabellentypen, aber auch in deren Herkunft. Die transaktionsfähigen Tabellentypen BDB und InnoDB sind erst im Laufe der Entwicklung von MySQL hinzugekommen und stammen, und das ist wichtig für die Integration ihrer Eigenschaften in MySQL, von Drittfirmen. Dadurch verfügen die Tabellentypen von MySQL teilweise über erhebliche Unterschiede in der Unterstützung von MySQL-Funktionen. So kann z.b. eine InnoDB-Tabelle maximal 1000 Spalten enthalten, oder ein SELECT COUNT(*) bei BDB-Tabellen ist langsamer als bei MyISAM-Tabellen. Auf einen Nenner gebracht, bietet die Verwendung verschiedener Tabellentypen eine Reihe von Optionen, um den Leistungsumfang Tabellen 169

52 und die Leistungsfähigkeit von MySQL zu erweitern. Erkauft wird dies aber auf jeden Fall mit der Notwendigkeit, den Leistungsumfang des jeweiligen Tabellentyps vor der Implementierung einer Anwendung genau zu studieren. Eine Umstellung von Tabellentypen in Produktivumgebungen kann technische Schwierigkeiten hervorrufen. Standardtyp MyISAM Für Anfänger wird es ratsam sein, soweit nicht wichtige Gründe dagegen sprechen, den Standardtyp MyISAM von MySQL für die ersten Gehversuche zu verwenden. Da der Tabellentyp für jede Tabelle bei der Erzeugung über mysql>create TABLE TYPE=<Tabellentyp>; oder mysql>alter TABLE <Tabellenname> TYPE=<Tabellentyp>; geändert werden kann, können dann später noch andere Tabellentypen verwendet werden. Falls Sie überprüfen wollen, ob Ihr MySQL InnoDB- oder BDB-Tabellentypen unterstützt, können Sie die Variablen von MySQL abfragen. Der Befehl hierfür lautet: mysql>show VARIABLES LIKE "have_%"; Variable_name Value have_bdb YES have_innodb YES have_isam YES have_raid NO Die wichtigsten Eigenschaften der verschiedenen Tabellentypen können Sie der folgenden Darstellung entnehmen. Der Tabellentyp ISAM und MyISAM MyISAM ist der Standardtyp von MySQL und stellt eine Anpassung des ISAM-Typs für MySQL dar (daher das»my«). ISAM ist ein Tabellentyp, der den B-Trees-Index zur Speicherung der Daten verwen- 170 Datenbanken und Tabellen anlegen

53 det. Eine wichtige Einschränkung von MyISAM ist die Abhängigkeit vom jeweiligen Betriebssystem, auf dem die Tabelle definiert wurde. Eine Transferierung der Datenbank auf ein anderes Betriebssystem ist deshalb nicht möglich. Einige Nachteile von ISAM sind durch den MyISAM-Tabellentyp beseitigt worden. So sind MyI- SAM-Tabellentypen betriebssystemunabhängig und können zwischen verschiedenen Betriebssystemen kopiert werden. Allerdings muss auch die MySQL-Version kompatibel sein, d.h., die MySQL- Version muss auf beiden Rechnern den MyISAM-Tabellentyp unterstützen, was erst ab der MySQL-Version 3.23 der Fall ist. MyISAM verfügt über einen besseren Schutz vor Datenbankdefekten, weil die korrekte Schließung der Dateien mitprotokolliert wird. Wenn MySQL mit der Option --myisam-recover gestartet wird, wird beim Start die korrekte Schließung der Datei geprüft und gegebenenfalls automatisch repariert. Die Verwendung des ISAM-Tabellentyps ist aufgrund der oben genannten Erweiterungen und Verbesserungen durch MyISAM nicht anzuraten. Der Tabellentyp MERGE Der MERGE-Tabellentyp ist seit der MySQL-Version verfügbar. Eine MERGE-Tabelle ist eine Sammlung vorhandener und identischer MyISAM-Tabellen. Diese werden dann wie eine Tabelle behandelt. Folgende Vorteile bieten Ihnen MERGE-Tabellen: Einfache Verwaltung von gleichartigen Tabellen (z.b. Log- Dateien) Geschwindigkeitsverbesserung. Mit MERGE-Tabellen können große Tabellen auf mehrere Einzeltabellen verteilt werden. Da die einzelnen Tabellen eine geringere Größe haben, kann dies Geschwindigkeitsvorteile im Betrieb bedeuten. Verbesserte Suchabfragen. Wenn Ihnen das Suchergebnis bekannt ist, kann direkt in der jeweiligen (kleineren) Teiltabelle gesucht werden. Vorteile von MERGE Tabellen 171

54 Einschränkungen von MERGE Einfachere Reparatur. Falls einmal eine Tabelle defekt sein sollte, betrifft dies dann nur eine (oder mehrere) Teiltabellen und nicht die gesamte MERGE-Tabelle. Erzeugung von Synonymen für Tabellen. Wenn Sie ein MERGE über eine Tabelle anlegen, erhalten Sie so ein Synonym (Alias) für diese Tabelle. Falls Sie regelmäßig Tabellen zusammenführen müssen, können Sie mit MERGE-Tabellen einfacher ans Ziel kommen. Ein anschauliches Beispiel ist die Zusammenführung von Ergebnissen verschiedener Außendienstmitarbeiter, die z.b. Kundenbesuche protokollieren. Hier kann dann jeder Außendienstmitarbeiter eine eigene Tabelle bekommen, die nicht jeweils in eine Datenbank importiert werden muss, sondern nur virtuell als eine Tabelle verknüpft werden kann. Umgehung der Begrenzung von Dateigrößen, die das Betriebssystem vorgibt Allerdings müssen auch die Einschränkungen des Tabellentyps beachtet werden: Anwendung nur auf MyISAM-Tabellentypen AUTO_INCREMENT kann nicht benutzt werden Schlüsselfelder werden langsamer gelesen, weil MYSQL in allen Teiltabellen nach dem Schlüssel suchen muss. MERGE-Tabellen werden wie folgt erzeugt: mysql>create TABLE <Tabellenname> ( <Tabellendefinition> TYPE=MERGE UNION (<Mergetabelle1>,<Mergetabelle2>, )); CD: merge.sql Am einfachsten sind MERGE-Tabellen am konkreten Beispiel zu erläutern. Sie benötigen mehrere identische Tabellen: Listing 5.5 MERGE-Tabellen erstellen mysql>create TABLE merge1 ( ID int(11) NOT NULL auto_increment, loginfo char(40) default NULL, PRIMARY KEY (ID)) TYPE=MyISAM; 172 Datenbanken und Tabellen anlegen

55 mysql>create TABLE merge2 ( ID int(11) NOT NULL auto_increment, loginfo char(40) default NULL, PRIMARY KEY (ID)) TYPE=MyISAM; Diese Tabellen werden über eine Tabellendefinition virtuell zusammengeführt. Listing 5.6 Zusammenführen der Tabellen mysql>create TABLE mergetotal ( ID int(11) NOT NULL default '0', loginfo char(40) default NULL, KEY ID (ID) ) TYPE=MRG_MyISAM INSERT_METHOD=LAST UNION=(merge1,merge2); Der wichtigste Befehl hierfür ist UNION=(, ), der für die Verknüpfung sorgt. Optional kann noch der Befehl INSERT_METHOD angegeben werden, der die Reihenfolge der Einzeltabellen beeinflusst. Im Ergebnis sieht ein MERGE von Tabellen wie in der Abbildung 5.7 aus: Falls Sie eine MERGE-Tabelle neu aufbauen wollen, können Sie das wie folgt tun: Mit DROP TABLE die MERGE-Tabelle löschen und anschließend neu anlegen, also wie folgt: mysql>drop TABLE mergetotal; mysql>create TABLE mergetotal ( UNION=(merge1,merge2)); Natürlich müssen Sie beachten, dass Sie nur die MERGE-Tabelle und nicht die Ursprungstabellen löschen und neu anlegen. Tabellen 173

56 Abbildung 5.7 Beispiel für MERGE-Tabellen Über ALTER TABLE die Tabellendefinition erzeugen Die Einzeltabellen, die zur MERGE-Tabelle gehören, sind in der Datei <Tabellenname>.MRG aufgelistet. Sie können also, wenn wir wieder das oben verwendete Beispiel nehmen, über ls l MERGE1.MYI MERGE2.MYI > MERGETOTAL.MRG unter Unix oder dir MERGE1.MYI MERGE2.MYI > MERGETOTOTAL.MRG /B unter DOS die MERGE-Definition erzeugen. Anschließend muss $>mysqladmin flush-tables ausgeführt werden. Der Tabellentyp HEAP Ein wesentliches Merkmal von HEAP-Tabellen ist die Speicherung der Daten im Arbeitsspeicher. Dadurch sind Tabellen dieses Typs sehr schnell, allerdings wird dies mit einem höheren Risiko des Datenverlusts erkauft. Bei einem Absturz des Systems sind hier nämlich alle Informationen verloren. Aus diesem Grund können HEAP-Tabellen eigentlich nur für Temporärtabellen eingesetzt wer- 174 Datenbanken und Tabellen anlegen

57 den, dann aber bieten sie aufgrund ihres performanten Verhaltens durchaus Vorteile. Im Folgenden noch weitere Punkte und Einschränkungen, die beim Einsatz von HEAP-Tabellen zu beachten sind: Einige Eigenschaften anderer Tabellentypen stehen nicht zur Verfügung. Dies sind die Unterstützung von BLOB/TEXT-Feldern und AUTO_INCREMENT-Funktionen zur automatischen Erhöhung von Zählern. HEAP-Tabellen unterstützen Indices nur bei =- und <=>-Operatoren. Bitte beachten Sie bei der Verwendung von HEAP-Tabellen den Bedarf an Hauptspeicher, da alle Daten im Hauptspeicher gehalten werden. Sie können diesen Bedarf anhand folgender Formel ermitteln: Listing 5.7 Hauptspeicherbedarf ermitteln SUMME_ÜBER_ALLE_KEYS( max_länge_des_keys + sizeof(char*) * 2) + ALIGN(länge_der_Reihe+1, sizeof(char*)) sizeof(char*) ist 4 bei 32 Bit- und 8 bei 64 Bit-Rechnern. Falls Sie Speicher von HEAP-Tabellen freigeben wollen, stehen hierfür die SQL-Befehle DELETE FROM <HEAP_Tabelle>, TRUNCATE <HEAP_TABELLE> oder DROP TABLE <HEAP_TABELLE> zur Verfügung. Der Tabellentyp BDB BDB steht für Berkeley DB, stammt von der Sleepycat Software Inc. ( und ist grundsätzlich erst einmal eine Embedded Datenbanktechnologie. Die Berkeley DB ist also eine Speichertechnologie für Daten, die über Softwareschnittstellen in verschiedene Anwendungen integriert werden können. Sleepycat definiert die Berkeley DB als ein Programmierwerkzeug zur Unterstützung von Softwareentwicklern für die Realisierung von zuverlässiger, skalierbarer und in unternehmenskritischen Bereichen einsetzbarer Datenbankunterstützung. Tabellen 175

58 Dementsprechend findet man die Berkeley DB auch in anderen Projekten, z.b: ht://dig WWW-Indexierung und -suche Cyrus IMAP Server Mailserver OpenLDAP LDAP Auch für unternehmensinterne Zwecke wird die Berkeley DB eingesetzt. Auf der Hompage von Sleepycat werden z.b. Amazon, Compaq oder Cisco Systems genannt. MySQL ist also eigentlich nichts anderes als ein Interface für die Berkeley DB. Berkeley DB läuft auf solchen Systemen erfolgreich, die gleichzeitig mehrere Tausend verschiedene Benutzer bedienen und Datenbankgrößen von 256 TeraByte haben. Schnittstellen zu den wichtigsten Programmiersprachen wie C, C++, Java, Perl, Python und Tcl sind vorhanden. Ebenso ist diese Software für nahezu alle Unix-Systeme und Unix-ähnliche Systeme wie QNX, Embedix, Windows (95/98/NT/2000/XP) und MaxOS X verfügbar. Die Berkeley DB ist eine Open Source-Software, wird also auch mit Quellcode ausgeliefert. Allerdings unterliegt sie nicht der GPL wie MySQL (siehe Abschnitt 2.3,»MySQL-Lizenzierung«), sondern Sleepycat definiert eigene Lizenzbedingungen (siehe Anhang A.3.2,»Berkeley DB«). Eine wesentliche Formulierung betrifft die Weitergabe von Software, die die Berkeley DB enthält. Es wird eindeutig definiert, dass der Quellcode verfügbar gemacht werden muss. Dies betrifft auch Binärdateien mit allen Modulen (auch wenn diese nicht die Berkeley DB betreffen). Die kommerzielle Lizenzierung von MySQL und die Lizenzbedingungen der Berkeley DB sind also für kommerzielle Anwendungen nicht vollständig kompatibel. Falls Sie kommerzielle Produkte mit Berkeley DB-Unterstützung realisieren wollen, sollten Sie diesen Punkt beachten. Merkmale von BDB-Tabellentypen Folgende besondere Merkmale weisen BDB-Tabellen auf: Unterstützung von Transaktionen (siehe Abschnitt 6.6,»Transaktionen«). Berkeley DB-Tabellen erfordern im Gegensatz zu z.b. MyISAM- Tabellen immer einen PRIMARY KEY. 176 Datenbanken und Tabellen anlegen

59 Der PRIMARY KEY ist schneller als andere Schlüsselfelder, weil er mit den Rohdaten gespeichert wird. Aus diesem Grund sollten kurze Schlüsselfelder verwendet werden, um Festplattenplatz zu sparen und die Geschwindigkeit zu verbessern. Berkeley DB-Tabellen verfügen über ein Page-Level-Locking (also auf Datensatzebene). Falls alle Felder, die Sie aus einer Berkeley DB-Tabelle lesen, zum gleichen Index oder dem PRIMARY KEY gehören, kann MySQL die Abfrage ausführen, ohne auf die aktuelle Reihe zuzugreifen. Abfragen, die Reihen durchzählen (wie SELECT COUNT(*) FROM <Tabellenname>) sind langsam, weil Berkeley DB-Tabellen keinen Datensatzzähler besitzen. Berkeley DB-Tabellen machen alle Aktionen mit ROLLBACK rückgängig, wenn der Festplattenplatz erschöpft ist. MyISAM-Tabellen dagegen warten, bis wieder genug Festplattenplatz zur Verfügung steht. Abbildung 5.8 Überprüfung von MySQL auf BDB-Eigenschaften (hier unter einem Windows-System) Tabellen 177

60 Um die Berkeley DB nutzen zu können, muss die BDB-Unterstützung in MySQL mit kompiliert werden. Sie können auf zwei Wegen eine MySQL-Version, die die Berkeley DB unterstützt, erhalten: Entweder Sie kompilieren MySQL mit der BDB-Option selber oder nutzen das MySQL-Max-Paket. Falls Sie nicht sicher sind, ob und mit welchen Optionen MySQL die Berkeley DB unterstützt, können Sie dies mit dem Befehl mysql>show VARIABLES LIKE '%bdb%'; überprüfen. Die Variable have_bdb muss auf YES stehen, damit MySQL die BDB-Tabellentypen unterstützt Der Tabellentyp InnoDB Die Möglichkeiten des InnoDB-Tabellentyps sind durchaus beeindruckend. Zu den Eigenschaften dieses Tabellentyps gehören: Eigenschaften Unterstützung von Transaktionen Unterstützung von Fremdschlüsseln (FOREIGN KEY) Schneller Tabellentyp, nach eigenen Aussagen schneller als der MyISAM-Typ. Hierzu existiert auf der Homepage von InnoDB ein lesenswerter Benchmarktest zwischen InnoDB, MyISAM und der Datenbank PostgreSQL ( Row level locking, das eine höhere Multiuser-Performance aufweist als MyISAM-Typen mit einem Locking auf Tabellenebene. Consistent read. Abfragen benötigen keine Sperrung von Datensätzen und haben keine Querwirkungen auf Einfüge- und Update-Vorgänge auf derselben Tabelle. Automatische Fehlerbeseitigung. InnoDB-Tabellen benötigen keine Reparatur, solange keine Hardwaredefekte vorliegen. Keine Beschränkung der Tabellengröße auch auf Betriebssystemen, deren Dateisysteme Dateigrößen von größer als 2 GB nicht zulassen (z.b. das ext2 von Linux). Nach erfolgreicher Installation können Sie Tabellen in der Form Syntax mysql>create TABLE <Tabellenname>... TYPE=InnoDB; anlegen. Bis MySQL-Version mussten Sie bei jedem CREATE den Datentyp angegeben. Ab Version ist es auch möglich, 178 Datenbanken und Tabellen anlegen

61 den Tabellentyp über einen Eintrag in der my.cnf bzw. my.ini in der Sektion [mysqld] voreinzustellen. Für InnoDB ist die Zeile default-table-type=innodb zu ergänzen bzw. zu ändern. Die Daten werden in einem eigenen Datenverzeichnis abgelegt, das über die Variable innodb_data_home_dir beim Start des MySQL- Servers über die Kommandozeile oder die Konfigurationsdateien my.cnf bzw. my.ini festgelegt wird. Bei InnoDB-Tabellen wird ein bestimmter Speicherplatz für die Datenbank reserviert. Bis einschließlich Version 3.23 musste diese Größe über den Parameter innodb_data_file_path (in der my.cnf bzw. my.ini) eingestellt werden, ansonsten schlug der Start der Datenbank fehl. So würde ein innodb_data_file_path=ibdata:1024m 1 GB an Festplattenplatz für die Datenbank reservieren. Sie können jederzeit den belegten Festplattenplatz über den Befehl mysql>show TABLE STATUS FROM <Datenbankname> LIKE '<Tabellenname>'; Syntax in der Spalte Comment abrufen. Grundsätzlich müssen Sie bei InnoDB-Tabellen den freien Festplattenplatz für Ihre Tabellen genauer überprüfen. Falls dieser erschöpft sein sollte, wird automatisch ein ROLLBACK durchgeführt, also die letzte Aktion rückgängig gemacht. Je nach Aktion kann der Datenbankbetrieb dadurch gestört werden. Wenn Sie eine Tabelle vom Typ InnoDB anlegen, wird im Datenverzeichnis eine *.frm-datei angelegt, die Daten werden ansonsten in einer eigenen Datei gespeichert, folgen also nicht dem Dateischema von MySQL-Typen wie MyISAM. Die vollständige Liste aller Parameter, die für den InnoDB-Tabellentyp gelten, können Sie im Referenzteil nachschlagen. Hinweise zur Tabellen 179

62 Optimierung von InnoDB-Tabellen finden Sie in Abschnitt 8.8.3,»Tabellen optimieren«. Ab Version 4 gehört InnoDB zum Standardumfang von MySQL, vorher beinhalten die Max-Distributionen die Aktivierung der InnoDB-Tabellen. Sie können relativ einfach mit dem Befehl SHOW VARIABLES LIKE "have_%" ermitteln, ob Ihre MySQL-Installation Inno-DB-Tabellen unterstützt. Die Zeile have_innodb muss dabei auf YES stehen. Abbildung 5.9 Um Foreign-Keys nutzen zu können, muss die Unterstützung von Inno-DB aktiviert sein. InnoDB beim Internet-Hoster Wenn Sie über eine eigene MySQL-Installation z.b. in Ihrem Intranet verfügen, können Sie in der Regel die Installation in dieser Hinsicht beeinflussen. Wenn Sie allerdings ein Standardangebot eines Internet Service Providers (ISP) nutzen, um Ihren Internetauftritt mit Hilfe von MySQL zu realisieren, haben Sie keinen Einfluss auf die Konfiguration und damit auch auf die Aktivierung von Inno-DB. Bei Standard-Webangeboten für wenige Euros befinden sich mehrere hundert Kunden auf dem gleichen Server. Der ISP wird Ihnen in der Regel keine individuelle Konfiguration zur Verfügung stellen, sondern darauf bedacht sein, ein stabiles System für alle Kunden bereitzustellen. Nach meiner Einschätzung und Beobachtung deaktivieren die meisten ISP aus Vereinfachungsgründen die Unterstüt- 180 Datenbanken und Tabellen anlegen

63 zung von InnoDB-Tabellen. Aber auch wenn Ihr ISP im Moment InnoDB-Tabellen unterstützen sollte, können Sie nie sicher sein, ob dies beim nächsten Update von MySQL, die der ISP vornimmt, auch so bleibt. Wer also InnoDB-Tabellen und die richtige Unterstützung von Fremdschlüsseln mit MySQL realisieren möchte, benötigt in der Regel Zugriff bzw. Einfluss auf die MySQL-Konfiguration und -Installation. Die Sicherung und insbesondere Rücksicherung einer MySQL- Datenbank ohne die Definition von Fremdschlüsseln war eine einfache Sache. Man konnte mit einem mysqldump (siehe Abschnitt 8.5.2,» Backup mit mysqldump«) den kompletten Inhalt einer Datenbank einschließlich der Tabellendefinition sichern und dann beispielsweise mit dem mysql-client zurücksichern. Wenn Sie jetzt allerdings Fremdschlüssel unter Verwendung von InnoDB-Tabellen definiert haben, wird die Rücksicherung schwieriger, weil Sie die Vaterrelationen vor den entsprechenden Tochterrelationen zurücksichern müssen. Wenn Sie versuchen, die Tochterrelation zuerst einzulesen, wird die Datenbank feststellen, dass keine entsprechenden Werte für die Fremdschlüssel vorhanden sind. Die Speicherung wird dann definitionsgemäß abgelehnt. Konsequenzen für die Datensicherung Abschließend ist noch zu erwähnen, dass der InnoDB-Tabellentyp unter die Lizenzbedingungen der GPL fällt Autowert definieren, Tabellen kopieren Es lohnt sich, noch einen Blick auf die weiteren Optionen zu werfen, die Sie bei der Anlage einer Tabelle wählen können. MySQL besitzt mit AUTO_INCREMENT = # ein einfaches Verfahren, um Zahlenwerte wie z.b. eine Datensatznummer automatisch bei Anlage eines neuen Datensatzes hoch zu zählen. AUTO_INCREMENT wird häufig für Primärschlüssel verwendet, um eindeutige Werte automatisch zu generieren. AUTO_INCREMENT kann nur bei INTE- GER-Werten benutzt werden; AUTO_INCREMENT-Felder müssen indiziert werden und können nicht mehrfach pro Tabelle definiert werden. Um das Eingangsbeispiel aus Abschnitt 5.4.1,»Tabellen anlegen«, noch einmal zu verwenden, kann hier sinnvollerweise der Primärschlüssel (ID) als AUTO_INCREMENT-Feld definiert werden. Die Definition sieht dann wie folgt aus: AUTO_INCRE- MENT Tabellen 181

64 Listing 5.8 Autowert definieren mysql>create TABLE kunden( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50), PRIMARY KEY (ID)); Mit der CHECKSUM = 1-Option können Sie für jede Tabelle laufend eine Checksumme mitprotokollieren lassen, die Ihnen das Auffinden defekter Tabellen für den MyISAM-Tabellentyp erleichtert. Ebenso können Sie für jede Tabelle einzeln den Speicherort der Dateien festlegen bzw. mit DATA DIRECTORY=<Directory> das Datenverzeichnis festlegen. Eine Veränderung des Speicherortes der Indexdateien erreichen Sie mit: INDEX DIRECTORY=<Directory> Sie können mit dem CREATE TABLE auch sehr elegant vorhandene Tabellen oder Teile einer vorhandenen Tabelle in neue Tabellen kopieren. Prinzip ist hierbei, dass über einen SELECT-Befehl die alte Tabelle mit ihrem Inhalt übertragen wird. Die Befehlssyntax lautet wie folgt: Syntax mysql>create TABLE <Neue_Tabelle> SELECT * FROM <Alte_Tabelle>; Wenn Sie z.b. aus der oben gezeigten Kundentabelle eine Tabelle erzeugen wollen, die alle PLZ und Orte enthält, lautet der Befehl wie folgt: mysql>create TABLE plztabelle SELECT DISTINCT plz, ort FROM kunden; Nähere Informationen zur Handhabung des SELECT-Befehls erhalten Sie in Abschnitt 6.3,»Befehle für die Datenausgabe«. Die vollständige Syntax des CREATE-Befehls können Sie in Abschnitt 11.2,»SQL-Referenz (alphabetisch)«, finden. 182 Datenbanken und Tabellen anlegen

65 5.4.7 Referenzielle Integrität, Fremdschlüssel (FOREIGN KEY) und Konsistenzbedingungen Ein wichtiges Bestreben beim Betrieb einer Datenbank sollte es immer sein, einen fehlerfreien Datenbestand vorzuhalten. Bei der Konzeption einer relationalen Datenbank trägt man diesem Umstand bereits insofern Rechnung, dass entsprechende Integritätsregeln definiert werden. Diese Regeln können sein: Gültigkeitsregeln für mögliche Werte der Attribute von Tabellen Eine Gültigkeitsregel z.b. für ein Feld Zahlungsart wäre, dass nur die Werte R für Rechnung, B für Bankeinzug, N für Nachnahme oder V für Vorkasse zulässig sind. Der Primärschlüssel Der Primärschlüssel dient, wie bereits in Abschnitt beschrieben, der eindeutigen Identifizierung eines Datensatzes. Die Datenbank sorgt also dafür, dass kein doppelter Wert in der Spalte vorhanden ist. Die Fremdschlüssel Diese stellen die Beziehung zwischen verschiedenen Tabellen im relationalen Datenmodell sicher her und überprüfen die Datenkonsistenz. Die Funktion des Fremdschlüssels wurde bereits in Abschnitt erläutert. Weitere Geschäftsregeln Hierunter versteht man Integritätsregeln, die aufgrund logischer Bezüge von Daten untereinander entstehen. Ein Beispiel hierfür sind die Felder liefermenge und bestellmenge. Die Integritätsregel hierfür würde lauten:»die Liefermenge darf nie größer sein als die Bestellmenge.«Während andere relationale Datenbanken ein sehr umfangreiches Instrumentarium besitzen, um die referenzielle Integrität und Integritätsbedingungen festzulegen, hat MySQL in dieser Hinsicht relativ wenig zu bieten. Fremdschlüssel sind nur mit dem Tabellentyp InnoDB möglich. Gültigkeitsregeln für Attribute Gültigkeitsregeln für Attribute können Sie bei MySQL über den Datentyp, UNIQUE oder NOT NULL herstellen. So können Sie die Länge einer Zeichenkette beispielsweise mit VARCHAR(50) auf maxi- Tabellen 183

66 mal 50 Zeichen beschränken. Sehr wirkungsvoll ist die Verwendung der Datentypen ENUM bzw. SET, wenn Sie auf bestimmte Werte prüfen wollen. Das oben aufgeführte Beispiel mit den Zahlungsarten würde mit einem ENUM-Datentyp wie folgt definiert werden: Listing 5.9 Gültigkeitsprüfung mit ENUM mysql>create TABLE <Tabellenname> (... ENUM zahlungsart ('R','B','N','V') ) Hinzuweisen ist allerdings an dieser Stelle noch einmal darauf, dass sowohl ENUM als auch SET keine ANSI-SQL-kompatiblen Datentypen sind. Mit UNIQUE können Sie festlegen, dass ein Wert in einem Feld nicht doppelt vorkommt. Ein Beispiel ist die Überprüfung einer Kontonummer, die nur einmal in allen Datensätzen vorkommen soll, allerdings nicht Primärschlüsselcharakter hat. MySQL unterstützt allerdings nicht das Domänenkonzept nach ANSI-SQL 92, mit dem Sie Gültigkeitsregeln in verschiedenen Tabellen wiederverwenden können. Sie müssen also Gültigkeitsbedingungen wie z.b. die Zahlungsart für jedes Feld einer Tabelle immer unabhängig definieren, auch wenn Sie die gleiche Gültigkeitsbedingung auch an einer anderen Stelle bereits verwendet haben. Fremdschlüssel Fremdschlüssel sorgen, wie bereits in Abschnitt beschrieben, für die Verknüpfung zwischen Tabellen im relationalen Datenmodell. Grundsätzlich ist es aber nicht nur die Verknüpfung, die die Fremdschlüssel übernehmen, sondern auch das Verhalten des Fremdschlüssels. Wenn Sie beispielsweise eine Vatertabelle mit Kunden und eine abhängige Tabelle mit Bestellungen angelegt haben, ist eine Bedingung der referenziellen Integrität der Datenbank, dass zu jeder Bestellung auch eine existierende Kundennummer zugeordnet ist. Die Konsequenz daraus ist, dass bei einer Änderung der Kundeninformation in der Kunden-Tabelle u.u. die abhängige Tabelle betroffen ist. Wenn Sie also z.b. einen Kunden löschen, ohne die Bestellungen zu berücksichtigen, kann es vor- 184 Datenbanken und Tabellen anlegen

67 kommen, dass Datensätze aus der Tabelle Bestellungen ohne gültige Kundenzuordnung existieren. Aus diesem Grund übernimmt der Fremdschlüssel in der Regel die Aufgabe der Überprüfung der referenziellen Integrität mit. In der Regel heißt bei MySQL leider nur unter bestimmten Voraussetzungen. Zurzeit werden bei MySQL nämlich Fremdschlüssel nur beim Tabellentyp InnoDB unterstützt. Schauen wir aber zuerst einmal auf die Definition und Funktionsweise von Fremdschlüsseln. Wenn wir das Beispiel mit den Bestellungen und den Kunden nehmen, wird ein Fremdschlüssel in der abhängigen Tabelle, also in diesem Fall der Tabelle bestellungen, definiert. In der Tabelle bestellungen existiert das Feld kunden_id, über das die Zuordnung zum Primärschlüssel der Vatertabelle kunden erfolgt. Die SQL-Syntax lautet dann: FOREIGN KEY (kunden_id) REFERENCES kunden (id) Syntax Die Definition wird also mit dem Schlüsselwort FOREIGN KEY eingeleitet, dann kommt das Feld in der abhängigen Tabelle, das den Verweis beinhaltet, anschließend wird mit REFERENCES und Angabe des Feldes auf den Primärschlüssel der Vaterrelation verwiesen. Damit ist grundsätzlich ein Fremdschlüssel definiert, die Überprüfung der referenziellen Integrität wird dann von der Datenbank übernommen. Die Definition eines Fremdschlüssels erfolgt im Rahmen der Tabellendefinition. Die Definition dieses Beispiels mit der kompletten SQL-Syntax für die Tabelle lautet dann wie folgt: Listing 5.10 Vatertabelle mysql>create TABLE kunden ( id INT NOT NULL, name VARCHAR(100), plz CHAR(5), ort VARCHAR(50), PRIMARY KEY (id) ) TYPE=INNODB; Die abhängige Tabelle bestellungen hat folgende Definition: Listing 5.11 Abhängige Tabelle mysql>create TABLE bestellungen ( id INT NOT NULL, kunden_id INT, Vatertabelle Abhängige Tabelle Tabellen 185

68 bezeichnung VARCHAR(100), anzahl INT, INDEX kun_id (kunden_id), FOREIGN KEY (kunden_id) REFERENCES kunden (id) ) TYPE = INNODB; Über die Felder kunden_id der abhängigen Tabelle ist jetzt referenziell die ID der Kundentabelle verknüpft. Für den praktischen Betrieb hat das dann folgende Auswirkungen: In der abhängigen Tabelle können nur Kunden-IDs verwendet werden, die wirklich vorhanden sind. Sie können keinen Kunden löschen, für den noch Datensätze in der abhängigen Tabelle vorhanden sind. Mit der Definition des Fremdschlüssels sind aber die Möglichkeiten noch nicht ausgeschöpft. Sie können das Verhalten des Fremdschlüssels noch näher spezifizieren. Behandlung der Datensätze in der abhängigen Tabelle, wenn der zugehörige Datensatz in der Vatertabelle gelöscht werden soll. Hier stehen vier Möglichkeiten zur Verfügung: Falls entsprechende Datensätze in der Tabelle bestellungen vorliegen, darf der Datensatz in der Vatertabelle nicht gelöscht werden. Für das Beispiel heißt der Befehl dann: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON DELETE RESTRICT Die entsprechenden Datensätze in der Tabelle bestellungen werden gelöscht. Für das Beispiel heißt der Befehl dann: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON DELETE CASCADE Die entsprechenden Datensätze in der Tabelle bestellungen werden auf NULL gesetzt. Für das Beispiel heißt der Befehl dann: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON DELETE SET NULL Es finden keine Änderungen statt. Für das Beispiel heißt der Befehl dann: 186 Datenbanken und Tabellen anlegen

69 FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON DELETE NO ACTION Behandlung der Datensätze in der abhängigen Tabelle, wenn der zugehörige Datensatz in der Vatertabelle geändert werden soll. Analog zum Löschen eines Datensatzes in der Vaterrelation kann auch definiert werden, wie sich die entsprechenden Datensätze der Tochterrelation verhalten sollen. Die vier verschiedenen Fälle verhalten sich hier wie folgt: Änderung des Datensatzes der Vatertabelle sind nicht erlaubt, wenn Datensätze in der Tochterrelation vorhanden sind: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON UPDATE RESTRICT Bei Änderung des Datensatzes der Vaterrelation werden die entsprechenden Datensätze der Tochterrelation mit NULL versehen: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON UPDATE SET NULL Bei Änderung des Datensatzes der Vaterrelation werden die entsprechenden Datensätze der Tochterrelation ebenfalls geändert: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON UPDATE CASCADE Bei Änderung des Datensatzes der Vaterrelation werden die entsprechenden Datensätze der Tochterrelation nicht geändert: FOREIGN KEY (kunden_id) REFERENCES kunden (id) ON UPDATE NO ACTION So weit zum Thema SQL-Implementierung. Die Verwendung von Fremdschlüsseln in MySQL zieht jetzt aber unter Umständen eine Reihe von Fragen nach sich. Die erste Frage ist natürlich, ob Ihre MySQL-Datenbank überhaupt InnoDB-Tabellentypen unterstützt. Die Unterstützung muss nämlich explizit bei der Compilierung mit --with-innodb angegeben sein. Die max-distributionen von MySQL beinhalten die Aktivierung der InnoDB-Tabellen. Sie können relativ einfach mit dem Befehl SHOW VARIABLES LIKE "have_%" Tabellen 187

70 ermitteln, ob Ihre MySQL-Installation Inno-DB-Tabellen unterstützt. Die Zeile have_innodb muss dabei auf YES stehen. Weitere Geschäftsregeln Wenn Sie die Original-Dokumentation von MySQL für den CREATE TABLE-Befehl ansehen, werden Sie dort das Schlüsselwort CHECK finden. Leider unterstützt MySQL die CHECK-Syntax (noch) nicht. Mit CHECK lassen sich nämlich relativ einfach Eingaben überprüfen, die nicht wie beim ENUM-Datentyp aus festgelegten Werten bestehen. Der Vollständigkeit halber hierzu ein Beispiel: Listing 5.12 Prüfen von Eingaben mit CHECK (nicht in MySQL) CREATE TABLE bestellposition ( bestellnr INT, artikelnr INT, bestellmenge INT, CHECK (bestellmenge >= 1) ) Aber wie gesagt, die Syntax wird im Moment nicht unterstützt. Sie müssen sich als MySQL-Betreiber hier also andere Methoden ausdenken. In der Regel verwenden Sie eine Programmiersprache, um die Benutzerschnittstelle zur realisieren. Wenn Sie beispielsweise eine Internet-Anwendung mit PHP realisieren, könnten Sie die Eingabe natürlich per PHP prüfen. Grundsätzlich kann eine Überprüfung dann wie folgt aussehen: Listing 5.13 Prüfen von Eingaben auf Konsistenz (PHP) <?php if ($bestellmenge > 1) { // Konsistenzbedingung in Ordnung // Datensatz kann gespeichert werden } else { // Konsistenzbedingung nicht in Ordnung // Datensatz darf nicht gespeichert werden }?> 188 Datenbanken und Tabellen anlegen

71 Sie werden also bei MySQL die gewünschten Konsistenzbedingungen häufig in Anwendungsentwicklungen implementieren Ändern des Tabellenlayouts (ALTER TABLE) Gerade während der Definitions- und Entwurfsphase eines Projekts werden häufig Änderungen im Datenbank- und Tabellenlayout vorgenommen. Sie können natürlich auch nachträglich das Tabellenlayout ändern. Hierzu steht der Befehl ALTER TABLE zur Verfügung, mit dem Sie Tabellen umbenennen können Felder, Indices oder Schlüssel hinzufügen können Felder, Indices oder Schlüssel löschen können die Definition eines Feldes (z.b. den Datentyp) ändern können Die allgemeine Syntax lautet: ALTER TABLE Syntax mysql>alter TABLE <Tabellenname> <Änderungsbedingung>, <Änderungsbedingung>; Sie können also mehrere Änderungen an einer Tabelle gleichzeitig durchführen, indem Sie die gewünschten Änderungen durch ein Komma getrennt hintereinander schreiben. Um eine Tabelle umzubenennen, geben Sie folgenden Befehl ein: mysql>alter TABLE <Tabellenname> RENAME <Neuer_Tabellenname>; Neue Felder zu einer bestehenden Tabelle werden mit dem Befehl mysql>alter TABLE <Tabellenname> ADD <Erstellungsanweisung>; Tabellen umbenennen Neue Felder hinzufügen hinzugefügt. Die Syntax der <Erstellungsanweisung> ist dabei analog des CRE- ATE-Befehls und dort beschrieben. Unter <Erstellungsanweisung> werden die Felder mit ihren Datentypen und gegebenenfalls das Feldverhalten definiert. Um z.b. das Feld hobby einer bestehenden Adresstabelle hinzuzufügen, gilt folgender Befehl: mysql>alter TABLE adressen ADD hobby VARCHAR(50); Tabellen 189

72 Sie können beim Hinzufügen des neuen Feldes optional dessen Position in der Reihenfolge der bestehenden Felder definieren. Hierfür ergänzen Sie den oben genannten Befehl mit AFTER <Spaltenname>, um das Feld hinter einer benannten Spalte oder FIRST, um die Spalte am Anfang zu platzieren. Mehrere Spalten können innerhalb einer Befehlszeile durch ein Komma getrennt hinzugefügt werden: mysql>alter TABLE <Tabellenname> ADD <Erstellungsanweisung>, <Erstellungsanweisung>,..; Analog erfolgt die Ergänzung einer Tabelle um Index-, Primär- und Unique-Felder. Index hinzufügen Neue Indexfelder werden folgendermaßen hinzugefügt: mysql>alter TABLE <Tabellenname> ADD INDEX [Indexname] <Spaltenname>; UNIQUE-Feld hinzufügen Primärschlüssel hinzufügen Für Unique-Felder wird folgender Befehl verwendet: mysql>alter TABLE <Tabellenname> ADD UNIQUE [Indexname] <Spaltenname>; Ein Primärschlüssel wird in folgender Syntax hinzugefügt: mysql>alter TABLE <Tabellenname> ADD PRIMARY KEY <Spaltenname,.>; Bestehende Felder einer Tabelle ändern Bestehende Felder einer Tabelle können über CHANGE geändert werden. Die Syntax hierfür lautet: CHANGE mysql>alter TABLE <Tabellenname> CHANGE <Spaltenname> <Erstellungsanweisung>; Wenn Sie z.b. das bestehende Feld hobby in der Länge und Namensgebung verändern wollen, kann dies mit folgendem Befehl erfolgen: mysql>alter TABLE adressen CHANGE hobby hobbies VARCHAR(60); MODIFY Ebenfalls zum Ändern von Feldern kann MODIFY verwendet werden, welches aufgrund der Oracle-Kompatibilität besteht. Im Gegensatz zu CHANGE kann hier aber nicht der Name eines Feldes geändert werden. mysql>alter TABLE adressen MODIFY hobby VARCHAR(60); 190 Datenbanken und Tabellen anlegen

73 Felder, Index oder Primary Key löschen Zum Löschen wird DROP verwendet. Die Syntax hierfür lautet: mysql>alter TABLE <Tabellenname> DROP <Spaltenname>; DROP zum Löschen von einzelnen Spalten, mysql>alter TABLE <Tabellenname> DROP <Indexname>; zum Löschen eines Index, mysql>alter TABLE <Tabellenname> DROP <Primärschlüssel> zum Löschen eines Primärindexes. Interne Optimierung von Tabellen Im Zusammenhang mit der Bearbeitung und Behandlung von Tabellen ist noch der interne Optimierer von MySQL zu erwähnen. MySQL überprüft bei der Anlage (CREATE TABLE) oder Änderung (ALTER TABLE) einer Tabelle die interne Struktur und führt gegebenenfalls ohne eine Meldung Änderungen selbstständig durch, wenn damit die Tabelle durch z.b. geringeren Speicherverbrauch optimiert wird. So werden: VARCHAR mit einer Länge von weniger als 4 Zeichen in CHAR geändert. Interner Optimierer Alle CHAR, die 4 Zeichen und mehr besitzen, in VARCHAR geändert, wenn bereits eine andere Spalte eine variable Länge (VAR- CHAR, TEXT oder BLOB) besitzt. TIMESTAMP-Felder bei der Definition von Längen, die nicht zwischen 2 und 14 liegen, automatisch verlängert bzw. verkürzt. Wer einmal ausprobieren möchte, wie der interne Optimierer von MySQL arbeitet, kann folgende Tabelle anlegen und das Ergebnis der internen Optimierung anschließend mit DESCRIBE TABLE betrachten. Listing 5.14 Internen Optimierer testen mysql>create TABLE optimtest ( id INT DEFAULT '0' NOT NULL auto_increment, Name char(40) NOT NULL, Tabellen 191

74 bemerkung1 char(45), bemerkung2 text, waschar1 char(1), waschar2 char(2), waschar3 char(3), waschar4 char(4), waschar5 char(5), waschar6 char(6), PRIMARY KEY (id)); mysql>describe optimtest; Field Type Null Key Default id int(11) PRI NULL Name varchar(40) bemerkung1 varchar(45) YES NULL bemerkung2 text YES NULL waschar1 char(1) YES NULL waschar2 char(2) YES NULL waschar3 char(3) YES NULL waschar4 varchar(4) YES NULL waschar5 varchar(5) YES NULL waschar6 varchar(6) YES NULL rows in set (0.05 sec) Zu sehen ist die oben beschriebene Änderung von CHAR-Feldern in VARCHAR-Felder. OPTIMIZE TABLE Mit OPTIMIZE TABLE <Tabellenname> können Tabellen vom Typ MyISAM und Berkeley DB auch einer manuellen Optimierung unterzogen werden. Dies bietet sich dann an, wenn große Teile einer Tabelle gelöscht wurden oder viele Änderungen in Feldern variabler Länge durchgeführt wurden. Durch OPTIMIZE TABLE wird unbenutzter Speicher freigegeben und die Datenbankdatei defragmentiert. Zu erwähnen ist noch, dass Tabellen während der Laufzeit von OPTIMIZE TABLE gesperrt sind. 192 Datenbanken und Tabellen anlegen

75 5.4.9 Tabellen umbenennen und löschen Tabellen können ebenfalls mit dem Befehl mysql>rename TABLE <Tabellenname> TO <Neuer_Tabellenname>[, <Tabellenname2 TO <Neuer_Tabellenname2>,...]; Syntax umbenannt werden. Wenn Sie beispielsweise die Tabelle Anschriften in Adressen umbenennen wollen, lautet der Befehl hierfür: mysql>rename TABLE Anschriften TO Adressen; Der Befehl RENAME TABLE führt die gleiche Aktion aus wie ALTER TABLE. <Tabellenname> RENAME <Neuer_Tabellenname>. Zum Löschen einer Tabelle steht Ihnen der SQL-Befehl mysql>drop TABLE <Tabellenname>; zur Verfügung. Zum Löschen einer Tabelle müssen Sie über die entsprechenden Rechte verfügen. Im Gegensatz zu anderen Datenbanken bestehen bei MySQL keine weiteren Abhängigkeiten, wie z.b. ein definierter FOREIGN KEY in einer anderen Tabelle, die das Löschen einer Tabelle verhindern können, sofern Sie nicht den Tabellentyp InnoDB verwenden. Beim Löschen von Tabellen müssen Sie also auf die referenzielle Integrität Ihrer Daten selber achten. Löschen Sie erst Tabellen, wenn keine Abhängigkeiten zu anderen Tabellen vorhanden sind, damit keine Phantomdatensätze in anderen Tabellen übrig bleiben oder Anwendungen aufgrund nicht intakter Abhängigkeiten nicht mehr funktionieren. Hinzuweisen ist an dieser Stelle darauf, dass alle Schritte durch SQL- Kommandos darstellbar sind, also auch skriptgesteuert erfolgen können, d.h., alle Befehle können in eine Skriptdatei eingegeben werden und dann über die Kommandozeile mit der MySQL-Shell (mysql) abgearbeitet werden. Dies ist praktisch bei wiederkehrenden Vorgängen, weil Sie dann nicht jedes Mal die Befehle neu eingeben müssen. Dies sei an einem kurzen Beispiel erläutert: DROP TABLE Syntax Skriptgesteuerte Tabellenerstellung und -änderung Editieren Sie eine einfache Textdatei, die z.b. folgende Einträge zur Definition einer Datenbank, einer Tabelle und der Änderung einer Tabelle enthält: Tabellen 193

76 Listing 5.15 Skriptgesteuerte Tabellenerstellung und -bearbeitung CREATE DATABASE Lagerverwaltung; USE Lagerverwaltung; CREATE TABLE produkte ( ID INT, Bezeichnung VARCHAR(200), Bestand INT); ALTER TABLE produkte ADD wareneingang DATE; Die einzelnen SQL-Befehle werden mit einem Semikolon getrennt und deshalb von MySQL als eigenständige Befehle erkannt. Speichern Sie diese Datei unter einem beliebigen Namen (z.b. DB.SQL). Anschließend können Sie über die Kommandozeile mit $>mysql uuser ppasswort < DB.SQL die Eingaben im Batchmodus ausführen lassen. Auf diese Weise lassen sich sehr gut Aufgaben, die immer wieder vorkommen, automatisieren. 5.5 Version : Unicode Version 4.1 Mit der Version 4.1 von MySQL hat auch die Unterstützung von Unicode (UTF-8, UCS-2) Einzug gehalten. Im Zuge des weltweiten Informationsaustausches stellt sich die Aufgabe, unterschiedliche Schriftzeichen einheitlich zu codieren, um diese dann in verschiedenen Softwaresystemen oder gleichzeitig in einem Dokument speichern zu können. Sie haben es vielleicht auch schon erlebt, dass Sie eine Textdatei geöffnet haben und die Umlaute falsch dargestellt waren. Auch dies ist ein Problem der Zeichensatzcodierung. Das Problem bei der einheitlichen Codierung von Schriftzeichen taucht eigentlich nur auf, da die Schriftzeichen herkömmlich mit 1 Byte (8 Bit) codiert werden. Da 1 Byte nicht ausreicht, um alle Schriftzeichen, die weltweit auftreten können, eindeutig zu codieren, kommt es zu Doppelbelegungen. Mit diesem Problem hat die Definition von Unicode aufgeräumt, indem die Codierung der Schriftzeichen mit mindestens 2 Byte (16 Bit) erfolgt. So ist es dann möglich, Zeichen, und damit alle weltweit auftretenden Zeichen, eindeutig zu codieren. 194 Datenbanken und Tabellen anlegen

77 Das wesentliche Merkmal von Unicode ist also, dass für Schriftzeichen eine eindeutige Nummer vergeben wird, unabhängig davon, auf welchem Betriebssystem das Schriftzeichen verwendet wird, in welchem Softwareprogramm das Schriftzeichen verwendet wird und in welcher Sprache das Schriftzeichen verwendet wird. Die Unicode-Unterstützung ist bei MySQL im Rahmen der Zeichensätze implementiert. Implementiert sind die beiden Unicode-Varianten UTF-8 und UCS-2. Die 16-Bit-fixed-width-Version UCS-2 ist im Grunde die ursprüngliche Version von Unicode. Jedes Zeichen wird durch 2 Bytes beschrieben. Die UTF-16-Codierung ist mit UCS-2 identisch, fügt jedoch Werte hinzu, mit denen man Zeichen über den grundlegenden Bereich von UCS-2 hinaus codieren kann. Bei der variable-width-version UTF-8 besteht jedes Zeichen aus einem oder mehreren Bytes. UTF-8 ist mit 8-Bit-ASCII rückwärtskompatibel und erlaubt die Handhabung von Unicode-Daten durch Systeme, die ursprünglich nur ASCII verarbeiten können. Bei MySQL werden diese Unicode-Varianten unter den Bezeichnungen utf8 bzw ucs2 geführt, d.h. der Unicode-Zeichensatz ist intern mit diesem Namen geführt. Sie können die installierten Zeichensätze Ihrer MySQL-Datenbank mit dem Befehl SHOW CHARSET anzeigen lassen. Listing 5.16 Zeichensätze anzeigen lassen mysql>show charset; Charset Description Default collation big5 Big5 Traditional Chinese big5 dec8 DEC West European dec8_swedish_ci cp850 DOS West European cp850_general_ci hp8 HP West European hp8_english_ci koi8r KOI8-R Relcom Russian koi8r_general_ci latin1 ISO West European latin1_swedish_ci latin2 ISO Central European latin2_general_ci swe7 7bit Swedish swe7_swedish_ci ascii US ASCII ascii_general_ci Version : Unicode 195

78 ujis EUC-JP Japanese ujis sjis Shift-JIS Japanese sjis cp1251 Windows Cyrillic cp1251_bulgarian_ci hebrew ISO Hebrew hebrew tis620 TIS620 Thai tis620 euckr EUC-KR Korean euckr koi8u KOI8-U Ukrainian koi8u_general_ci gb2312 GB2312 Simplified Chinese gb2312 greek ISO Greek greek cp1250 Windows Central European cp1250_general_ci gbk GBK Simplified Chinese gbk latin5 ISO Turkish latin5_turkish_ci armscii8 ARMSCII-8 Armenian armscii8_general_ci utf8 UTF-8 Unicode utf8 ucs2 UCS-2 Unicode ucs2 cp866 DOS Russian cp866_general_ci keybcs2 DOS Kamenicky Czech-Slovak keybcs2 macce Mac Central European macce macroman Mac West European macroman cp852 DOS Central European cp852_general_ci latin7 ISO Baltic latin7_general_ci cp1256 Windows Arabic cp1256_general_ci cp1257 Windows Baltic cp1257_ci_ai binary Binary pseudo charset binary Version 4.1 Während Sie vor Version 4.1 von MySQL den Zeichensatz global für das ganze System eingestellt haben, ist ab 4.1 auch die Definition des Zeichensatzes auf Tabellen- und Spaltenebene möglich. Sie setzen hierfür das Schlüsselwort CHARACTER SET mit der Angabe des gewünschten Zeichensatzes entweder hinter die Tabellen oder die Felddefinition. Somit haben Sie die Möglichkeit in einer Tabelle verschiedene Spalten zu definieren, die einen unterschiedlichen Zeichensatz aufweisen und damit auch anders sortiert werden können. Syntax mysql>create TABLE tbl(<felddefinition>) CHARACTER SET <Zeichensatz>; mysql>create TABLE tbl(a CHAR CHARACTER SET <Zeichensatz>); Oder im konkreten Beispiel für Unicode-Zeichensätze: 196 Datenbanken und Tabellen anlegen

79 Listing 5.17 Unicode-Zeichensätze für Tabellen definieren mysql>create TABLE tbl(name VARCHAR(50)) CHARACTER SET utf8; mysql>create TABLE tbl(name VARCHAR(50) CHARACTER SET utf8); Mit einem DESCRIBE können Sie überprüfen, ob die Tabellendefinition entsprechend angelegt wurde. Listing 5.18 Tabellendefinition überprüfen mysql> DESCRIBE tbl; Field Type Collation name varchar(50) character set utf8 utf Eine so definierte Tabelle oder Spalte steht dann für die Speicherung von Unicode-Zeichen zur Verfügung. Version : Unicode 197

80 7 Realisierung von Benutzerschnittstellen 7.1 Überblick Externe Aufbereitung von MySQL-Daten Formulare und Berichte mit Desktop-Programmen erstellen Programmierung von Benutzerschnittstellen XML

81 7 Realisierung von Benutzerschnittstellen In diesem Kapitel werden Methoden und Verfahren für eine aufbereitete Datenausgabe mit Hilfe von Formularen erläutert. Da MySQL keine Tools für die Erstellung von Formularen zur Verfügung stellt, werden einige Hilfsmittel und etwas Know-how benötigt, um bei dieser Aufgabe zu einem Ergebnis zu kommen. 7.1 Überblick Für den Anwendungsanfall werden immer Benutzerschnittstellen benötigt, um die Daten in strukturierter Form darzustellen und auszugeben. Gerade in Produktivumgebungen hängt die Effektivität häufig auch von der Realisierung der Benutzerschnittstelle ab. Komplizierte Verfahren bei der Abfrage oder Darstellung von Daten (Informationen) verringern in der Regeln die Akzeptanz des Benutzers, das System anzuwenden. Im Internet besteht z.b. die Situation, dass sehr viele Benutzer die Anwendung nach ihrem Besuchsverhalten beurteilen. Nicht optimierte Benutzerschnittstellen führen hier zwangsläufig zu geringeren Besucherraten. Für den Betreiber einer MySQL-Datenbank bieten sich folgende Möglichkeiten, Benutzerschnittstellen zu realisieren: Realisierungswege Export der Daten aus MySQL und Aufbereitung und Darstellung über ein Drittprogramm, z.b. in einer Tabellenkalkulation oder Textverarbeitung. Die manuelle Erzeugung von Ausgaben bietet sich dann an, wenn Daten aus der Datenbank einmalig oder nur periodisch aufbereitet werden sollen. Ein Beispiel hierfür ist z.b. der Druck von Adressen für eine Mailing-Aktion. Die Zuhilfenahme eines User-Interfaces von Programmen eines Drittanbieters, das die Benutzerschnittstelle übernimmt Überblick 329

82 Dieses Verfahren ist dann praktikabel, wenn häufiger wiederkehrende Datenausgaben durch grafische Benutzerführung und vorbereitete Vorlagen unterstützt werden sollen. Eigene Programmierung von Benutzerschnittstellen Hierzu gehört z.b. eine Ausgabe in HTML-Form über einen Browser oder eine Programmiersprache. Vorteil dieses Verfahrens ist, dass die Datenausgabe systemnaher an MySQL erfolgt und somit weniger Parameter für einen reibungslosen Betrieb benötigt werden. Für die eigene Programmierung einer Datenausgabe wird allerdings ein entsprechendes programmiertechnisches Know-how benötigt. 7.2 Externe Aufbereitung von MySQL-Daten Eine manuelle Aufbereitung von MySQL-Daten erfolgt in der Form, dass Daten aus MySQL ausgelesen werden und anschließend in einem Programm Ihrer Wahl weiterbearbeitet bzw. aufbereitet werden. Voraussetzung dafür ist, dass das Zielprogramm mit den Daten umgehen kann. Daten können aus MySQL über einen Datenexport mit vorhandenen Befehlen oder Hilfsprogrammen oder über die vorhandenen Schnittstellen (z.b. ODBC) ausgelesen werden. Im Folgenden wird die Aufbereitung von MySQL-Daten über den Export von Delimited ASCII-Dateien und der ODBC-Schnittstelle dargestellt Delimited ASCII-Daten weiterverarbeiten Wie bereits erwähnt, sind Delimited ASCII-Dateien Textdateien, die die einzelnen Felder einer Tabelle enthalten, die wiederum durch ein Trennzeichen (z.b. Semikolon) getrennt sind. Dieses Format lässt sich von vielen Desktop-Programmen relativ einfach weiterverarbeiten, weil in ihnen entsprechende Importfilter existieren. Delimited ASCII aus MySQL exportieren Delimited ASCII-Dateien werden aus MySQL über den SQL-Befehl SELECT * INTO OUTFILE exportiert. Der Befehl wurde bereits in Abschnitt ,»Ausgabedatei über SELECT erzeugen«, ausführlich beschrieben. An dieser Stelle soll noch einmal zur Erinnerung die Syntax erwähnt werden: 330 Realisierung von Benutzerschnittstellen

83 Listing 7.1 Ausgabedatei erzeugen mysql>select * INTO OUTFILE '/tmp/adressen_out.txt' FIELDS TERMINATED BY ';' FROM adressen; Delimited ASCII in StarOffice oder MS Office weiterverarbeiten Mit dieser Ausgabedatei können Sie dann in den jeweiligen Programmen weiterarbeiten. Voraussetzung dafür ist, dass das Zielprogramm einen Importfilter für dieses Datenformat besitzt. Allerdings ist dies bei Office-Paketen (wie MS Office oder StarOffice) die Regel. Diese Importfilter werden häufig auch mit»text-csv«bezeichnet. Unter StarOffice ist z.b. der Import von Delimited ASCII unter dem Menüpunkt Datei öffnen und Auswahl des Dateityps Text CSV zu finden (siehe Abbildung 7.1). Abbildung 7.1 Import von Delimited ASCII-Dateien aus MySQL in StarOffice Während des Imports können Sie in der Regel noch einmal verschiedene Optionen, wie z.b. das Feldtrennzeichen (das Sie beim Export mit FIELDS TERMINATED BY definiert haben) festlegen. Weitere Optionen können sein: Ab Zeile xx Überspringt die ersten Zeilen der Datei und beginnt erst ab der definierten Zeile. Import Importoptionen Externe Aufbereitung von MySQL-Daten 331

84 Feldtyp Festlegung der Feldtypen. Beim Export aus MySQL verlieren die Felder ihre Informationen zum Datentyp. Dieser kann dann hier wieder festgelegt werden. Wird benötigt, wenn die Felder keine Textfelder sind (z.b. Datumsfelder). Zeichensatz Beim Import kann der Zeichensatz festgelegt werden (z.b. ANSI, 850, 437). Abbildung 7.2 Festlegung von Importoptionen unter StarOffice Die Daten stehen Ihnen anschließend zur weiteren Bearbeitung zur Verfügung Daten über ODBC-Schnittstelle weiterverarbeiten Eine weitere Form, Daten aus MySQL in anderen Programmen weiterzuverarbeiten, ist der Export von MySQL-Daten über die ODBC- Schnittstelle und anschließende Weiterverarbeitung im jeweiligen Zielprogramm. Vorteil dieses Verfahrens ist, dass bei einem eingerichteten System Daten ohne großen Aufwand transferiert werden können. 332 Realisierung von Benutzerschnittstellen

85 Abbildung 7.3 Importierte MySQL-Daten in der Tabellenkalkulation Export von MySQL-Daten über ODBC nach StarOffice Im Folgenden soll die Möglichkeit, Daten über die ODBC-Schnittstelle zu exportieren, anhand der Erzeugung eines Serienbriefes unter StarOffice (Versionen 5.2 und 6) demonstriert werden. Um einen Serienbrief in StarOffice zu erstellen, gehen Sie wie folgt vor: Erstellung von Serienbriefen Stellen Sie sicher, dass die ODBC-Schnittstelle mit der Anbindung an die gewünschte Datenbank aus MySQL (der Datenbank, die die Anschriften enthält) richtig eingerichtet ist (Installation ODBC-Schnittstelle, siehe Abschnitt 3.5.8,»Datenbankzugang über ODBC einrichten«). Öffnen Sie StarOffice und definieren diese MySQL-Datenbank als die Standard-Datenbank. Dieses erfolgt, soweit noch nicht geschehen, unter dem Menüpunkt Bearbeiten Datenbank austauschen. Damit steht die Datenbank für die Serienbrieffunktionen von StarOffice zur Verfügung. Externe Aufbereitung von MySQL-Daten 333

86 Sie können die korrekte Anbindung über den Menüpunkt Ansicht Aktuelle Datenbank überprüfen (siehe Abbildung 7.6 [1]). Falls Sie nur eine Auswahl von Datensätzen für den Serienbrief verwenden wollen, können Sie im Datenbankfenster über Filter anwenden Filterbedingungen setzen. Abbildung 7.4 Über den Menüpunkt»Datenbank austauschen«wird die MySQL- Datenbank via ODBC an die Serienbrieffunktionen von StarOffice angebunden. Im nächsten Schritt werden dann die Serienbrieffelder definiert. Sie können hierfür ein neues Dokument anlegen oder eine Dokumentenvorlage von StarOffice verwenden. Die Serienbrieffelder werden über den Menüpunt Einfügen Feldbefehl Andere und dann im Reiter Datenbank ausgewählt. Dort werden Ihnen alle Felder der MySQL-Datenbank angezeigt. Mit einem Doppelklick bzw. über den Button Einfügen können Sie das Feld in Ihr Dokument einfügen (siehe Abbildung 7.5). Die Felder sollten dann einschließlich des Datenbankverweises im Dokument sichtbar sein (siehe Abbildung 7.6 [2]). Wenn Sie alle Serienbrieffelder in Ihr Dokument eingefügt und das Dokument formatiert haben, können Sie anschließend die Serienbrieffunktion im Datenbankfenster (siehe Abbildung 7.6 [3]) starten. 334 Realisierung von Benutzerschnittstellen

87 Abbildung 7.5 Einfügen von Serienbrieffeldern in StarOffice Abbildung 7.6 Die verschiedenen Komponenten der Serienbrieffunktion. [1]: Anbindung der MySQL-Datenbank, [2]: Serienbrieffelder im Dokument [3]: Serienbrief starten Externe Aufbereitung von MySQL-Daten 335

88 Export von MySQL-Daten über ODBC nach MS Office MS Query Microsoft bietet für sein Office-Paket mit MS Query ein Hilfsprogramm an, mit dem Sie Daten über die ODBC-Schnittstelle transferieren können. Die Möglichkeit, Daten aus einer MySQL-Datenbank z.b. nach MS Excel zu exportieren, haben Sie in MS Query unter dem Menüpunkt Daten Externe Daten Neue Abfrage erstellen. Wählen Sie anschließend die MySQL-Datenquelle, die gewünschten Spalten und die Filterbedingungen aus. Im anschließenden Menü können Sie wählen, ob Sie die Daten direkt an Excel zurückgeben oder die Daten in MS Query über den so genannten Query-Assistenten weiterbearbeiten wollen. Im Query-Assistenten können Sie die Abfrage weiterbearbeiten, hierzu gehört z.b. das Anlegen von relationalen Verknüpfungen über verschiedene Tabellen. Im Query-Assistenten geben Sie Daten über den Menüpunkt Datei Daten an Microsoft Excel zurückgeben an Excel zurück. Abbildung 7.7 Der Query-Assistent von MS Query Im Folgenden wird analog zum Beispiel mit StarOffice gezeigt, wie Serienbriefe unter Windows mit Daten aus einer MySQL-Datenbank erzeugt werden. 336 Realisierung von Benutzerschnittstellen

89 Im ersten Schritt werden unter dem Menüpunkt Extras Seriendruck die Datenquelle und das Dokument miteinander verknüpft. In diesem Dialog wählen Sie unter Datenquelle Datenquelle öffnen den Button MS Query. Anschließend öffnet sich der Dialog zur Auswahl der ODBC-Datenquelle, aus dem Sie die MySQL-Datenbankverbindungen auswählen. Auch hier gilt natürlich, dass die MySQL-ODBC eingerichtet sein muss. MS Query stellt hier ebenfalls den Query-Assistenten zur Verfügung, der es Ihnen erlaubt, die Abfrage weiter zu spezifizieren. Abbildung 7.8 Nach Verknüpfung von Dokument und Datenquelle können über»daten importieren«die MySQL-Daten über ODBC importiert werden. Wenn die Verknüpfung zwischen Dokument und Datenquelle erfolgreich war, können anschließend im Dokument die Felder definiert werden. Hierzu steht jetzt die Schaltfläche Serienbrieffeld einfügen zur Verfügung, die alle (ausgewählten) Felder der MySQL-Datenbank enthält. Nachdem Sie das Dokument vollständig mit allen gewünschten Feldern angelegt haben, können Sie über den in Abbildung 7.8 gezeigten Seriendruck-Manager den Seriendruck starten. Externe Aufbereitung von MySQL-Daten 337

90 Abbildung 7.9 Felder der MySQL-Datenbank in das Dokument einfügen 7.3 Formulare und Berichte mit Desktop-Programmen erstellen Standard-Desktop-Programme unter MS Windows, wie z.b. StarOffice, MS Access oder MS Excel, lassen sich teilweise sehr elegant als Benutzerschnittstellen für MySQL einsetzen, um strukturierte Ausgaben zu erzeugen. Man kombiniert dabei die Vorteile der grafischen Möglichkeiten der Standardprogramme mit den Datenbankmöglichkeiten von MySQL. Da MySQL als Datenbankserver sehr stabil ist, ein gutes Sicherheitssystem hat und an beliebiger Stelle in Netzwerken seinen Dienst tun kann, kann man mit dieser Kombination durchaus auch in Unternehmen oder kleinen Benutzergruppen eine effektive Datenverwaltung realisieren. In diesem Abschnitt sollen Möglichkeiten vorgestellt werden, mit StarOffice bzw. MS Access Benutzerschnittstellen für MySQL zu realisieren. 338 Realisierung von Benutzerschnittstellen

91 7.3.1 Formulare und Berichte mit StarOffice erstellen Im Folgenden wird gezeigt, wie man StarOffice (Version 5.2) für Formulare und Berichte nutzen kann. In der Version 6, die voraussichtlich im ersten Halbjahr 2002 erscheint, ist das Verfahren grundsätzlich das Gleiche. Prinzip dabei ist, dass StarOffice so konfiguriert wird, dass Daten des MySQL-Servers abgerufen und bearbeitet werden können. Die Aufbereitung und Ausgabe der Daten erfolgt dann mit den Mitteln, die StarOffice anbietet. Die Anbindung von StarOffice an MySQL erfolgt über die ODBC- Schnittstelle, deren Installation bereits in Abschnitt 3.5.8,»Datenbankzugang über ODBC einrichten«, besprochen wurde. Sie müssen also über ein installiertes StarOffice für Windows, einen installierten und konfigurierten MyODBC-Treiber sowie einen installierten MySQL-Server verfügen. Der MySQL-Server kann sich natürlich wieder irgendwo im Netz befinden, solange die Arbeitsstation, auf der StarOffice läuft, diesen Server über das Netz erreichen kann. Selbstverständlich reicht auch ein MySQL-Server für viele verschiedene Clients, auf denen StarOffice installiert ist. Diese Lösung ist darüber hinaus noch vergleichsweise kostengünstig. StarOffice ist als vollwertige Office-Anwendung in der Version 5.2 zurzeit von Sun Microsystem ( als Download oder zum Bestellen auf Datenträger kostenlos erhältlich. Im ersten Schritt müssen Sie, soweit nicht schon erfolgt, in StarOffice eine Datenbank (Datenquelle) anlegen. Dies erfolgt über den Menüpunkt Neu Datenbank. Wählen Sie als Typ ODBC und im Dialog Datenquellen die MySQL-DSN aus. Falls Sie Ihre MySQL- Datenquelle noch nicht eingerichtet haben, können Sie das hier auch noch über den Button Verwalten tun. Im Reiter Tabellen können Sie bereits eine Auswahl der Tabellen Ihrer Datenbank vornehmen. Datenquelle anlegen Wenn Sie die Datenbank eingerichtet haben, sollten im Hauptfenster Icons mit den Bezeichnungen Formulare, Berichte, Abfragen und Tabellen angezeigt werden (siehe Abbildung 7.11). Formulare und Berichte mit Desktop-Programmen erstellen 339

92 Abbildung 7.10 Zur Erzeugung von Formularen muss eine MySQL-Datenquelle über ODBC definiert werden. Abbildung 7.11 Für die Datenbank stehen Formulare, Berichte, Abfragen und Tabellen zur Verfügung. Formulare mit StarOffice anlegen Im nächsten Schritt kann jetzt das Formular angelegt werden. Am einfachsten geht das über den Autopiloten, den StarOffice für die Ausgabe zur Verfügung stellt. Um den Autopiloten zu starten, kli- 340 Realisierung von Benutzerschnittstellen

93 cken Sie entweder mit der rechten Maustaste auf das Formular-Icon und auf Neu Formular Autopilot oder auf den Menüpunkt Datei Autopilot Formular. Der Autopilot führt Sie menügesteuert zu einem ersten Entwurf Ihres Formulars. Wählen Sie die Tabelle aus, für die ein Formular erzeugt werden soll. Wählen Sie anschließend die Felder der gewählten Tabelle, die angezeigt werden sollen. Wählen Sie einen der angebotenen Formularstile aus. Der Autopilot legt Ihnen ein Standardformular an. Sie können anschließend nach Ihren Anforderungen die Elemente platzieren. Für die Formularbearbeitung hält StarOffice noch die Formularfunktionen bereit, die Sie auf der linken Seite des Bildschirms als Abrissdialog finden (siehe Abbildung 7.12). Abbildung 7.12 Die Formularfunktionen stehen als Abrissformular zur Verfügung. Sie platzieren also die notwendigen Elemente mit der Maus auf der Oberfläche und weisen diesen anschließend bestimmte Eigenschaften zu. Formulare und Berichte mit Desktop-Programmen erstellen 341

94 Formularelemente Folgende wichtige Formularelemente stehen dabei zur Verfügung: Funktion Schaltfläche Optionsfläche Markierfeld Beschriftungsfeld Gruppierungsrahmen Textfeld Listenfeld Kombinationsfeld Grafische Schaltfläche Grafisches Kontrollfeld Dateiauswahl Datumsfeld Zeitfeld Numerisches Feld Formatiertes Feld Erklärung Erzeugt eine Befehlsschaltfläche, die z.b. zum Ausführen einer bestimmten Aktion verwendet werden kann. Erzeugt ein Optionsfeld. Der Anwender hat die Auswahl zwischen verschiedenen Optionen. Über einen Gruppierungsrahmen können verschiedene Optionsflächen zusammengefasst werden. Diese müssen dann über die gleiche Name-Eigenschaft verknüpft werden. Ebenfalls zur Auswahl verschiedenener Optionen. Markierfelder sind im Gegensatz zu Optionsflächen immer unabhängig. Erzeugt ein Label zur Beschriftung. Eingaben sind hier nicht möglich. Dient zur optischen Zusammenfassung von Dialogelementen. Erzeugt ein Textfeld, in das Eingaben möglich sind. Erzeugt ein Listenfeld, aus dem der Benutzer eine Option auswählen kann. Erzeugt ein Kombinationsfeld aus Listen- und Textfeld. Erzeugt eine grafische Schaltfläche. Erzeugt ein grafisches Kontrollfeld. Erzeugt eine Schaltfläche zur Dateiauswahl. Erzeugt ein Datumsfeld. Wenn Sie das Feld mit der Datenbank verknüpfen, können Sie Datumsfelder aus der Datenbank anzeigen lassen. Erzeugt ein Zeitfeld. Wenn Sie das Feld mit der Datenbank verknüpfen, können Sie Zeitfelder aus der Datenbank anzeigen lassen. Erzeugt ein numerisches Feld. Erstellt ein formatiertes Feld. Tabelle 7.1 Formularelemente von StarOffice 342 Realisierung von Benutzerschnittstellen

95 Wenn Sie ein Formluarelement auf der Oberfläche platziert haben, werden diesem anschließend über das Kontextmenü (rechte Maustaste) über den Menüpunkt Kontrollfeld entsprechende Eigenschaften zugewiesen. Das Kontextmenü eines Formularelements weist die Reiter Allgemein, Daten und Ereignisse auf. Unter Allgemein (siehe Abbildung 7.13) haben Sie die Möglichkeit, das grundsätzliche Verhalten des jeweiligen Kontrollelements einzustellen. Dies sind z.b. die Reihenfolge auf dem Formular (falls Sie die Felder mit TAB wechseln) oder die Hintergrundfarbe. Formularfeld Eigenschaften zuweisen Abbildung 7.13 Allgemeines Verhalten eines Formularelements definieren Formulare und Berichte mit Desktop-Programmen erstellen 343

96 Datenfeld zuweisen Unter Daten (siehe Abbildung 7.14) befindet sich die Zuordnung zum gewünschten Datenfeld. Hier werden über das Dropdown- Feld alle Datenfelder Ihrer Datenbank aufgelistet. Wählen Sie das gewünschte Datenfeld hier aus. Die Anzeige des jeweiligen Feldinhalts oder die Speicherung von Änderungen übernimmt StarOffice automatisch. Mit Leere Zeichenfolge ist NULL legen Sie fest, wie leere Eingaben behandelt werden. Bei Ja werden leere Eingaben als undefinierter Wert behandelt, bei Nein als leere Zeichenkette. Nähere Informationenen zu NULL-Marken erhalten Sie in Abschnitt ,»NULL- Marken«. Wenn Sie die Option Filtervorschlag auf Ja setzten, kann bei einer späteren Suche über den Filtermodus aus den real vorkommenden Werten ausgewählt werden. Abbildung 7.14 Unter Daten wird die Zuordnung von Datenbankfeld und Formularelement vorgenommen Unter Ereignisse findet sich die Möglichkeit, Makros zu bestimmten Ereignissen wie z.b. Modifizierung des Inhalts oder Fokusverlust zuzuweisen. StarOffice verfügt mit der integrierten Makrosprache StarBasic über Möglichkeiten, weitere Abläufe zu unterstützen. Es lassen sich also damit in entsprechendem Umfang Desktop- Anwendungen auf StarOffice-Basis realisieren. Um ein Formular zu testen, müssen Sie den Entwurfsmodus ausschalten. Dies erfolgt über die Formularfunktion Entwurfsmodus an/aus oder indem Sie das Icon Datei bearbeiten (siehe Abbildung 7.15 [9]) anklicken. 344 Realisierung von Benutzerschnittstellen

97 Abbildung 7.15 Ein fertiges Formular unter StarOffice 5.2 Der Benutzer findet in der unteren Leiste Funktionen für die Navigation, Bearbeitung und Suche der Datensätze. Folgende Funktionen stehen zur Verfügung (Nummern entsprechend Abbildung 7.15): Navigation in Formularen [1]Erster, vorheriger, nächster, letzter Datensatz: Hiermit können Sie zwischen verschiedenen Datensätzen wechseln. [2]Datensatz speichern: Wenn Sie den Datensatz wechseln, wird automatisch gespeichert. [3]Rückgängig Dateneingabe: Macht die Eingabe rückgängig. [4]Neuer Datensatz: Erzeugt einen neuen leeren Datensatz. [5]Datensatz löschen: Löscht den aktuellen Datensatz. [6]Aktualisieren: Liest alle Informationen neu ein. [7]Datensatz suchen: Hier können Sie über einen eigenen Dialog Datensätze suchen. [8]Formularbasierter Filter: Das Formular wird geleert und dient als Suchmaske. Formulare und Berichte mit Desktop-Programmen erstellen 345

98 Formularentwurf gegen Änderungen schützen Wenn ein Formular komplett fertig ist, besteht der letzte Arbeitsschritt darin, das Formular dem oder den jeweiligen Benutzern zur Verfügung zu stellen. Sie müssen das Formular so speichern, dass Im Entwurfsmodus öffnen deaktiviert ist. Wichtig ist dann weiterhin, dass nicht jeder Benutzer Änderungen am Formularentwurf durchführen kann. Um dies zu erreichen, müssen Sie über das Betriebssystem die jeweilige Datei mit einem Schreibschutz versehen. Der Benutzer kann dann keine Änderungen am Formularentwurf vornehmen. Berichte mit StarOffice erstellen Während Formulare insbesondere zur Vereinfachung von Datenerfassung und Datenabfrage benötigt werden, sind Berichte für den formatierten Ausdruck von Daten zuständig. Im Folgenden werden die notwendigen Schritte für die Erstellung eines Berichts in StarOffice dargestellt: Öffnen Sie die gewünschte Datenbank. Klicken Sie auf Berichte und wählen im Kontextmenü (rechte Maustaste) Neu Bericht. Für Berichte wird (anders als bei den Formularen) immer der Autopilot verwendet. Wählen Sie die Datenquelle und die gewünschten Felder aus (siehe Abbildung 7.16). Im nächsten Dialog können Sie das oder die Felder wählen, nach denen der Bericht gegliedert werden soll. Markieren Sie hierfür die gewünschten Felder und klicken Sie auf die Schaltfläche mit dem Pfeil nach rechts. Die Sortierung des Berichts nach bis zu vier Feldern legen Sie im nächsten Dialog fest. Der Dialog Stilauswahl gibt die Möglichkeit, die Formularausrichtung (Hochformat, Querformat) festzulegen sowie aus verschiedenen Berichtsstilen zu wählen. Abschließend können Sie noch aus verschiedenen Formatvorlagen wählen. 346 Realisierung von Benutzerschnittstellen

99 Abbildung 7.16 Auswahl der Felder für den Bericht StarOffice legt Ihnen jetzt einen Standardbericht an, der aber in der Regel noch nachbearbeitet werden muss. Dieser Standardbericht ist wie ein Textdokument zu behandeln. Berichtsentwurf Abbildung 7.17 Ein Bericht unter StarOffice mit MySQL-Daten Formulare und Berichte mit Desktop-Programmen erstellen 347

100 Sie können entsprechende Textformatierungen oder Farbzuweisungen vornehmen. Um einen Bericht zu bearbeiten, rufen Sie zu diesem Bericht im Kontextmenü (rechte Maustaste) den Befehl Berichtsentwurf auf (siehe Abbildung 7.17) Formulare und Berichte mit MS Access erstellen Nach dem gleichen Prinzip können auch unter MS Access Formulare und Benutzeroberflächen für MySQL erzeugt werden. Im Folgenden wird anhand von Access 2000 gezeigt, wie das praktisch durchgeführt wird. Bei Access ist die Anbindung einer MySQL-Datenbank über ODBC sogar noch etwas überschaubarer. Prinzip dabei ist, dass die Tabellen einfach geöffnet werden und anschließend mit ihnen in Access weitergearbeitet wird. Die Einbindung einer MySQL-Datenbank in Access führen Sie wie folgt durch: Installieren und konfigurieren Sie Ihren MySQL-ODBC-Treiber. Die Installation wurde in Abschnitt 3.5.8,»Datenbankzugang über ODBC einrichten«, beschrieben. Legen Sie eine neue Datenbank über die Menüpunkte Datei und Neu (STRG+N) an und geben dieser Datenbank einen Namen Ihrer Wahl. Öffnen Sie anschließend über den Menüpunkt Datei Externe Daten Verknüpfen oder das Kontextmenü der rechten Maustaste Tabellen verknüpfen die Tabellen der MySQL-Datenbank. Hierfür ist als Dateityp ODBC Databases zu wählen. Es öffnet sich dann ein Dialog zur Auswahl der Datenquelle. Bei richtiger Installation Ihres MySQL-ODBC-Treibers sollte unter Computerdatenquelle die von Ihnen eingerichtete DNS erscheinen und von Ihnen ausgewählt werden. Je nach DNS sollten dann die Tabellen der eingerichteten Datenbank zur Auswahl erscheinen. Falls hier nicht die gewünschten Tabellen erscheinen oder Fehler bezüglich der Datenbankverbindung auftreten, überprüfen Sie bitte noch einmal die Definition Ihrer DNS. Selbstverständlich muss in diesem Moment auch die MySQL-Datenbank verfügbar sein. In diesem Dialog können Sie einzelne Tabellen, eine Auswahl von Tabellen (durch Halten der STRG-Taste können mehrere 348 Realisierung von Benutzerschnittstellen

101 Tabellen selektiert werden) oder alle Tabellen (über Alle auswählen) auswählen. Abbildung 7.18 Auswahl von Tabellen der MySQL-ODBC-Datenquelle in MS Access Nach dem Klicken auf OK werden Ihnen Tabellen als Verknüpfung angezeigt. Beim Verknüpfen überprüft Access die Tabellen noch einmal. Gegebenenfalls werden Sie aufgefordert, z.b. einen Primärschlüssel zu vergeben. Sie können jetzt mit dieser Verknüpfung weiterarbeiten. Da die Informationen zur Verknüpfung gespeichert sind, müssen Sie später immer nur die entsprechende Datenbank unter Access öffnen. Wenn die Einbindung in eine Access-Datenbank durchgeführt worden ist, können Sie mit der eigentlichen Formularbearbeitung beginnen. Im Datenbankfenster Objekte wählen Sie Formulare aus. Access bietet Ihnen dort die Möglichkeit, neue Formulare entweder in der Entwurfsansicht oder über einen Assistenten zu erstellen. Über den Formular-Assistenten können Sie menügesteuert ein Formular anlegen. Access fragt Sie hierbei nach den Feldern, die Sie im Fomular verwenden wollen, nach dem Layout (Anordnung der Felder), dem Format (Optik) sowie dem Titel. Wenn Sie sich des Formular-Assistenten bedienen, sollten Sie bei der Auswahl der Felder gleich deren Reihenfolge beachten, d.h., die Felder auch in der gewünschten Reihenfolge auswählen. In der Regel müssen Sie diesen Standardentwurf jedoch nachbearbeiten, weil die Größe von einzelnen Elementen oder deren Position auf dem Layout noch verbessert werden kann. Formulare Formular-Assistent Formulare und Berichte mit Desktop-Programmen erstellen 349

102 Abbildung 7.19 Formular-Assistent von MS Access Entwurfsansicht Sie können Formulare unter MS Access im Entwurfsmodus ändern, ergänzen oder überarbeiten. Wenn Sie ein Formular ohne den Assistenten anlegen, ist das Formular zunächst leer. Die Werkzeuge für die Formularbearbeitung sind die Toolbox sowie das Kontextmenü des jeweiligen Elementes. Falls die Toolbox nicht sichtbar sein sollte, können Sie diese über den Menüpunkt Ansicht Toolbox oder über das entsprechende Icon in der Symbolleiste aktivieren. Abbildung 7.20 Die Toolbox von MS Access zur Definition von Formularelementen 350 Realisierung von Benutzerschnittstellen

103 Die Toolbox hält folgende wichtige Formularelemente bereit: Formularelement Bezeichnung Textfeld Optionsgruppe Umschaltfläche Optionsfeld Kontrollkästchen Listenfeld Kombinationsfeld Befehlsschaltfläche Beschreibung Einfache Textinformation. Keine Anbindung von Datenfeldern möglich Anzeige eines Textfeldes. Textfeld kann ein Datenbankfeld sein. Fasst verschiedene Optionsfelder zur einer gemeinsamen Gruppe zusammen. Eine Umschaltfläche kann den Zustand»gedrückt«oder»nicht gedrückt«annehmen. Erzeugt ein Optionsfeld. Der Anwender hat die Auswahl zwischen verschiedenen Optionen. Über eine Optionsgruppe können verschiedene Optionsflächen zusammengefasst werden. Diese müssen dann über die gleiche Name-Eigenschaft verknüpft werden. Ankreuzfeld für Ja/Nein-Optionen. Ein Listenfeld besteht aus einer oder mehreren Zeilen. Kombination aus Listenfeld und Textfeld. Führt bei Klicken einen definierten Befehl aus. Tabelle 7.2 Übersicht über Formularelemente von MS Access Außer diesen erwähnten Formularelementen kennt MS Access noch eine Reihe weiterer Formularelemente wie z.b. Bilder. Da hier aber das Prinzip der Anbindung von MySQL-Datenbanken im Vordergrund steht, wird darauf nicht weiter eingegangen. Wenn Sie ein Formularelement auf der Oberläche platziert haben, stehen Ihnen im Kontextmenü (rechte Maustaste) unter Eigenschaften verschiedene Optionen zur Verfügung, um Eigenschaften des Elements festzulegen. Um ein Formularelement mit einem Feld der MySQL-Datenbank zu verknüpfen, wählen Sie unter Steuerelementinhalt das gewünschte Datenfeld aus. Formulare und Berichte mit Desktop-Programmen erstellen 351

104 Abbildung 7.21 Festlegen von Eigenschaften über das Kontextmenü eines Formularelements 352 Realisierung von Benutzerschnittstellen

105 Abbildung 7.22 Ein fertiges Formular unter MS Access Den Formularen stehen Navigations- und Suchmöglichkeiten zur Verfügung. Die Nummern in Abbildung 7.22 bezeichnen folgende Optionen: Navigation in Formularen [1]Erster, vorheriger, nächster, letzter Datensatz. Hiermit können Sie zwischen verschiedenen Datensätzen wechseln. [2]Neuer Datensatz [3]Datensatz löschen [4]Formularbasierte Suche [5]Suche 7.4 Programmierung von Benutzerschnittstellen Überblick Falls Sie Internet-/Intranetanwendungen oder eigenständige Programme mit einer MySQL-Datenbank im Hintergund erstellen wollen, ist es notwendig, dies über eigenständige Programmierung zu lösen. MySQL verfügt über eine Reihe von Schnittstellen (APIs) zu Programmiersprachen. Hierzu gehören die verbreiteten Programmier- Programmierung von Benutzerschnittstellen 353

106 sprachen C/C++, PHP, Perl und Java, aber auch Python, Tcl oder Eiffel. Verschiedene Programmierschnittstellen wurden in Abschnitt 3.7,»Programmierschnittstellen«, vorgestellt. Die Möglichkeit, über ODBC andere Programme anzubinden, wurde bereits in Abschnitt 3.5.8,»Datenbankzugang über ODBC einrichten«, bzw. Abschnitt 7.2.2,»Daten über ODBC weiterverarbeiten«, erläutert. Wer über entsprechende Programmierkenntnisse verfügt, kann mit Hilfe dieser Schnittstellen eine MySQL-Datenbank komplett in andere Anwendungen einbinden. Da MySQL nur spartanische Werkzeuge für Dateneingabe- und -pflege anbietet, wird man bei solchen Anwendungen, die auch von nur durchschnittlich mit Computerhandhabung vertrauten Leuten bedient werden sollen, um die Programmierung von Benutzerschnittstellen nicht herumkommen. Aber die Aufgabe ist nicht so schwierig, wie sie auf den ersten Blick erscheint. So lassen sich z.b. mit PHP in Verbindung mit HTML relativ schnell brauchbare Ergebnisse erzielen. Grundfunktionen der APIs Grundsätzlich sind die Funktionen der APIs zu MySQL überschaubar. Die wesentlichen Aufgaben, die mit Hilfe der APIs erledigt werden müssen, sind die Verbindung zur Datenbank aufnehmen, einschließlich der Übergabe von Benutzerkennungen, die Ausführung von SQL-Kommandos, die Ergebnisse der SQL-Kommandos speichern und auswerten. Zur Realisierung einer Benutzerschnittstelle benötigen Sie außerdem die Funktionen, um mit dem Benutzer kommunizieren zu können. In der Regel sind dies grafische Oberflächenelemente. Dabei können dann prinzipiell noch einmal die beiden Fälle einer Anwendung mit eigener Oberfläche oder einer browserbasierten Anwendung unterschieden werden. Programmiersprachen In der Übersicht lassen sich die verschiedenen Programmiersprachen in Bezug auf die Realisierung von Benutzeroberflächen folgendermaßen charakterisieren: PHP Grafische Oberfläche wird vom Browser zur Verfügung gestellt. Anbindung an Webserver notwendig. 354 Realisierung von Benutzerschnittstellen

107 Java Eigenständige Oberflächengestaltung. Über Applets können Java-Programme auch in Browsern ausgeführt werden. Perl Grafische Oberfläche wird vom Browser zur Verfügung gestellt. Anbindung an Webserver notwendig. C/C++ Welche Möglichkeiten der Oberflächengestaltung existieren, hängt vom jeweiligen Compiler ab. Eine Möglichkeit, mit dem C++-Builder Programme zu realisieren, ist in diesem Buch in Kapitel 10,»Anwendungsentwicklung unter Windows«, dargestellt PHP Einen einführenden Überblick über die Funktionsweise der Schnittstelle zu PHP gab es bereits in Abschnitt 3.7.2,»PHP«. Im Folgenden wird das Thema in Bezug auf die Erzeugung von Benutzerschnittstellen vertieft. Um die Funktionsweise von PHP noch besser darzustellen, wird der eigentlichen Besprechung der Erstellung von Benutzerschnittstellen ein allgemeines PHP-Beispiel vorangestellt. Da dieses Buch keine umfassende Einführung in PHP sein kann, sollen in diesem Zusammenhang nur die wichtigsten Prinzipien für die Arbeit mit MySQL dargestellt werden. PHP-Funktionen PHP verfügt über Funktionen, mit denen die Verbindung zur Datenbank hergestellt werden kann, Abfragexn an den Datenbankserver gesendet werden können und das Ergebnis dieser Anfrage in einem Resultset gespeichert und weiterverarbeitet werden kann. Die wichtigsten Funktionen, die PHP für den Zugriff auf MySQL anbietet, sind in der folgenden Tabelle im Überblick dargestellt: PHP-Funktionen für den Datenbankzugriff Funktion mysql_affected_rows mysql_change_user Beschreibung Gibt die Anzahl der Datensätze zurück, die durch die letzte MySQL-Funktion betroffen sind. Ändert den Benutzer für die aktuelle Verbindung. Tabelle 7.3 Wichtige PHP-Befehle für die Anbindung an MySQL Programmierung von Benutzerschnittstellen 355

108 Funktion mysql_close mysql_connect mysql_pconnect mysql_create_db mysql_data_seek mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_fetch_array mysql_fetch_field mysql_fetch_length mysql_fetch_object mysql_fetch_row mysql_field_name mysql_field_len mysql_field_type mysql_free_result mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_tables Beschreibung Schließt die MySQL-Verbindung. Öffnet eine Verbindung zum MySQL-Server. Erzeugt eine MySQL-Datenbank. Bewegt den internen Zeiger im Resultset. Sendet eine MySQL-Abfrage. Löscht eine MySQL-Datenbank. Gibt die Fehlernummer der letzten MySQL- Funktion zurück. Gibt die Fehlermeldung der letzten MySQL- Funktion zurück. Gibt einen Datensatz als Array zurück. Gibt die Feldinformation (Name, Datentyp u.a.) eines Resultsets zurück. Gibt die Länge der Felder in einem Resultset als Array zurück. Erzeugt ein Resultset als Objekt. Gibt einen Datensatz als Array zurück; im Gegensatz zu mysql_fetch_array wird kein zusätzlicher Index gebildet. Gibt den Namen eines definierten Feldes in einem Resultset zurück. Gibt die Länge eines definierten Feldes zurück. Gibt den Typ eines definierten Feldes im Resultset zurück. Gibt den Speicher des Resultsets frei. Gibt die Datensatz-ID des zuletzt mit INSERT eingefügten Datensatzes zurück. Listet alle verfügbaren Datenbanken auf. Listet die Felder eines Resultsets auf. Listet alle Tabellen einer MySQL-Datenbank auf. Tabelle 7.3 Wichtige PHP-Befehle für die Anbindung an MySQL (Forts.) 356 Realisierung von Benutzerschnittstellen

109 Funktion mysql_num_fields mysql_num_rows mysql_query mysql_result mysql_select_db mysql_tablename Mysql_unbuffered_query Beschreibung Gibt die Anzahl an Feldern in einem Resultset zurück. Gibt die Anzahl an Datensätzen eines Resultsets zurück. Sendet einen MySQL-Befehl. Gibt den Inhalt eines definierten Datensatzes zurück. Wählt eine MySQL-Datenbank aus. Gibt den Tabellennamen für ein Feld zurück. Sendet einen MySQL-Befehl, ohne das Ergebnis zu puffern. Tabelle 7.3 Wichtige PHP-Befehle für die Anbindung an MySQL (Forts.) Das Prinzip zur Nutzung von MySQL mit PHP ist also übersichtlich. Es wird eine Verbindung zur Datenbank aufgebaut, es können beliebige MySQL- und SQL-Befehle an den MySQL-Datenbankserver geschickt und Rückgaben des MySQL-Servers in Resultsets gespeichert werden, deren Informationen dann weiterverarbeitet werden können. Beispiel: Internet-Nachrichten abrufen und speichern In einem ersten weiterführenden Beispiel sollen einmal die Möglichkeiten von PHP erklärt werden. PHP ist eine Programmiersprache, die sehr stark an Inter- und Intranetbedürfnisse angepasst ist. Dementsprechend lassen sich mit einfachen Befehlen sehr effektive Prozesse programmieren. Im folgenden Beispiel wird aus dem Internet eine Nachrichtendatei, in diesem Fall die bekannten Heise-News, geholt, angezeigt und in einer MySQL-Datenbank gespeichert. Es ist ein kurzes, aber dennoch eindrucksvolles Beispiel dafür, wie effektiv sich mit PHP und MySQL Internetanwendungen realisieren lassen. CD: grab_heise.php news.sql Programmierung von Benutzerschnittstellen 357

110 Abbildung 7.23 Das Beispielprogramm holt sich die neuesten Nachrichten des Heise-Newstickers, zeigt diese im Browser an und speichert sie in einer MySQL- Datenbank (unten). Realisierungsweg RDF-Nachrichtendatei Welche Aufgaben sind für dieses Beispiel zu erfüllen? Die Datei mit den Nachrichten muss über das Internet geholt werden (Schritt 1). Der Inhalt dieser Datei muss so aufbereitet werden, dass er in der MySQL-Datenbank gespeichert werden kann (Schritt 2). Die Informationen müssen im Browserfenster angezeigt werden (Schritt 3). Die Daten müssen in der MySQL-Datenbank gespeichert werden (Schritt 4). Der Heise-Verlag stellt die aktuellen Nachrichten als Metainformationsdatei, eine so genannte RDF-Datei (Resource Description Framework), zur Verfügung. Die Datei enthält also die Nachrichteninformationen in komprimierter Form. 358 Realisierung von Benutzerschnittstellen

111 In Bezug auf die Nutzungsbedingungen dieser Datei sei hier noch einmal ausdrücklich erwähnt, dass dieses Beispiel nur zu Demonstrationszwecken dient. Bitte beachten Sie die Nutzungsbedingungen von Heise ( für diese Nachrichten. Schritt 1: RDF-Datei über das Internet holen Die aktuelle Datei wird dabei über folgende Routinen gespeichert. Listing 7.2 RDF-Datei holen $s = stat("heise.rdf"); if(!$s $s[9] < time()-1800) { $page = file( " $page = implode("", $page); fwrite(fopen("heise.rdf","w"), $page); } else { $page = file("heise.rdf"); $page = implode("", $page); } Da die Datei nicht bei jedem Aufruf neu geholt werden soll, wird über stat geprüft, ob sie älter als 30 Minuten ist. Wenn ja, wird die Datei neu vom Heise-Server geholt und gespeichert. Schritt 2: Inhalt der Nachrichtendatei aufbereiten Die Datei muss anschließend in einzelne Datenfelder aufbereitet werden, um die Informationen in der MySQL-Datenbank speichern zu können. Hierzu wird die Datei nachbehandelt. Über str_ replace werden überflüssige Elemente entfernt, strip_tags eliminiert unnötige HTML-Elemente, und trim entfernt Leerzeichen. Mit explode wird die Datei in die einzelnen Bestandteile Nachrichtentitel ($title) und Link ($url) getrennt. Listing 7.3 Inhalt aufbereiten $page = str_replace ("</item>", "", $page); $page = str_replace ("</link>", "", $page); Programmierung von Benutzerschnittstellen 359

112 $splices = explode ("<item>", $page); for ($i = 1; $i < count($splices); $i++){ $link = explode("<link>",$splices[$i]); $link[1] = strip_tags($link[1]); $headline = str_replace ("<title>", "", $link[0]); $headline = str_replace ("</title>", "", $headline); $title[$i] = trim($headline); $url[$i] = trim($link[1]); Schritt 3: Inhalt der Datei im Browser ausgeben In den Arrays $url und $title sind jetzt die Informationen in der benötigten Form gespeichert. Für die Browserausgabe werden sie im HTML-Format ausgegeben. Listing 7.4 Inhalt ausgeben echo "<A HREF=".$url[$i]." TARGET=_NEW>". $title[$i]."</ A><BR>"; Schritt 4: Information in MySQL speichern Der letzte Schritt besteht darin, die Information in der MySQL- Datenbank zu speichern. Verbindungsaufbau Hierzu muss im ersten Schritt eine Verbindung zum MySQL-Server hergestellt werden. Dies kann am Anfang des Skriptes erfolgen. Mit $conn = mysql_connect('localhost','user','passwort') wird eine Verbindung zur MySQL-Datenbank hergestellt. Als Parameter benötigt mysql_connect den host, den Benutzer und dessen Passwort. Um eine erfolgreiche Verbindung zur Datenbank aufzubauen, muss also bereits ein Benutzer angelegt sein. Falls die MySQL-Datenbank auf dem gleichen Rechner wie PHP läuft, kann als Hostname localhost verwendet werden. mysql_pconnect versus mysql_ connect PHP kennt noch einen zweiten Befehl zur Herstellung einer Verbindung zur MySQL-Datenbank. Der Befehl lautet: 360 Realisierung von Benutzerschnittstellen

113 Listing 7.5 Datenbankverbindung aufbauen $conn = mysql_pconnect('localhost','user','passwort') Zu mysql_connect bestehen hierbei zwei Unterschiede: Eine Verbindung wird nicht geschlossen, wenn das PHP-Skript abgearbeitet ist, sondern sie bleibt weiterhin erhalten. Besteht bereits eine offene Verbindung, öffnet mysql_pconnect keine weitere Verbindung, sondern benutzt die bereits bestehende. Bei erfolgreichem Verbindungsaufbau gibt mysql_connect eine Connection-ID zurück, gelingt der Verbindungsaufbau nicht, wird FALSE zurückgegeben. Falls der Verbindungsaufbau nicht erfolgreich ist, sollten Sie die Fehlermeldung analysieren. Der Grund hierfür kann z.b. in der Angabe falscher Verbindungsdaten liegen. Mit Access denied for user: 'username@localhost' (Using password: NO) werden z.b. unbekannte Benutzer abgewiesen. Bei Unknown MySQL Server Host 'Hostname' (2) wird der Zielrechner nicht gefunden. Falls Sie auf ein solches Problem stoßen, kann die Verbindung außerhalb von PHP z.b. mit dem Kommandozeilenwerkzeug mysql getestet werden. Sie können grundsätzlich mehrere Datenbankverbindungen unter unterschiedlichen Namen öffnen. So können mit Listing 7.6 Mehrere Datenbankverbindungen öffnen $conn1 = mysql_connect ('MySQL-Server1','user', 'passwort'); $conn2 = mysql_connect ('MySQL-Server2','user', 'passwort'); zwei Verbindungen definiert werden. Damit ist es z.b. möglich, auf zwei verschiedenen Datenbanken Informationen zu speichern oder abzurufen. Programmierung von Benutzerschnittstellen 361

114 Hinzuweisen ist an dieser Stelle noch darauf, dass die Verbindungsinformationen aus Sicherheitsgründen nicht direkt in den mysql_ connect-befehl geschrieben werden, sondern als Variablen übergeben werden sollten. Falls nämlich einmal der PHP-Interpreter auf dem Webserver, aus welchen Gründen auch immer, ausfallen sollte, würden die Verbindungsinformationen im Klartext erscheinen und somit bekannt werden. Man verpackt die Verbindungsinformation deshalb in eine eigene Datei, die z.b. folgenden PHP-Code enthält: Listing 7.7 Verbindungsinformationen <?php $host = 'Zielrechner'; $user= 'Benutzername'; $password = 'Benutzerpasswort';?> Über ein include wird diese Datei dann in den Quellcode eingebunden, und die Verbindungsdaten werden nur noch als Variablen übergeben. Datenbank auswählen Listing 7.8 Einbinden der Verbindungsinformationen include '/Pfad/nicht/im/Webserverbaum/conn.inc'; $conn = mysql_connect($host,$user,$password); Nachdem die Verbindung steht, wird eine Datenbank mit dem Befehl mysql_select_db("news"); ausgewählt. Hier ist selbstverständlich notwendig, dass Sie die Struktur der Datenbank kennen, um die Datenbank, Tabellen und Felder richtig ansprechen zu können. Sie sehen also, dass zum Aufbau der Verbindung zur Datenbank zwei Befehle ausreichend sind. Die Struktur der Datenbank für dieses Programm sieht wie folgt aus: Listing 7.9 Tabelle anlegen mysql>create TABLE news ( ID int NOT NULL auto_increment, 362 Realisierung von Benutzerschnittstellen

115 ); meldung varchar(200), link varchar(200), PRIMARY KEY (ID) Bei einer bestehenden Datenbankverbindung können anschließend mit mysql_query beliebige SQL-Kommandos, die MySQL bekannt sind, abgesetzt werden. In diesem Fall werden die Meldungen mit ihren Links in die Datenbank eingefügt. Information in MySQL speichern Listing 7.10 Meldungen in Datenbank einfügen mysql_query("insert INTO news (meldung, link) VALUES ('$title[$i]', '$url[$i]')"); Abschließend wird die Datenbankverbindung noch mit mysql_close($conn); geschlossen. Die PHP-Funktionen werden in den HTML-Code eingebaut. Mit <?php <PHP-Code>?> kann der PHP-Code an beliebiger Stelle und beliebig oft eingefügt werden. Sie können also sehr bequem HTML- Code und PHP-Code in einer Datei mischen. Der PHP-Teil wird dann vom entsprechenden PHP-Interpreter automatisch übersetzt. Integration von PHP-Code in HTML Das gesamte Listing sieht wie folgt aus: Listing 7.11 Nachrichten abrufen und speichern (vollständiges Listing) <html> <head> <title>php-beispiel</title> </head> <body> <B> Die neuesten Nachrichten des Heise-Newstickers </B><BR><BR> <?php $conn = mysql_connect('localhost','user', 'passwort') or die ( "Fehler: Verbindung zur Datenbank"); mysql_select_db("news") or die ( "Select fehlgeschlagen"); Programmierung von Benutzerschnittstellen 363

116 $s = stat("heise.rdf"); //Falls die Datei älter als 30 Minuten ist if(!$s $s[9] < time()-1800) { $page = file( " $page = implode("", $page); fwrite(fopen("heise.rdf","w"), $page); } else { $page = file("heise.rdf"); $page = implode("", $page); } $page = str_replace ("</item>", "", $page); $page = str_replace ("</link>", "", $page); $splices = explode ("<item>", $page); for ($i = 1; $i < count($splices); $i++) { $link = explode("<link>",$splices[$i]); $link[1] = strip_tags($link[1]); $headline = str_replace ("<title>", "", $link[0]); $headline = str_replace ("</title>", "", $headline); $title[$i] = trim($headline); $url[$i] =trim($link[1]); // in $s[9]: letzte Änderungszeit if(!$s $s[9] < time()-1800) { mysql_query("insert INTO news ". "(meldung, link) ". "VALUES ('$title[$i]', '$url[$i]')"); } echo "<A HREF=". $url[$i]. " TARGET=_NEW>". $title[$i]. "</A><BR>"; } mysql_close($conn);?> </body> </html> 364 Realisierung von Benutzerschnittstellen

117 Benutzerschnittstellen mit PHP Für die Realisierung von Benutzerschnittstellen werden jetzt vor allem Interaktionen mit dem Benutzer nötig. Hierzu gehören z.b. Eingabe- oder Suchfelder. In der Regel werden Benutzerschnittstellen für PHP als Browser-Anwendungen mit HTML realisiert. Zur Erläuterung wird hier das gleiche Formular wie oben verwendet. Sie können so die verschiedenen Möglichkeiten, Benutzerschnittstellen zu erstellen, direkt miteinander vergleichen. Abbildung 7.24 Einfach und effektiv: Für PHP können alle HTML-Oberflächen unabhängig erstellt und anschließend mit den Funktionen von PHP verknüpft werden. Der erste Schritt besteht darin, das Formular in HTML zu entwerfen. Dies kann erst einmal völlig ohne PHP erfolgen. Vorteil dieser Methode ist, dass die grafische Oberflächengestaltung mit voller grafischer Unterstützung erfolgen kann. Abbildung 7.24 zeigt die Oberflächengestaltung mit Hilfe von Dreamweaver. Nachdem das Formular erstellt wurde, folgt die Verknüpfung mit PHP. Folgendes ist dabei zu implementieren: CD: php_kontakte.zip Verbindung zur Datenbank Datensätze anzeigen Programmierung von Benutzerschnittstellen 365

118 Verbindung zur Datenbank Blättern in den Datensätzen Neue Datensätze anlegen und speichern Datensätze löschen Datensätze suchen Die Verbindung zur Datenbank erfolgt wie im oben gezeigten Beispiel und ist immer gleich. Weiter oben wurde schon dargestellt, dass die Passwörter in Anwendungen günstiger als Include-Dateien eingebunden werden. In diesem Beispiel werden Sie aufgrund besserer Übersichtlichkeit in der gleichen Datei gespeichert. Der erste Teil des Quellcodes besteht aus dem HTML-Header und der Verbindung zur Datenbank: Listing 7.12 Verbindung zur Datenbank <html> <head> <title>formular-php Demo</title> <meta http-equiv="content-type" content="text/html; charset=iso "> </head> <body bgcolor="#cccccc" text="#000000"> <h3>kontakte</h3> <?php $conn = mysql_connect('localhost','root','') or die("fehler: Verbindung zur Datenbank"); mysql_select_db("kunden") or die ( "Select der Datenbank fehlgeschlagen");?> <! > </body> </html> Sie können jetzt schon an dieser Stelle das Skript testen und sehen, ob die Datenbankanbindung funktioniert. Hierfür muss das Skript, soweit es nicht schon dort gespeichert ist, auf den Webserver kopiert und über den Browser aufgerufen werden. Datensätze anzeigen Im nächsten Schritt soll erreicht werden, dass Datensätze aus der Datenbank angezeigt werden. Hierfür müssen die Daten über einen SELECT-Befehl aus der Datenbank ausgelesen werden und in einem Resultset gespeichert werden. Der Code hierfür sieht wie folgt aus: 366 Realisierung von Benutzerschnittstellen

119 Listing 7.13 Datensätze anzeigen $sql = "SELECT * from kontakte"; $res = mysql_query($sql,$conn); $row = mysql_fetch_array($res,mysql_both); Über mysql_query wird diese Abfrage an den Datenbankserver geschickt und als Resultset in der Variablen $res gespeichert. Sinnvoll ist es, den SQL-String als separate Variable zu definieren. So bleibt auch bei komplexen SQL-Abfragen die Übersicht gewahrt. Über mysql_fetch_array wird der erste Datensatz in die Variable $row eingelesen. Uns steht also ein Resultset mit dem Ergebnis der Abfrage sowie der Inhalt des ersten Datensatzes in einem Array zur Verfügung. Die Anzeige der Feldinhalte der MySQL-Datenbank erfolgt über die values-eigenschaft des jeweiligen HTML-Form-Objektes, z.b.: HTML mit Datenfeld verknüpfen Listing 7.14 HTML mit Datenfeld verknüpfen <input type="text" name="vorname" value= <?php echo $row['vorname']?>> Sind alle Felder der HTML-Datei so mit der Datenbank verbunden, wird automatisch der erste Datensatz beim Laden des Dokuments angezeigt. Im nächsten Schritt müssen die Anzeige und das Blättern in den Datensätzen programmiert werden. Für das Blättern in den Datensätzen dienen vor-, zurück-, erster- und letzter-schaltflächen. Die Aufgabe besteht also darin, beim Blättern mit vor und zurück den jeweils nächsten oder vorherigen Datensatz anzuzeigen. Bei erster soll der Datensatzzeiger an den Anfang gestellt werden, bei letzter auf den letzten Datensatz. Blättern in den Datensätzen Zur Lösung dieser Aufgabe können die Befehle mysql_data_seek und mysql_num_fields verwendet werden. Mit mysql_data_seek kann der Datensatzzeiger im Resultset frei auf einen beliebigen Datensatz positioniert werden. Die Anzahl der Datensätze im Resultset wird über mysql_num_fields ermittelt. Somit ist es möglich, sich im Resultset vor und zurück zu bewegen. Wir müssen nur den Datensatzzeiger um einen Datensatz vor- oder zurückstellen. Ebenso können wir durch die Kenntnis der letzten Programmierung von Benutzerschnittstellen 367

120 Datensatznummer den Datensatzzeiger an das Ende des Resultsets stellen. In unserem Beispiel sieht das wie folgt aus: Abbildung 7.25 Navigationsleiste des Beispiels Je nachdem, welche Option (vor, zurück, erster, letzter) gewählt wurde, wird der Offset an das Formular zurückgegeben ($PHP_ SELF?offset=) und der Datensatzzeiger vor dem Anzeigen der Daten auf die gewünschte Position gesetzt. Wenn der Datensatzzeiger auf dem ersten bzw. letzten Datensatz steht, werden zurück bzw. vor nicht mehr angezeigt. Die Navigation sieht folgendermaßen aus: Listing 7.15 Navigation echo " <a href=". $PHP_SELF. "?search=". $search. "&offset=0". ">erster </a>"; if ($offset > 0) { echo " <a href=". $PHP_SELF. "?search=". $search. "&offset=". ($offset-1). ">zurück </a>"; } if ($offset < mysql_num_rows($res)-1) { echo " <a href=". $PHP_SELF. "?search=". $search. "&offset=". ($offset+1). ">vor</a>"; } echo " <a href=". $PHP_SELF. "?search=". $search. "&offset=". (mysql_num_rows($res)-1). ">letzter</a>"; Neueingabe von Datensätzen Die nächste zu lösende Aufgabe ist die Neueingabe von Datensätzen. Hierzu muss erst einmal das Formular komplett gelöscht werden. Dies geschieht über den Button Neu, der beim Betätigen das Formulars neu lädt und die Feldeinträge löscht. 368 Realisierung von Benutzerschnittstellen

121 Listing 7.16 Neueingabe von Datensätzen if ($action=="neu") { for ($i=0; $i<mysql_num_fields($res);$i++) { $row[mysql_field_name($res, $i)]= ""; } } Wir erzeugen, obwohl jetzt eine Neueingabe erfolgen soll, trotzdem das Resultset, um jederzeit mit vor und zurück wieder die Datensatznavigation benutzen zu können. Wenn der Button Neu gedrückt wurde, können Daten in das Formular eingegeben und über den Button Speichern in der Datenbank gespeichert werden. Listing 7.17 Daten in MySQL speichern $sql = "INSERT INTO kontakte ("; $sql.= "anrede,titel,vorname,nachname,telprivat, "; $sql.= "faxprivat,familienstand,nameehepartner, "; $sql.= "interessen,firma,abteilung,position, "; $sql.= "telgesch, gesch,faxgesch,plz,ort,land, "; $sql.= "strasse,letzttreffen,letztesupdate"; $sql.= ") VALUES ("; $sql.= "'$anrede','$titel','$vorname','$nachname', "; $sql.= "'$telprivat','$faxprivat','$familienstand', "; $sql.= "'$nameehepartner','$interessen','$firma', "; $sql.= "'$abteilung','$position','$telgesch', "; $sql.= "'$ gesch','$faxgesch', '$plz','$ort','$land', "; $sql.= "'$strasse','$letzttreffen','$letztesupdate')"; mysql_query($sql,$conn); Für das Speichern wird natürlich ein INSERT INTO verwendet. Dieser Befehl ist komplett auszuformulieren, d.h., er muss alle Felder haben, die zurückgeschrieben werden. Mit PHP ist die Definition relativ einfach, weil der Name des HTML-Objektes direkt als Variable an den INSERT-Befehl weitergegeben werden kann. Mit mysql_ query und dem kompletten INSERT-String wird der Datensatz in der Datenbank gespeichert. Programmierung von Benutzerschnittstellen 369

122 Abbildung 7.26 Die komplette Benutzerschnittstelle des Beispiels Datensätze löschen Zum Löschen von Datensätzen steht der Button Löschen zur Verfügung. Um einen Datensatz zu löschen, wird DELETE FROM verwendet. Wichtig ist natürlich, dass der richtige Datensatz gelöscht wird. Die Auswahl erfolgt über die WHERE-Bedingung. Am sichersten ist es hierbei, den Datensatz über den Primärschlüssel zu erkennen und zu löschen. Listing 7.18 Datensätze löschen $sqldel = "DELETE FROM kontakte WHERE id =".$id ; mysql_query($sqldel,$conn); Damit die jeweilige Datensatz-id bekannt ist, muss diese beim Senden des Löschen-Befehls bekannt sein. Dies erfolgt als hidden field im HTML-Formular in der Form: Listing 7.19 ID finden??? echo "<input type='hidden' name='id' value=".$row[0].">"; Datensätze suchen Zum Suchen von Datensätzen kann über ein Textfeld ein Suchbegriff eingegeben werden. Dieser Suchbegriff wird dann, für diesen Fall per unscharfer Suche, mit LIKE in den Feldern vorname, nach- 370 Realisierung von Benutzerschnittstellen

123 name, plz und ort gesucht. Natürlich könnten die Suchfelder über eine entsprechende Erweiterung des SELECT-Befehls erweitert werden. Listing 7.20 Datensätze suchen $sql = "SELECT * FROM kontakte where nachname LIKE '%".$search."%'"; $sql.= " OR vorname LIKE '%".$search."%'"; $sql.= " OR plz LIKE '%".$search."%'"; $sql.= " OR ort LIKE '%".$search."%'"; $res = mysql_query($sql,$conn); In diesem Beispiel wird das komplette Resultset auch bei einem Wechsel des Datensatzes erzeugt. Bei umfangreichen Datenbanken mit vielen Datensätzen ist es möglich, dass hier optimiert werden muss, weil die Performance nicht ausreichend ist. Für die Erstellung von Berichten mit PHP werden wieder die Möglichkeiten des Browsers verwendet. Prinzip dabei ist, dass alle Informationen der Datenbank als HTML im Browser ausgegeben werden. Die Formatierung dieser Ausgabe erfolgt mit den Mitteln von HTML. Berichte mit PHP Perl In Abschnitt 3.7.3,»Perl«, wurde die Installation von Perl erläutert. In diesem Teil des Buches werden jetzt die Möglichkeiten zur Erzeugung von Benutzerschnittstellen mit Perl und MySQL behandelt. Mit Perl verhält es sich ähnlich wie mit PHP. Für die Realisierung von grafischen Benutzerschnittstellen wird ebenfalls am besten ein Browser und HTML verwendet. Mit HTML wird dabei die grafische Benutzeroberfläche erzeugt, und über Perl-Funktionen werden die MySQL-Datenbank oder andere Funktionen angebunden. Die Verarbeitung von HTML-Dateien und deren Inhalt und Variablen erfolgt dabei über CGI-Skripte (Common Gateway Interface), d.h., die Anfragen einer HTML-Datei werden von einem serverseitigen Prozess analysiert und verarbeitet, und die Ergebnisse werden zurückgegeben. PHP kann hier grundsätzlich besser in HTML- Dateien eingebettet werden. Dieser Nachteil wurde von Perl-Ent- CGI Programmierung von Benutzerschnittstellen 371

124 wicklern erkannt, die diesem Umstand mit embperl Rechnung getragen haben. Embperl erlaubt wie PHP die Einbindung von Perl- Code in HTML-Code. Nähere Informationen zu embperl erhalten Sie unter der Webadresse perl.apache.org/embperl/. Perl gehört seit vielen Jahren zu den beliebtesten Programmierbzw. Skriptsprachen unter Unix-/Linuxsystemen. Die ersten dynamischen Webseiten wurden größtenteils mit Perl (CGI-Skripten) realisiert. Entsprechend groß ist der Vorrat an Modulen und Skripts. Wer sich intensiv mit Perl auseinandersetzen möchte, findet im Perl-Archiv unter eine Fülle von Dokumentation, Modulen und Sourcecode für Perl. Im Rahmen dieses Abschnittes soll nun dargestellt werden, wie Schnittstellen mit Perl realisiert werden können. Benötigt wird für diese Lösung ein Webserver, der die CGI-Schnittstelle unterstützt, und ein installiertes Perl. Des weiteren muss selbstreden eine funktionsfähige MySQL-Datenbank installiert sein. Bei Linux-Standarddistributionen wie beispielsweise SuSE ist das in der Regel schon der Fall. Um die CGI-Schnittstelle nutzen zu können, müssen Sie Zugriff auf das Verzeichnis haben, in dem die CGI-Schnittstelle die CGI-Programme erwartet. Unter Apache ist dies z.b. das Verzeichnis cgibin. Bei Internet Service Providern gehören diese CGI-Schnittstellen in der Regel auch zum Standardumfang. Ihnen teilt der ISP dann den Namen des CGI-Verzeichnisses mit. Um die Funktionsweise der CGI-Schnittstelle kennenzulernen, dient am besten das folgende kurze Beispiel. Hier kann der Benutzer in ein Formular eine Eingabe tätigen und über den Senden-Button an das CGI-Skript schicken. Dieses wertet den Eingabestring aus und gibt diesen String zurück. CD: cgi_demo.zip Das Beispiel besteht aus der HTML-Datei (cgi_demo.html) und dem CGI-Skript (cgi_demo.pl). Listing 7.21 HTML-Datei <html> <head> <title>untitled Document</title> </head> 372 Realisierung von Benutzerschnittstellen

125 <body> CGI-Beispiel <form method="post" action="/cgi-bin/cgi_demo.pl"> <input type="text" name="eingabetext"> <input type="submit" name="senden" value="senden"> </form> </body> </html> Das CGI-Skript wird über den Senden-Button innerhalb der HTML- Datei über <form method="post" action="/cgi-bin/cgi_demo.pl"> aufgerufen und übergibt dabei die Variable»eingabetext«. Das folgende CGI-Skript baut wiederum eine HTML-Datei auf und gibt den eingegebenen Wert zurück. Für dieses Beispiel wurde das CGI- Modul zu Hilfe genommen, das uns die Aufgabe vereinfacht. Das CGI-Modul wird über use CGI; eingebunden, und mit $q = new CGI; wird über die Methode new(), die Variablen der GET- und POST- Methoden analysiert und ein neues CGI-Objekt q erzeugt. Auf dieses Objekt werden dafprnn mit header, start_html und end_html Methoden zur Generierung des HTML-Gerüsts angewandt. Die eingegebene Variable ist in $q->param('eingabetext') gespeichert und kann mit einem print-befehl ausgegeben werden. Listing 7.22 Das CGI-Skript??? #!/usr/bin/perl -w use CGI; $q = new CGI; print $q->header; print $q->start_html ("CGI-Demo"); print "Sie haben ".$q->param('eingabetext')." eingegeben"; Programmierung von Benutzerschnittstellen 373

126 print "<BR><BR><A HREF=../htdocs/cgi_demo.html>back</>"; print $q->end_html(); Um jetzt eine Benutzerschnittstelle mit Unterstützung von MySQL- Daten zu erhalten, sind in der Regel die Anbindung an die MySQL- Datenbank und die Erstellung von Benutzerdialogen (Formulare), die auf Daten der Datenbank zugreifen, zu realisieren. Perl-Anbindung an MySQL Um mit Perl die Verbindung zur MySQL-Datenbank herstellen zu können, werden die Funktionen der objektorinetierten DBI/DBD- Module benötigt. Die Verbindung zu MySQL wird mit der Methode connect hergestellt. Die Methode benötigt (wie üblich) die Parameter Datenbank, Host, Benutzer und Benutzerkennwort. Als Perl- Code sieht der Verbindungsaufbau wie folgt aus: Listing 7.23 Verbindungsaufbau use DBI; $dh = DBI->connect ( DBI:mysql:kontakte:localhost,'user','password'); Mitdem folgenden Befehl können Datenbankverbindungen wieder geschlossen werden. Listing 7.24 Verbindung schließen $dh->disconnect; SQL-Befehle Ohne Rückgabewert Nachdem eine Verbindung zum MySQL-Server hergestellt ist, können SQL-Abfragen an den Server gerichtet werden. Hier ist grundsätzlich zu unterscheiden, ob die SQL-Befehle einen Rückgabewert haben. Für SQL-Befehle wie beispielsweise INSERT oder DELETE, die keinen Rückgabewert haben, steht die Methode do zur Verfügung. So würde der folgende Befehl in Perl alle Datensätze mit dem Namen»Meier«löschen. Listing 7.25 Ohne Rückgabewert my $del = $dh->do("delete FROM Anschriften WHERE name = 'Becker'"); 374 Realisierung von Benutzerschnittstellen

127 Für Befehle mit Rückgabewerten, wie es SELECT ist, muss zuerst mit prepare ein Handle erzeugt und anschließend über execute() der Befehl ausgeführt werden. Mit Rückgabewert Listing 7.26 Mit Rückgabewert $dh = $db->prepare ("SELECT * FROM kontakte"); $dh ->execute(); Die Ergebnisse befinden sich jetzt in der Variablen $dh und können weiterverarbeitet werden. Hierzu dienen Befehle, die die Datensatzlisten auswerten. Das folgende Beispiel zeigt, wie die Datensätze mit fetchrow_array ausgegeben werden können. Listing 7.27 Datensätze ausgeben #!/usr/bin/perl -w use DBI; use strict; my $dh = DBI->connect( "DBI:mysql:kontakte:localhost",'user','password') or die "Unable to connect to contacts Database: ". "$dh->errstr\n"; $dh->{raiseerror} = 1; my $sth = $dh->prepare( "SELECT name, vorname FROM kontakte"); $sth->execute or die "Unable to execute query: $dh->errstr\n"; while(@row = $sth->fetchrow_array) { print "$row[0] $row[1]\n"; } $sth->finish; $dbh->disconnect; exit; Formular mit Daten füllen Grundsätzlich können wir das gleiche Verfahren wie im PHP-Beispiel verwenden, um Benutzerdialoge über HTML zu erzeugen. Im Gegensatz zu PHP muss das HTML-Formular allerdings über die CGI-Aufrufe generiert werden. Prinzip ist auch hier, dass HTML- Code und Perl-Code gemischt werden. Programmierung von Benutzerschnittstellen 375

128 Ein einfaches Beispiel, das eine Tabelle erzeugt, sieht als HTML- Code ohne Anbindung an eine MySQL-Datenbank wie folgt aus: Listing 7.28 Tabelle erzeugen <html> <head> <title>perlbeispiel</title> <meta http-equiv="content-type" content="text/html; charset=iso "> </head> <body bgcolor="#ffffff" text="#000000"> <table width="15%" border="0"> <tr> <td>zeile 1</td> </tr> <tr> <td>zeile 2</td> </tr> <tr> <td>zeile 3</td> </tr> <tr> <td>zeile 4</td> </tr> </table> </body> </html> CD: cgi.zip Um jetzt die Einträge aus der Datenbank in die Tabelle zu übernehmen, muss diese HTML-Datei dynamisch gestaltet werden. Der neue Aufbau ist folgendermaßen. Aus der HTML-Datei wird eine CGI-Datei, die an der Dateiendung und an der Einbindung des Perl- Interpreters kenntlich ist (#! /usr/bin/perl w). Am Anfang der Datei wird die Datenbankanbindung deklariert. Listing 7.29 Datenbankanbindung #! /usr/bin/perl -w use CGI; use DBI; 376 Realisierung von Benutzerschnittstellen

129 #Variablen my ($db, $sth, $database, $user, $pass, $name); $database="dbi:mysql:database=liste;host=localhost"; $user ="user"; $pass ="passwort"; $db = DBI->connect($database,$user,$host) ; Die Erstellung des notwendigen HTML-Teils erfolgt jetzt auch über Perl mit Hilfe des bereits oben erwähnten CGI-Moduls. Für den Beginn der Datei benötigen wir den HTML-Header und den Body-Beginn: Listing 7.30 HTML-Teil erstellen??? $query = new CGI; print $query->header; print $query->start_html ("Formulardemo"); Anschließend wird ein SELECT-Befehl formuliert und ausgeführt: Listing 7.31 Abfrage $sth = $db->prepare("select name FROM buchungen"); $sth->execute; Der Inhalt der Abfrage befindet sich jetzt in der Variablen $sth, die anschließend über fetchrow() ausgelesen wird. In einer Schleife werden aus allen Einträgen dann die Tabellenreihen aufgebaut. Listing 7.32 Tabelle aufbauen print "<table WIDTH=\"30%\" Border=\"1\">"; while ($name = $sth->fetchrow()) { print "<tr><td>$name</td></tr>"; } print "</table>"; Beendet wird die Datei mit der Freigabe der Abfrageressourcen sowie dem Disconnect mit der Datenbank. Der Footer der HTML- Datei wird dann wiederum durch die Methode end_html() des CGI-Moduls generiert. $sth->finish(); $dbh->disconnect; print $query->end_html(); Programmierung von Benutzerschnittstellen 377

130 7.4.4 C/C++ Die Möglichkeiten zur Realisierung von Benutzerschnittstellen über die C/C++-Schnittstelle sind abhängig vom eingesetzten C/C++- Compiler sowie vom Betriebssystem. Die Erzeugung von Benutzerschnittstellen mit C/C++ ist eine echte Programmiertätigkeit. Nachteilig für MySQL ist hier, dass keine Einbindungen in Entwicklungstools vorhanden sind. Dem Thema Anwendungsentwicklung unter C mit visuellen Softwarekomponenten ist in diesem Buch eigens Kapitel 10,»Anwendungsentwicklung unter Windows«, gewidmet. Wer sich noch intensiver mit der C/C++-Schnittstelle auseinander setzen möchte, dem sei an dieser Stelle auch noch einmal das Backup-Programm mit C in Abschnitt ,»Programmierung von Hilfsprogrammen für das Backup«, ans Herz gelegt Java MySQL verfügt über Drittanbieter auch über JDBC (Java Database Connectivity)-Treiber und lässt sich damit auch innerhalb von Java- Anwendungen hervorragend einsetzen. Java bietet mit der JDBC-Schnittstelle einen Satz von Klassen und Interfaces, die es erlauben, standardisiert von Java-Programmen auf verschiedene Datenbanken zuzugreifen und mit ihnen zu kommunizieren. Somit können Sie vollständige Java-Applikationen mit einem MySQL-Datenbank-Backend erstellen. In Abschnitt 3.7.4,»Java«, wurde die Installation des Connector/J- Treiber für MySQL bereits erläutert. Hier folgt die Darstellung der Einbindung in Anwendungsprogramme. Aufbau einer Verbindung Der erste Schritt zur Realisierung der Datenbankanbindung besteht im Aufbau einer Verbindung mit der Datenbank. Hierfür werden nur zwei Zeilen Code benötigt. Für die Treiberklassen muss eine neue Instanz erzeugt werden. Der Befehl hierfür ist: Class.forName("org.gjt.mm.mysql.Driver"). newinstance(); 378 Realisierung von Benutzerschnittstellen

131 Anschließend kann eine Verbindung zur Datenbank aufgenommen werden. Die Syntax hierfür lautet: Connection C = DriverManager.getConnection("jdbc:mysql:// <rechner>[:port] /<datenbank>?[?param1=wert1][=wert2]"); Syntax Die folgenden Parameter können hinter dem? folgen: Name Inhalt Default- Wert user Benutzername für die MySQL-Datenbank Keiner password Passwort für den Benutzer Keiner autoreconnect maxreconnects initialtimeout maxrows useunicode characterencoding Bei TRUE versucht der Treiber ein Reconnect bei unterbrochenen Verbindungen. Die Anzahl an Reconnect-Versuchen (nur falls autoreconnect aktiviert ist) Zeit zwischen zwei Reconnect-Versuchen (nur falls autoreconnect aktiviert ist) Maximale Anzahl an Reihen, die zurückgegeben werden. Bei 0 werden alle Reihen zurückgegeben. Der Treiber behandelt Zeichenkette mit dem UNICODE-Zeichensatz. Zeichensatz-Encoding, das bei aktivem useunicode verwendet wird FALSE FALSE None Tabelle 7.4 Parameter für den Verbindungsaufbau Ein einfaches funktionsfähiges Java-Programm zur Herstellung einer Verbindung zu einer MySQL-Datenbank sieht dann wie folgt aus: Listing 7.33 Verbindung mit MySQL-Datenbank import java.sql.*; public class DBConn { public static void main(string[] Args) { String dbname = "org.gjt.mm.mysql.driver"; CD: connect.java Programmierung von Benutzerschnittstellen 379

132 } String url = "jdbc:mysql://localhost/db?user=throll;"; Connection conn = null; try { // Neue Instanz für die Treiberklasse Class.forName(dbname).newInstance(); // Verbindung zur Datenbank herstellen conn = DriverManager.getConnection(url); } catch (InstantiationException ie) { System.err.println( "Instantiation Exception: " + ie); } catch (IllegalAccessException iae) { System.err.println( "Illegal Acces Exception: "+iae); } catch (ClassNotFoundException cnfe) { System.err.println( "Error loading Driver: " + cnfe); } catch (SQLException sqle) { System.out.println( "SQLException: " + sqle.getmessage() ); System.out.println( "SQLState: "+sqle.getsqlstate()); System.out.println( "VendorError: "+sqle.geterrorcode()); } } // Weitere Methoden //[...] Wenn Sie diesen Code mit $>javac connect.java übersetzen, wird ein lauffähiges Java-Programm erzeugt, das Sie mit $>java connect ausführen können. 380 Realisierung von Benutzerschnittstellen

133 Abfrage mit Statements Ist die Verbindung zur MySQL-Datenbank hergestellt, können anschließend zur Abfrage oder Änderung von Daten die Java-Statements abgesetzt werden. Statement-Objekte werden mit der createstatement()-methode unter Zuhilfenahme der vorher erzeugten Verbindung erzeugt. Wenn ein Statement-Objekt erzeugt ist, können darüber SQL-Befehle über die Methode execute- Query(String SQL) abgesetzt werden. Die Rückgabe eines SQL-Befehls wird in einem Resultset gespeichert, für das wiederum Methoden zur Arbeit mit den Daten zur Verfügung stehen. So kann mit ResultSet.next() der Datensatzzeiger um eine Reihe weiter gesetzt werden. Der Inhalt einer Tabellenzelle kann z.b. mit ResultSet.getString(String <Spaltenname>) als String ausgegeben werden. Im konkreten Fall sieht dies so aus: Listing 7.34 Resultat ausgeben try { Statement Stmt = conn.createstatement(); ResultSet RS = Stmt.executeQuery( "SELECT * FROM table"); while (RS.next()) { System.out.println(RS.getString(1)); } // Schließen von ResultSet, Statement und Conection RS.close(); Stmt.close(); Conn.close(); } catch (SQLException E) { System.out.println( "SQLException: " + E.getMessage()); System.out.println( "SQLState: " + E.getSQLState()); System.out.println( "VendorError: " + E.getErrorCode()); } Programmierung von Benutzerschnittstellen 381

134 Wenn Sie aus beiden Teilen ein komplettes Programm erzeugen wollen, setzen Sie diesen Codeteil an die mit //[...] gekennzeichnete Stelle im obigen Quelltext. Das Programm baut dann eine Verbindung zum MySQL-Server auf, selektiert auf der Tabelle mit dem Namen table alle Datensätze und zeigt diese an. Resultset Im Resultset stehen die gültigen Datensätze, die die SQL-Bedingung erfüllen. Der Datensatzzeiger steht dabei vor dem ersten Datensatz. Sie können anschließend mit den von Resultset gebotenen Methoden die Daten ausgeben oder weiterverarbeiten. Auf das obige Beispiel bezogen sind das z.b.: Methoden next() Wechselt den Zeiger auf den nächsten Datensatz. Beim ersten Aufruf steht der Datensatz auf dem ersten Datensatz, beim zweiten Aufruf auf dem zweiten Datensatz etc. getstring(int Spaltenindex) Holt den Inhalt einer definierten Spalte als Java-String. Das Verfahren gleicht damit auch den anderen Programmierschnittstellen von MySQL. Es wird eine Verbindung zur Datenbank aufgebaut und über diese Verbindung beliebige SQL-Befehle abgesetzt. Wenn der SQL-Befehl Rückgabewerte besitzt, können diese in einem Resultset gespeichert werden und anschließend programmseitig weiterverarbeitet werden. Einbindung in Anwendungsprogramme Die oben beschriebene Datenbankanbindung kann je nach Anforderung in jedes beliebige Java-Programm wie z.b. Applets (auf Clientseite) oder Servlets (serverseitig) integriert werden. Die Methoden für den Zugriff auf die MySQL-Datenbank ist dann nur eine von vielen Methoden, die Sie in einem solchen Programm verwenden. MySQL bindet sich hier nahtlos in das Konzept von Java als Programmiersprache des Internets ein. Der MySQL-Server ist in diesem Fall eine Ressource im Netzwerk. Applets und Servlets Bei der Integration einer MySQL-Datenbank über JDBC in Applets ist zu beachten, dass ein solches Applet und damit seine Methoden auf den Client geladen werden. Wenn Sie jetzt ein solches Applet 382 Realisierung von Benutzerschnittstellen

135 mit einer JDBC-Anbindung realisieren, greifen Sie in der Regel bei jedem Datenbankzugriff auf einen entfernten Rechner zu. Hier sind dann insbesondere Performancefragen zu beachten. Bei der Integration einer MySQL-Datenbank über JDBC in Servlets als serverseitige Lösung, ist die Situation ähnlich wie bei PHP oder Perl. Die gesamten Funktionen bzw. Methoden werden serverseitig ausgeführt, an den Client wird nur das Ergebnis der Anfrage einschließlich der Benutzerführung geliefert. Ob Sie dynamische Webseiten mit PHP, Perl oder als Servlets realisieren, hängt von Ihren Vorgaben für die Anwendungsentwicklung ab. Von Seiten der Anbindung an MySQL bezüglich Aufwand und Funktionalität besteht kein entscheidender Unterschied. 7.5 XML Einführung Mit XML (extensible Markup Language) bezeichnet man einen Datenformatstandard für strukturierten Dokumentenaustausch. Dieser Standard wird vom World Wide Web Consortium (W3C, herausgegeben und ist Anfang 1998 in der ersten Version erschienen. XML ist ein relativ einfaches flexibles Textformat zur Vereinfachung von Aufgaben beim elektronischen Publizieren und beim Datenaustausch. In den vergangenen Jahren hat XML eine zunehmende Verbreitung gefunden. Es gehört inzwischen zum guten Ton, dass sich jeder Datenbankhersteller mit dem Prädikat der XML-Unterstützung schmückt. Die wesentlichen Merkmale, die im Zusammenhang von XML und Datenbanken genannt werden können, sind: XML kann zum Datenaustausch verwendet werden. Da XML plattform- und betriebssystemunabhängig ist, kann das Format zum Datenaustausch verwendet werden. Hier kann dann auch Software einbezogen werden, die keine Datenbank ist. Um einen XML-Datenaustausch durchzuführen, muss das Datenbanksystem XML sowohl erzeugen als auch einlesen können. Bei der Ausgabe der Datenbankinhalte ist also eine XML-Datei zu erzeugen. Wenn eine XML-Datei gelesen wird, sind die Informationen in die Tabellenstruktur der Datenbank zu übertragen, d.h., die XML 383

136 Tabellenstruktur muss angelegt werden, damit die Informationen als Datensätze gespeichert werden. XML-Ausgabe zur Informationsbereitstellung im Internet In Abschnitt 7.4.2,»PHP«, wurde das Beispiel des Heise-Newstickers vorgestellt. Hierbei handelt es sich um eine XML-Datei, die aktuelle News permanent über das Internet zur Verfügung stellt. XML für die Erstellung von Internetseiten. Die erweiterten Möglichkeiten von XML zur Erstellung von Internetseiten werden häufig unter dem Stichwort XHTML geführt. Die»nächste Generation«von HTML ist allerdings davon abhängig, dass alle Browser und andere Software die XML-Möglichkeiten unterstützen. Zurzeit ist dies noch nicht der Fall. Auch mit der Version 4.1 hat das Thema XML bei MySQL noch keinen Einzug gehalten. Man findet auf der MySQL-Homepage nur wenige Informationen zu diesem Thema, die sich insbesondere auf Zusatzprogramme beziehen. Nichtsdestotrotz kann man aber auch mit MySQL eine gute XML-Anbindung bewerkstelligen. Man muss dafür eigentlich nur die beste Vorgehensweise kennen und benötigt zusätzlich ein wenig Open Source-Software wie z.b. PHP oder Perl. Zuerst soll an dieser Stelle das XML-Format grundsätzlich vorgestellt werden. Hierfür betrachten wir den Quelltext des in Abschnitt //XXX gezeigten Heise-Newstickers ( heise.rdf). Sie können sich die Datei jederzeit ansehen, indem Sie die URL in Ihrem Browser aufrufen und den dazugehörigen Quellcode betrachten. Im Internet Explorer finden Sie diese Option im Kontextmenü unter Quelltext anzeigen. Die Datei sieht im Aufbau dann wie folgt aus: Listing 7.35 Nachrichtendatei als XML <?xml version="1.0" encoding="iso "?> <rdf:rdf xmlns:rdf=" xmlns=" <item> <title> Neuer Stichproben-Warenkorb enthält DSL-Internetzugang </title> 384 Realisierung von Benutzerschnittstellen

137 <link> </link> </item> <item> <title>us-justiz besetzt Domain-Namen</title> <link> pmz / </link> </item> <item> <title> Grimme-Institut schreibt wieder Online-Preis aus </title> <link> </link> </item> </rdf:rdf> Wer sich ein wenig mit HTML auskennt, wird die Ähnlichkeit der Syntax anhand der Tags wiedererkennen. Wie zu erkennen ist, werden die einzelnen Informationen in benannten Tags geschrieben. In diesem wird jeder Nachrichteneintrag mit <item> eingeleitet und mit </item> geschlossen. Innerhalb des jeweiligen Nachrichteneintrags erhalten die Einzelinformationen jeweils wiederum einen benannten Tag: in diesem Fall einen Titel, der mit <title> begonnen und mit </title> geschlossen wird, und einen Nachrichtenlink, der mit <link> bzw. </link> gekennzeichnet ist. Sie können dieses Schema also auch mit einer Datenbanktabelle vergleichen. Der jeweilige <item>-eintrag stellt einen Datensatz dar. Innerhalb des jeweiligen Datensatzes werden die einzelnen Felder aufgelistet, deren Feldnamen durch die benannten Tags dargestellt werden. XML 385

138 Basis von XML ist die so genannte Standard Generalized Markup Language (SGML), die 1986 als internationaler Standard für die Formatierung von Texten und Dokumenten eingeführt wurde. Bei SGML kann man über eine spezielle Information, die DTD (Document Type Definition), festlegen, wie ein Dokument zu formatieren ist. Es stellte sich nach der Einführung der SGML heraus, dass das System insgesamt zu komplex ist, um breite Anwenderkreise zu erreichen. Um einen Dokumentenaustausch über das Internet ohne die Begrenzungen von HTML durchzuführen, wurde deshalb XML aus der Taufe gehoben. Die Anforderungen an ein XML-Dokument sind einfacher gehalten als die an ein SGML-Dokument. Die wichtigsten Vorgaben bei der Erstellung von XML-Dokumenten sind: Eine DTD zur Definition der Dokumentenstruktur ist nicht zwingend notwendig. Alle Elemente müssen mit einleitenden und schließenden Tags ausgestattet sein (z.b. <title></title>). Der Aufbau muss hierachisch sein. Wenn ein Element innerhalb eines anderen Elements beginnt, muss es dort auch aufhören. Ein Attribut darf nur einmal in einem Element vorkommen. Es muss genau ein root-element vorhanden sein. Alle verwendeten Elemente müssen auch deklariert sein XML-Dateien mit mysql und mysqldump erstellen Version 4.0 XML-Ausgabe mit mysql Wenn Sie eine XML-Datei aus Ihrer Datenbank erstellen wollen, stellt sich also die Aufgabe, die Daten aus der Datenbank in eine entsprechende XML-Struktur zu überführen. Bei MySQL lässt sich dies ab Version 4 mit Bordmitteln bewerkstelligen. Sie können hierfür den Kommandozeilen-Client mysql sowie mysqldump verwenden. Beide Hilfsprogramme müssen, um eine XML-Ausgabe zu erzeugen, mit dem Parameter X aufgerufen werden. Mit dem mysql-client können Sie also jede beliebige Abfrage auch als XML-Ausgabe erzeugen. Sie können den SQL-Befehl über eine Datei dem mysql-client übergeben oder den SQL-Befehl direkt auf der Kommandozeile definieren. 386 Realisierung von Benutzerschnittstellen

139 Im ersten Fall ist der Aufruf wie folgt: mysql X <Datenbankname> < sqlbefehl.sql Syntax Der Client führt dann den SQL-Befehl, der in der Datei sqlbefehl.sql gespeichert ist, durch. Auf den Datenbanknamen können Sie verzichten, wenn Sie im SQL-Befehl die Notation Datenbankname.Feldname verwenden. Wenn Sie den SQL-Befehl direkt über die Kommandozeile eingeben wollen, bedienen Sie sich der Option e. Das folgende Beispiel zeigt dies: Listing 7.36 SQL-Befehl über Kommandozeile mysql X e "SELECT name FROM verwaltung.mitarbeiter" Das Beispiel gibt alle Namen aus der Mitarbeitertabelle der Datenbank verwaltung aus. Die Ausgabe sieht dann z.b. wie folgt aus: Listing 7.37 Ergebnis der Abfrage <?xml version="1.0"?> <resultset statement="select name FROM mitarbeiter"> <row> <name>kaltenecker</name> </row> <row> <name>sommer</name> </row> <row> <name>wasserscheid</name> </row> <row> <name>lauer</name> </row> <row> <name>schreier</name> </row> </resultset> Die einzelnen Datensätze sind durch <row> gekennzeichnet. Innerhalb der einzelnen Datensätze wird als Tag für das Attribut der Feldname verwendet. Anschließend können Sie die Ausgabe zum Speichern in eine Datei umleiten. XML 387

140 Der folgende Befehl schreibt die Ausgabe in die Datei out.xml: XML-Ausgabe mit mysqldump Listing 7.38 Schreiben in Ausgabedatei mysql X e "SELECT name FROM verwaltung.mitarbeiter" > out.xml Sie können auch über mysqldump eine XML-Ausgabe erzeugen. Um alle Datensätze der Tabelle kunden aus der Datenbank verwaltung in die Ausgabedatei out.xml zu schreiben, lautet der Befehl: Listing 7.39 Schreiben in Ausgabedatei mit mysqldump mysqldump X r out.xml verwaltung kunden Auch hier sorgt X für die XML-Ausgabe. Wenn Sie die Option -r verwenden, erfolgt die Ausgabe direkt in eine Datei. Die XML-Ausgabe sieht wie folgt aus: Listing 7.40 XML-Ausgabe <?xml version="1.0"?> <??Welches Element fehlt hier??> <kunden> <kunden_nr>1</kunden_nr> <name>throll</name> <strasse>wiesenweg 2</strasse> <plz>53225</plz> <ort>bonn</ort> </kunden> <kunden> <kunden_nr>2</kunden_nr> <name>schmidt</name> <strasse>hauptstr. 17</strasse> <plz>40411</plz> <ort>hamburg</ort> </kunden> <kunden> <kunden_nr>3</kunden_nr> <name>meier</name> <strasse>schillerweg 1</strasse> <plz>53111</plz> <ort>bonn</ort> </kunden> </??Welches Element fehlt hier??> 388 Realisierung von Benutzerschnittstellen

141 Inzwischen sind auch verschiedene Programme von Drittanbietern verfügbar, die ebenfalls einen XML-Export aus MySQL erlauben. Beispielhaft ist an dieser Stelle der MySQL Manager von EMS ( genannt. Abbildung 7.27 XML-Export mit Hilfe des MySQL-Managers von EMS XML mit PHP oder Perl erstellen Natürlich können Sie auch eine XML-Datei mit Hilfe von PHP direkt aus einer MySQL-Datenbank erzeugen. Das Vorgehen ist dabei relativ einfach. Sie öffnen eine Verbindung zu Ihrer MySQL-Datenbank und setzen einen gewünschten SQL-Befehl ab. Das Ergebnis der Abfrage setzen Sie dann in einer Schleife mit Hilfe von print-befehlen in eine XML-Struktur. Listing 7.41 XML-Ausgabe mit PHP <?php //Datenbankparameter $host = "localhost"; $user = "dbuser"; $pass = "dbpassword"; $db = "MeineDatenbank"; XML 389

Inhalt. Vorwort 11. Inhalt der Buch-CD 13. 1 Einführung 17

Inhalt. Vorwort 11. Inhalt der Buch-CD 13. 1 Einführung 17 Inhalt Vorwort 11 Inhalt der Buch-CD 13 1 Einführung 17 1.1 Was ist MySQL? 17 1.2 Die wichtigsten Eigenschaften von MySQL 20 1.3 Bezugsquellen und Versionen 23 1.4 MySQL im Vergleich zu anderen Datenbanken

Mehr

Marcus Throll. f. / Galileo Computing

Marcus Throll. f. / Galileo Computing Marcus Throll f. / Galileo Computing Inhalt Vorwort zur 2. Auflage 13 Vorwort zur 1. Auflage 15 Inhalt der Buch-CO 17 Einführung 21 1.1 Was istmysql? 23 1.2 Die wichtigsten Eigenschaften von MySQL 26 1.3

Mehr

Rolf Däßler. Das Einsteigersem. MySQL 5

Rolf Däßler. Das Einsteigersem. MySQL 5 Rolf Däßler Das Einsteigersem MySQL 5 Inhaltsverzeichnis Vorwort 11 Einleitung 13 Was ist MySQL? 13 Eigenschaften 13 Leistungsmerkmale 15 Inhalt und Aufbau des Buches 17 Verwendete Programmversionen 18

Mehr

Datenbanken. 5 Tabellen. Karl Meier karl.meier@kasec.ch 12.10.2010. Inhalt. Domänen verwenden Tabellen anzeigen, ändern, löschen Übung

Datenbanken. 5 Tabellen. Karl Meier karl.meier@kasec.ch 12.10.2010. Inhalt. Domänen verwenden Tabellen anzeigen, ändern, löschen Übung Datenbanken 5 Tabellen Karl Meier karl.meier@kasec.ch 12.10.2010 Tabellen erstellen en Integritätsregeln Inhalt Domänen verwenden Tabellen anzeigen, ändern, löschen Übung 2 1 Einfache Tabellen erstellen

Mehr

DB1. DB SQL-DQL 1 Mario Neugebauer

DB1. DB SQL-DQL 1 Mario Neugebauer DB1 DB1-12 041-SQL-DQL 1 Mario Neugebauer Einführung Informationsmodellierung Relationales Datenbankmodell Datenbanksprache SQL Einführung Daten-Abfrage-Sprache - DQL Daten-Definitions-Sprache - DDL Daten-Manipulations-Sprache

Mehr

Gregor Kuhlmann Friedrich Müllmerstadt. MySQL. Der Schlüssel zu Datenbanken-Design und -Programmierung. c 3 E. i- O Rowohlt Taschenbuch Verlag

Gregor Kuhlmann Friedrich Müllmerstadt. MySQL. Der Schlüssel zu Datenbanken-Design und -Programmierung. c 3 E. i- O Rowohlt Taschenbuch Verlag Gregor Kuhlmann Friedrich Müllmerstadt MySQL Der Schlüssel zu Datenbanken-Design und -Programmierung r?: X c 3 E i- O uu Rowohlt Taschenbuch Verlag Inhalt Editorial 11 Einleitung 12 1 Einführung in das

Mehr

Inhalt. 1. MySQL-Einführung 1. 2. Datenbankentwurf 27

Inhalt. 1. MySQL-Einführung 1. 2. Datenbankentwurf 27 Inhalt 1. MySQL-Einführung 1... 1.1 Geschichte von MySQL... 1 1.2 Entscheidungskriterien für MySQL... 2 1.3 Installation eines MySQL-Servers... 3 1.3.1 Linux... 5 1.3.2 Windows 9x/Me/NT/2000/XP... 7 1.3.3

Mehr

MySQL, phpmyadmin & SQL. Kurzübersicht

MySQL, phpmyadmin & SQL. Kurzübersicht MySQL, phpmyadmin & SQL Kurzübersicht Referenzen MySQL Documentation: http://dev.mysql.com/doc PHP 5 / MySQL5. Studienausgabe. Praxisbuch und Referenz (Kannengießer & Kannengießer) 2 Datenbank anlegen

Mehr

Marcus Throll, Oliver Bartosch. Einstieg in SQL. Verstehen, einsetzen, nachschlagen. Galileo Press

Marcus Throll, Oliver Bartosch. Einstieg in SQL. Verstehen, einsetzen, nachschlagen. Galileo Press Marcus Throll, Oliver Bartosch Einstieg in SQL Verstehen, einsetzen, nachschlagen Galileo Press Auf einen Blick 1 Einleitung 15 2 Datenbankentwurf 23 3 Datenbankdefinition 43 4 Datensätze einfügen (INSERT

Mehr

Relationale Datenbanken in der Praxis

Relationale Datenbanken in der Praxis Seite 1 Relationale Datenbanken in der Praxis Inhaltsverzeichnis 1 Datenbank-Design...2 1.1 Entwurf...2 1.2 Beschreibung der Realität...2 1.3 Enitiy-Relationship-Modell (ERM)...3 1.4 Schlüssel...4 1.5

Mehr

SQL structured query language

SQL structured query language Umfangreiche Datenmengen werden üblicherweise in relationalen Datenbank-Systemen (RDBMS) gespeichert Logische Struktur der Datenbank wird mittels Entity/Realtionship-Diagrammen dargestellt structured query

Mehr

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15 Vorwort..................................................... 13 Kapitel 1 Einleitung.......................................... 15 Kapitel 2 SQL der Standard relationaler Datenbanken... 19 2.1 Die Geschichte................................

Mehr

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13 Auf einen Blick Vorwort... 13 Teil 1 Vorbereitung Kapitel 1 Einleitung... 17 Kapitel 2 SQL der Standard relationaler Datenbanken... 21 Kapitel 3 Die Beispieldatenbanken... 39 Teil 2 Abfrage und Bearbeitung

Mehr

Das Grundlagenbuch zu FileMaker Pro 7- Datenbanken erfolgreich anlegen und verwalten

Das Grundlagenbuch zu FileMaker Pro 7- Datenbanken erfolgreich anlegen und verwalten Das Grundlagenbuch zu FileMaker Pro 7- Datenbanken erfolgreich anlegen und verwalten SMART BOOKS Inhaltsverzeichnis..««... Vorwort 13 Kapitel 1 - Einführung 17 Crashkurs: FileMaker Pro 7 anwenden 19 Eine

Mehr

Inhaltsverzeichnis. Vorwort 13. Kapitel 1 Einleitung 15

Inhaltsverzeichnis. Vorwort 13. Kapitel 1 Einleitung 15 Vorwort 13 Kapitel 1 Einleitung 15 Kapitel 2 SQL-der Standard relationaler Datenbanken... 19 2.1 Die Geschichte 19 2.2 Die Bestandteile 20 2.3 Die Verarbeitung einer SQL-Anweisung 22 2.4 Die Struktur von

Mehr

Datenbanken mit OpenOffice.org 3 Base und HSQLDB

Datenbanken mit OpenOffice.org 3 Base und HSQLDB Thomas Krumbein Datenbanken mit OpenOffice.org 3 Base und HSQLDB Galileo Press 1.1 Zur 3. Auflage dieses Buches 14 1.2 OpenOffice.org 14 1.2.1 DasProjektOpenOffice.org 15 2.1 Einführung in Datenbanken

Mehr

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13 Auf einen Blick Vorwort 13 Teil 1 Vorbereitung Kapitel 1 Einleitung 17 Kapitel 2 SQL - der Standard relationaler Datenbanken 21 Kapitel 3 Die Beispieldatenbanken 39 Teil 2 Abfrage und Bearbeitung Kapitel

Mehr

Datenbanken. Ein DBS besteht aus zwei Teilen:

Datenbanken. Ein DBS besteht aus zwei Teilen: Datenbanken Wikipedia gibt unter http://de.wikipedia.org/wiki/datenbank einen kompakten Einblick in die Welt der Datenbanken, Datenbanksysteme, Datenbankmanagementsysteme & Co: Ein Datenbanksystem (DBS)

Mehr

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing.

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing. PHP + MySQL Die MySQL-Datenbank Zusammenspiel Apache, PHP, PHPMyAdmin und MySQL PHPMyAdmin Verwaltungstool Nutzer Datei.php oder Datei.pl Apache HTTP-Server PHP Scriptsprache Perl Scriptsprache MySQL Datenbank

Mehr

Grundkurs MySQL und PHP

Grundkurs MySQL und PHP Martin Pollakowski Grundkurs MySQL und PHP So entwickeln Sie Datenbanken mit Open Source Software 2., verbesserte und erweiterte Auflage Anwendung und Nutzen von Datenbanken 1 Was ist eine Datenbank? 1

Mehr

Datenbanken mit OpenOffice.org Base

Datenbanken mit OpenOffice.org Base -, "., - I Thomas Krumbein Datenbanken mit OpenOffice.org Base o :!!' ~ 0 Galileo Press 1 Einführung 11 1.1 OpenOffice.org 12 1.1.1 Das Projekt OpenOffice.org 13 2 Datenbanken mit OpenOffice.org - das

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist Herstellerabhängig

Mehr

Datenbanken mit OpenOffice.org 2.3 Base und HSQLDB

Datenbanken mit OpenOffice.org 2.3 Base und HSQLDB Thomas Krumbein Datenbanken mit OpenOffice.org 2.3 Base und HSQLDB Galileo Press 1.1 Zur 2. Auflage dieses Buches 14 1.2 OpenOffice.org 14 1.2.1 DasProjektOpenOffice.org 15 2.1 Einführung in Datenbanken

Mehr

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen. 1 In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen. Zunächst stellt sich die Frage: Warum soll ich mich mit der Architektur eines DBMS beschäftigen?

Mehr

Xampp Administration und Grundlagen. Stefan Maihack Dipl. Ing. (FH) Datum: 10.04.2015

Xampp Administration und Grundlagen. Stefan Maihack Dipl. Ing. (FH) Datum: 10.04.2015 Xampp Administration und Grundlagen Stefan Maihack Dipl. Ing. (FH) Datum: 10.04.2015 1 Die wichtigsten Befehle zur Administration Betriebssystem-Befehle cmd dir cd cd \ cd cd \

Mehr

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel Anwendungsentwicklung Datenbanken SQL Stefan Goebel SQL Structured Query Language strukturierte Abfragesprache von ANSI und ISO standardisiert deklarativ bedeutet was statt wie SQL beschreibt, welche Daten

Mehr

Relationales Datenbanksystem Oracle

Relationales Datenbanksystem Oracle Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = R 1 X 1 SC 1... R n X n SC n SC a a : i=1...n X i B Information

Mehr

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar

SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar Qt-Seminar Dienstag, 10.2.2009 SQL ist......die Abkürzung für Structured Query Language (früher sequel für Structured English Query Language )...ein ISO und ANSI Standard (aktuell SQL:2008)...eine Befehls-

Mehr

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL Früherer Name: SEQUEL SQL: Structured Query Language Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99 SQL ist eine deklarative Anfragesprache Teile von SQL Vier große Teile:

Mehr

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin PhpMyAdmin = grafsches Tool zur Verwaltung von MySQL-Datenbanken Datenbanken erzeugen und löschen Tabellen und Spalten einfügen,

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC) Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Motivation Problem: Zugriff auf ein DBMS ist herstellerabhängig

Mehr

2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version

2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version 2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version Das Verwaltungsmodul moveon besteht aus zwei Komponenten: dem moveon Client und der moveon Datenbank. Der moveon Client enthält alle Formulare,

Mehr

MySQL mit MyLinux. boehm@2xp.de. 2/2003 boehm@2xp.de Java unter Linux

MySQL mit MyLinux. boehm@2xp.de. 2/2003 boehm@2xp.de Java unter Linux Bild: www.carsten-lehmann.de MySQL mit MyLinux boehm@2xp.de 1 MySQL mit MyLinux Überblick über MySQL & Co Überblick über MySQL MySQL in 5 Minuten JDBC mit MySQL Ende 2 Überblick über MySQL & Co 3 Datenbanken

Mehr

Inhaltsverzeichnis. Einleitung

Inhaltsverzeichnis. Einleitung vn Inhaltsverzeichnis Einleitung Kapitel 1: Eine Einführung in relationale Datenbanken 7 Was ist eine relationale Datenbank? 9 Verknüpfen der einzelnen Tabellen 10 Die Reihenfolge der Zeilen ist beliebig

Mehr

Es geht also im die SQL Data Manipulation Language.

Es geht also im die SQL Data Manipulation Language. 1 In diesem Abschnitt wollen wir uns mit den SQL Befehlen beschäftigen, mit denen wir Inhalte in Tabellen ( Zeilen) einfügen nach Tabelleninhalten suchen die Inhalte ändern und ggf. auch löschen können.

Mehr

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D. 1 Copyright 1996-1997 by Axel T. Schreiner. All Rights Reserved. 7 Datenbankzugriff Prinzip Dieser Abschnitt beschäftigt sich mit dem Paket java.sql, das eine SQL-Schnittstelle für Java verkapselt. Java-Programme

Mehr

4. Datenbanksprache SQL

4. Datenbanksprache SQL 4. Datenbanksprache SQL Standard-Sprache für das Arbeiten mit relationalen Datenbanken: Structured Query Language Datendefinition: Anlegen, Ändern und Löschen von Datenbankstrukturen Datenmanipulation:

Mehr

Dieter Staas Das Einsteigerseminar SQL

Dieter Staas Das Einsteigerseminar SQL 2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Dieter Staas Das Einsteigerseminar SQL Vorwort 15 Einleitung 17 Lernen

Mehr

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER INHALTSVERZEICHNIS 1. Datenbanken 2. SQL 1.1 Sinn und Zweck 1.2 Definition 1.3 Modelle 1.4 Relationales Datenbankmodell 2.1 Definition 2.2 Befehle 3.

Mehr

PostgreSQL im praktischen Einsatz. Stefan Schumacher

PostgreSQL im praktischen Einsatz. Stefan Schumacher PostgreSQL im praktischen Einsatz 2. Brandenburger Linux Infotag 2005 Stefan Schumacher , PGP Key http:/// $Header: /home/daten/cvs/postgresql/folien.tex,v 1.11 2005/04/25

Mehr

SQL (Structured Query Language) Schemata Datentypen

SQL (Structured Query Language) Schemata Datentypen 2 SQL Sprachelemente Grundlegende Sprachelemente von SQL. 2.1 Übersicht Themen des Kapitels SQL Sprachelemente Themen des Kapitels SQL (Structured Query Language) Schemata Datentypen Im Kapitel SQL Sprachelemente

Mehr

SQL und MySQL. Kristian Köhntopp

SQL und MySQL. Kristian Köhntopp SQL und MySQL Kristian Köhntopp Wieso SQL? Datenbanken seit den frühen 1950er Jahren: Hierarchische Datenbanken Netzwerkdatenbanken Relationale Datenbanken = SQL Relational? 10 9 8 7 6 f(y) := y = x r(y)

Mehr

Datenbanksysteme Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

Datenbanksysteme Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück Datenbanksysteme 2013 Kapitel 7: SQL Vorlesung vom 6.05.2013 Oliver Vornberger Institut für Informatik Universität Osnabrück Sprung Transititve Hülle SQL 1970 Edgar Codd: A relational model for large shared

Mehr

Inhaltsverzeichnis. Vorwort Teil I Einführung. 1 Einleitung Der Microsoft SQL Server... 19

Inhaltsverzeichnis. Vorwort Teil I Einführung. 1 Einleitung Der Microsoft SQL Server... 19 Vorwort... 11 Teil I Einführung 1 Einleitung... 13 1.1 Warum dieses Buch?... 13 1.2 Aufbau des Buches... 13 Aufbau der einzelnen Kapitel... 14 1.3 Die Beispieldatenbank... 15 1.4 Schreibweisen... 15 1.5

Mehr

Datenbank und Tabelle mit SQL erstellen

Datenbank und Tabelle mit SQL erstellen Datenbank und Tabelle mit SQL erstellen 1) Übung stat Mit dem folgenden Befehlen legt man die Datenbank stat an und in dieser die Tabelle data1 : CREATE DATABASE stat; USE stat; CREATE TABLE data1 ( `id`

Mehr

Bibliografische Informationen digitalisiert durch http://d-nb.info/995021198

Bibliografische Informationen digitalisiert durch http://d-nb.info/995021198 Auf einen Blick 1 Einleitung 15 2 Datenbankentwurf 23 3 Datenbankdefinition 43 4 Datensätze einfügen (INSERT INTO) 95 5 Daten abfragen (SELECT) 99 6 Daten aus mehreren Tabellen abfragen (JOIN) 143 7 Unterabfragen

Mehr

Einführung in SQL Datenbanken bearbeiten

Einführung in SQL Datenbanken bearbeiten Einführung in SQL Datenbanken bearbeiten Jürgen Thomas Entstanden als Wiki-Buch Bibliografische Information Diese Publikation ist bei der Deutschen Nationalbibliothek registriert. Detaillierte Angaben

Mehr

Trainingsmanagement Gutschein Management. Beschreibung

Trainingsmanagement Gutschein Management. Beschreibung Trainingsmanagement Beschreibung www.dastm.de info@dastm.de 1. Einführung... 2 2. Gutschein Funktionen... 3 2.1. Gutschein Menü... 3 2.2. Gutscheine anlegen... 4 Gutschein Kassenwirksam erfassen... 6 Gutschein

Mehr

2 Anlegen und Konfigurieren von Datenbanken 35

2 Anlegen und Konfigurieren von Datenbanken 35 Inhalt 1 Einführung und Installation 9 1.1 Einführung 11 1.1.1 Aufbau 11 1.1.2 Schreibkonventionen 12 1.1.3 Zur Beispieldatenbank 13 1.1.4 Kurz-Installation 19 1.2 Die Oracle-Installation 20 1.3 Die Installation

Mehr

Es geht also um die sogenannte SQL- Data Definition Language.

Es geht also um die sogenannte SQL- Data Definition Language. In diesem Abschnitt werden wir uns die SQL Befehle ansehen, mit denen ein sogenanntes Datenbankschema angelegt, gepflegt und auch wieder gelöscht werden kann. Es geht also um die sogenannte SQL- Data Definition

Mehr

Arbeiten mit ACCESS 2010

Arbeiten mit ACCESS 2010 Dipl.-Hdl., Dipl.-Kfm. Werner Geers Arbeiten mit ACCESS 2010 Datenbanken mit Datenmodellierung Tabellen, Abfragen, Formularen und Berichten Beziehungen Makros Datenaustausch SQL Structured Query Language

Mehr

Inhaltsverzeichnis. Inhalt. 1 Einführung in die Datenbanktechnologie

Inhaltsverzeichnis. Inhalt. 1 Einführung in die Datenbanktechnologie 3 Inhaltsverzeichnis 1 Einführung in die Datenbanktechnologie 1.1 Einleitung... 8 1.1.1 Zielsetzung... 8 1.1.2 Aufbau des Studienbuches... 9 1.1.3 Abgrenzung... 10 1.2 Grundbegriffe... 10 1.3 Datenbanksysteme...

Mehr

Installationsanleitung für die netzbasierte Variante Ab Version 3.6. KnoWau, Allgemeine Bedienhinweise Seite 1

Installationsanleitung für die netzbasierte Variante Ab Version 3.6. KnoWau, Allgemeine Bedienhinweise Seite 1 1 Installationsanleitung für die netzbasierte Variante Ab Version 3.6 Copyright KnoWau Software 2014 KnoWau, Allgemeine Bedienhinweise Seite 1 2 Inhaltsverzeichnis 1 Übersicht... 3 2 Installation... 4

Mehr

Dipl.-Hdl., Dipl.-Kfm. ACCESS 2007

Dipl.-Hdl., Dipl.-Kfm. ACCESS 2007 Dipl.-Hdl., Dipl.-Kfm. Werner Geers Arbeiten mit ACCESS 2007 Datenbanken mit Datenmodellierung Tabellen, Abfragen, Formularen und Berichten Beziehungen Makros Datenaustausch SQL Structured Query Language

Mehr

XAMPP-Systeme. Teil 3: My SQL. PGP II/05 MySQL

XAMPP-Systeme. Teil 3: My SQL. PGP II/05 MySQL XAMPP-Systeme Teil 3: My SQL Daten Eine Wesenseigenschaft von Menschen ist es, Informationen, in welcher Form sie auch immer auftreten, zu ordnen, zu klassifizieren und in strukturierter Form abzulegen.

Mehr

MS SQL Server Einstieg in relationale Datenbanken und SQL Marco Skulschus Marcus Wiederstein

MS SQL Server Einstieg in relationale Datenbanken und SQL Marco Skulschus Marcus Wiederstein www.comelio-medien.com MS SQL Server Einstieg in relationale Datenbanken und SQL Marco Skulschus Marcus Wiederstein MS SQL Server Einstieg in relationale Datenbanken und SQL Marco Skulschus Marcus Wiederstein

Mehr

Datenbanken Grundlagen und Design

Datenbanken Grundlagen und Design Frank Geisler Datenbanken Grundlagen und Design 3., aktualisierte und erweiterte Auflage mitp Vorwort 15 Teil I Grundlagen 19 i Einführung in das Thema Datenbanken 21 i.i Warum ist Datenbankdesign wichtig?

Mehr

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. MySQL-Befehle 1. Einleitung In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben. 2. Arbeiten mit Datenbanken 2.1 Datenbank anlegen Eine Datenbank kann man wie folgt

Mehr

Inhaltsverzeichnis. vii

Inhaltsverzeichnis. vii vii Inhaltsverzeichnis 1 Architektur, Modellierung und Entwurf 1 1.1 Datenbanken was ist das?... 2 1.2 Datenbankmanagementsystem... 3 1.3 Architektur eines Datenbanksystems... 4 1.3.1 Die konzeptuelle

Mehr

SQL, MySQL und FileMaker

SQL, MySQL und FileMaker SQL, MySQL und FileMaker Eine kurze Einführung in SQL Vorstellung von MySQL & phpmyadmin Datenimport von MySQL in FileMaker Autor: Hans Peter Schläpfer Was ist SQL? «Structured Query Language» Sprache

Mehr

Oracle und SQL. Kursinhalte. Kompakt-Intensiv-Training. Oracle und SQL

Oracle und SQL. Kursinhalte. Kompakt-Intensiv-Training. Oracle und SQL Oracle und SQL Kompakt-Intensiv-Training In unsere Schulung "Oracle und SQL" erhalten Sie einen breitgefächerten Überblick über die fachmännische und effektive Nutzung der SQL-Implementierung in Oracle.

Mehr

Installation und Konfiguration

Installation und Konfiguration Installation und Konfiguration Das BUILDUP Programm besteht aus zwei Teilen: das BUILDUP Programm und das BUILDUP Server Programm. Der BUILDUP Server ist für die Datenhaltung und die Lizenzierung zuständig

Mehr

Eine Einführung in MySQL

Eine Einführung in MySQL LUG Peine Eine Einführung in MySQL Mario Herold LINUX USER GROUP PEINE WWW.LUG- PEINE.ORG This work is licen sed u nd er the Creative Com m on s Attrib ution- - Sh arealike 2.0 Licen se. To view a cop

Mehr

BERUFSPRAKTIKUM UND -VORBEREITUNG

BERUFSPRAKTIKUM UND -VORBEREITUNG Department für Geographie Marco Brey BERUFSPRAKTIKUM UND -VORBEREITUNG Crashkurs IT-Methoden ein anwendungsorientierter Einstieg in Datenbanksysteme, Programmierung und fortgeschrittene Excel-Funktionen

Mehr

Acrolinx Systemanforderungen

Acrolinx Systemanforderungen Acrolinx Systemanforderungen support.acrolinx.com /hc/de/articles/203915331-acrolinx-systemanforderungen Betrifft Software Version Acrolinx Server 4.3, 4.4, 4.5, 4.6, 4.7, 5.0, 5.1 Die Hardware- und Softwareanforderungen

Mehr

SQL. Datendefinition

SQL. Datendefinition SQL Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer oder logischer Natur sein. Das folgende Kapitel beschäftigt sich mit der

Mehr

Grundlagen zu Datenbanken zu Beginn der Jgst. 13

Grundlagen zu Datenbanken zu Beginn der Jgst. 13 Grundlagen zu Datenbanken zu Beginn der Jgst. 13 Bereits bei der Planung einer Datenbank muss der Datenbankentwickler darauf achten, Nachteile für das spätere System zu vermeiden. Die Strukturen müssen

Mehr

Datenübernahme in ADITO AID 013 DE

Datenübernahme in ADITO AID 013 DE Datenübernahme in ADITO AID 013 DE 2014 ADITO Software GmbH Diese Unterlagen wurden mit größtmöglicher Sorgfalt hergestellt. Dennoch kann für Fehler in den Beschreibungen und Erklärungen keine Haftung

Mehr

1.1 Datenbankprogramm Oracle für MCIS MDA

1.1 Datenbankprogramm Oracle für MCIS MDA 1.1 Datenbankprogramm Oracle für MCIS MDA 1.1.1 Installation von Oracle 9.2.0 Beispielhaft wird die Installation von Oracle Version 9.2.0 beschrieben. Neuere Versionen werden analog installiert. CD für

Mehr

17.2 MS-Access Projekte

17.2 MS-Access Projekte 964 Von MS-Access 2000 zum SQL-Server 17.2 MS-Access Projekte MS-Access-Projekte, die die Dateiendung adp besitzen, werden als Front-End-Anwendung verwendet. Für die Back-End-Seite gibt es mehrere Möglichkeiten.

Mehr

Neue Features Oracle Database 12.2 Wann denn endlich?

Neue Features Oracle Database 12.2 Wann denn endlich? Neue Features Oracle Database 12.2 Wann denn endlich? DOAG 2017 Datenbank Dierk Lenz Erfolgreich seit 1996 am Markt Firmensitz: Burscheid (bei Leverkusen) Beratung, Schulung und Betrieb/Fernwartung rund

Mehr

Erstellen und Verwalten von Tabellen

Erstellen und Verwalten von Tabellen Erstellen und Verwalten von Tabellen Als nächstes müssen die Tabellen der Datenbank Personalwesen erzeugt werden. Die Syntax dazu lautet: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(TABELLENDEFINITION,

Mehr

Datenbankprogrammierung mit MySQL 5 und PHP 5 Spona

Datenbankprogrammierung mit MySQL 5 und PHP 5 Spona DAS EINSTEIGERSEMINAR Datenbankprogrammierung mit MySQL 5 und PHP 5 von Helma Spona Neuausgabe Datenbankprogrammierung mit MySQL 5 und PHP 5 Spona schnell und portofrei erhältlich bei beck-shop.de DIE

Mehr

Matthias-Claudius-Gymnasium Fachcurriculum Informatik

Matthias-Claudius-Gymnasium Fachcurriculum Informatik Klasse 8 (2-stündig) Grundlagen der Informatik Einführung in die Programmierung mit Scratch 10 Wochen Betriebssysteme - die Aufgaben eines Betriebssystems nennen. - Einstellungen des Betriebssystems in

Mehr

Eclipse und EclipseLink

Eclipse und EclipseLink Eclipse und EclipseLink Johannes Michler Johannes.Michler@promatis.de PROMATIS, Ettlingen Zugriff auf Oracle Datenbanken aus Eclipse RCP Anwendungen via EclipseLink 18.09.2009 1 Gliederung Eclipse als

Mehr

Inhaltsverzeichnis. jetzt lerne ich

Inhaltsverzeichnis. jetzt lerne ich Inhaltsverzeichnis jetzt lerne ich Einführung 15 1 Erste Schritte 21 1.1 Datenbanken und Datenbank-Managementsysteme 21 1.2 Zugriff auf Datenbanken 22 1.3 Was der Großvater noch wusste... 22 1.4 Einordnung

Mehr

Kapitel 4: PHP-Grundlagen Kapitel 5: PHP-Bausteine für Programme

Kapitel 4: PHP-Grundlagen Kapitel 5: PHP-Bausteine für Programme O:/Wiley/Reihe_Dummies/14438_Valade/3d/ftoc.3d from 04.10.2017 16:38:55 Auf einen Blick Über die Autorin... 9 Einleitung... 21 Teil I: Eine datenbankgestützte Webanwendung mit PHP und MySQL entwickeln...

Mehr

Arbeiten mit einem lokalen PostgreSQL-Server

Arbeiten mit einem lokalen PostgreSQL-Server Arbeiten mit einem lokalen PostgreSQL-Server Download für das Betriebssystem Windows PostgreSQL-Server und pgadmin: http://www.enterprisedb.com/products-servicestraining/pgdownload#windows pgadmin: http://www.pgadmin.org/download/windows.php

Mehr

Die Anweisung create table

Die Anweisung create table SQL-Datendefinition Die Anweisung create table create table basisrelationenname ( spaltenname 1 wertebereich 1 [not null],... spaltenname k wertebereich k [not null]) Wirkung dieses Kommandos ist sowohl

Mehr

Access 2000 und MS SQL Server im Teamwork

Access 2000 und MS SQL Server im Teamwork Access 2000 und MS SQL Server im Teamwork Bearbeitet von Irene Bauder, Jürgen Bär 1. Auflage 2000. Buch. 518 S. Hardcover ISBN 978 3 446 21473 6 Format (B x L): 17,5 x 24,5 cm Gewicht: 1112 g Zu Leseprobe

Mehr

Übersicht der wichtigsten MySQL-Befehle

Übersicht der wichtigsten MySQL-Befehle Übersicht der wichtigsten MySQL-Befehle 1. Arbeiten mit Datenbanken 1.1 Datenbank anlegen Eine Datenbank kann man wie folgt erstellen. CREATE DATABASE db_namen; 1.2 Existierende Datenbanken anzeigen Mit

Mehr

Datumsangaben, enthält mindestens Jahr, Monat, Tag

Datumsangaben, enthält mindestens Jahr, Monat, Tag Datenbanken mit SQL Informatik - Sprenger Häufig wird mit Tabellenkalkulationen gearbeitet, obwohl der Einsatz von Datenbanken sinnvoller ist. Tabellenkalkulationen wie Microsoft Excel oder LibreOffice

Mehr

i-net HelpDesk Erste Schritte

i-net HelpDesk Erste Schritte 1 Erste Schritte... 2 1.1 Wie geht es nach dem i-net HelpDesk Setup weiter?... 2 1.2 Desktop- oder Web-Client?... 2 1.3 Starten des Programms... 2 1.4 Anmelden (Einloggen) ist zwingend notwendig... 3 1.5

Mehr

Installation von MS SQL-Server 2014 Express

Installation von MS SQL-Server 2014 Express ALGE 2016 SQL Server Installation Inhaltsverzeichnis Installation von MS SQL-Server 2014 Express...1 Datenbank für Remote- Zugriff vorbereiten...6 Windows Firewall Konfiguration...9 Falls Sie ein Englischsprachiges

Mehr

Dataport IT Bildungs- und Beratungszentrum. Access Grundlagenseminar Access Aufbauseminar... 3

Dataport IT Bildungs- und Beratungszentrum. Access Grundlagenseminar Access Aufbauseminar... 3 Inhalt Access 2010 - Grundlagenseminar... 2 Access 2010 - Aufbauseminar... 3 Access 2010 - Von Excel zu Access... 4 Access 2010 - Programmierung Teil 1... 5 Access 2010 - Programmierung Teil 2... 6 Grundlagen

Mehr

ODBC Was ist das? ODBC Treiber installieren ODBC-Zugriff einrichten ODBC Zugriff mit Excel ODBC Zugriff mit Word...

ODBC Was ist das? ODBC Treiber installieren ODBC-Zugriff einrichten ODBC Zugriff mit Excel ODBC Zugriff mit Word... INHALTSVERZEICHNIS ODBC Was ist das?... 2 ODBC Treiber installieren... 2 ODBC-Zugriff einrichten... 2 ODBC Zugriff mit Excel... 5 ODBC Zugriff mit Word... 8 ODBC Zugriff mit Access... 11 1 ODBC WAS IST

Mehr

MySQL. MySQL ist ein Datenbanksystem. Es besteht aus einem zentralen Server und aus (mehreren) Clients. Es benutzt einen Dialekt der Sprache SQL.

MySQL. MySQL ist ein Datenbanksystem. Es besteht aus einem zentralen Server und aus (mehreren) Clients. Es benutzt einen Dialekt der Sprache SQL. MySQL Was bieten Datenbanken? Zentralisation von Daten Maschinenunterstützte Weiterverarbeitung Daten werden vielen Benutzern gleichzeitig zur Verfügung gestellt Ausschalten von konkurrierenden Zugriffen

Mehr

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11 Datenbanksysteme WS 05/ 06 Gruppe 12 Martin Tintel Tatjana Triebl Seite 1 von 11 Inhaltsverzeichnis Inhaltsverzeichnis... 2 1. Einleitung... 3 2. Datenbanken... 4 2.1. Oracle... 4 2.2. MySQL... 5 2.3 MS

Mehr

PHP- Umgang mit Datenbanken (1)

PHP- Umgang mit Datenbanken (1) PHP- Umgang mit Datenbanken (1) Weitere Funktionen zum Umgang mit Datenbanken (Erzeugen, Löschen) und Tabellen (Erzeugen, Löschen) Zum Beispiel für das Erzeugen einer neuen Datenbank $dbname= blumendb

Mehr

Übung 5. Implementierung einer Datenbank. Prof. Dr. Andreas Schmietendorf 1. Übung 5

Übung 5. Implementierung einer Datenbank. Prof. Dr. Andreas Schmietendorf 1. Übung 5 Implementierung einer Datenbank Prof. Dr. Andreas Schmietendorf 1 Aufgabenbeschreibung Prof. Dr. Andreas Schmietendorf 2 Zielstellung Nachdem innerhalb der Übung 4 das konzeptionelle Modell einer späteren

Mehr

MCSA: SQL 2016 Database Development

MCSA: SQL 2016 Database Development MCSA: SQL 2016 Database Development Querying Data with Transact-SQL & Developing SQL Databases Seminarziel In diesem 6-tägigen Kurs werden die Teilnehmer von Grund auf in die Entwicklung

Mehr

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken Betriebliche Datenverarbeitung Wirtschaftswissenschaften AnleitungzurEinrichtungeinerODBC VerbindungzudenÜbungsdatenbanken 0.Voraussetzung Diese Anleitung beschreibt das Vorgehen für alle gängigen Windows

Mehr

Anleitung Formmail- Script für den DA-FormMaker

Anleitung Formmail- Script für den DA-FormMaker Anleitung Formmail- Script für den DA-FormMaker 1 Allgemeines In diesem Dokument wird die Installation des Formmail-Scriptes für den DA-FormMaker beschrieben. Das Formmail-Script übernimmt die Aufbereitung

Mehr

Linux-Camp: Linux als Server am Beispiel LAMP

Linux-Camp: Linux als Server am Beispiel LAMP Linux-Camp: Linux als Server am Beispiel LAMP Linux, Apache, MySQL, PHP mit Ubuntu Version 8.04 Inhalt LAMP-Komponenten LAMP-Komponenten installieren, konfigurieren und prüfen Apache Webserver PHP5 MySQL

Mehr

Willkommen. Datenbanken und Anbindung

Willkommen. Datenbanken und Anbindung Willkommen Datenbanken und Anbindung Welche stehen zur Wahl? MySQL Sehr weit verbreitetes DBS (YT, FB, Twitter) Open-Source und Enterprise-Version Libs in C/C++ und Java verfügbar Grundsätzlich ist ein

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Java Modul 1 Variablen und Datentypen Selbstständiger Teil Inhaltsverzeichnis 1 Bremsweg-Berechnung 3 1.1 Einführung.................................. 3 1.2 Aufgabenstellung und Programmanforderungen..............

Mehr

Datenbank - Teil 3. Ziele: Eine Datenbank anlegen mit SQL. Daten eingeben mit SQL. Abfragen stellen mit SQL und PHP.

Datenbank - Teil 3. Ziele: Eine Datenbank anlegen mit SQL. Daten eingeben mit SQL. Abfragen stellen mit SQL und PHP. Ziele: Eine Datenbank anlegen mit SQL Daten eingeben mit SQL Abfragen stellen mit SQL und PHP 1 Datenbankserver Entwickelt von der schwedischen Aktiengesellschaft MySQL Unter GNU General Public License

Mehr

Release-News: Technische Lösungen

Release-News: Technische Lösungen Technische Dokumentation Release Comarch ERP Enterprise 6.0 Ausgabedatum 06/2017 Referenz auf andere Dokumente Release-News: Betriebswirtschaftliche Lösungen Inhaltsverzeichnis 1 Vorwort 1 2 Session-Management

Mehr