Endlich Enterprise: Eine Datenbank wird erwachsen: MySQL 5
Die selbstbewusste Sichtweise basiert insbesondere auf neuen
Funktionen, die für geschäftskritische Anwendungen wichtig sind. Hierzu gehören in der Datenbank hinterlegte
Funktionen und Prozeduren (Stored Procedures), automatisch ablaufende
Prozeduren (Trigger) und die Definition von SQL Modes zur Unterstützung der
serverseitigen Datenintegrität sowie die
seit Weiterentwicklung des mit Version 4.1 eingeführten Datenbankcluster. Mit diesen neuen Features
beseitigt MySQL auch weitgehend den jahrelangen Vorwurf unzureichender Funktionen für Anwendungen,
die ein Höchstmaß an Datensicherheit verlangen.
Zu den weiteren
Neuerungen der Version 5 gehören Datensichten (Views), die Einführung von Metadateninformationen
(Information Schema) und die Unterstützung von Transaktionen über verschiedene
Datenbanken in heterogenen Umgebungen (XA Transactions). Für die
Datenbankadministration steht ein neues Migration-Toolkit zur Übernahme von
Daten aus MS Access, MS SQL-Server und Oracle zur Verfügung. Die Möglichkeiten der Fernwartung der Datenbank sind
durch den Instance-Manager gegeben, der einen direkten externen Zugriff auf
die Datenbankprozesse und deren Parameter erlaubt.
MySQL hat in den vergangenen Jahren die bekannte
Massendurchdringung insbesondere bei Internetanwendungen erreicht. Laut
Marktforschern von Evans Data hält dieser Trend auch unvermindert an. Von 400
befragten Datenbankentwicklern in den USA setzen 44 Prozent MySQL ein, der Einsatz
von MySQL ist im vergangenen halben Jahr um 25 Prozent gestiegen. Dieser Trend wird im Moment durch eine Professionalisierung
des gesamten MySQL-Umfelds unterstützt.
Ein Blick auf die Neuerungen
Funktionen und Prozeduren (Stored Procedures) bieten die
Möglichkeit, Programmlogik direkt in der Datenbank zu speichern. Während
Funktionen auch in SQL-Befehlen aufgerufen werden können und einen gewünschten
Rückgabewert liefern, werden Prozeduren mit einem „CALL“ aufgerufen. Ein einfaches Beispiel illustriert dies: Eine häufig
wiederkehrende Funktion in Anwendungen ist die Berechnung von
Mehrwertsteuerzuschlägen. Die Regel ist, dass Sie den Nettowert
sowie den Mehrwertsteuersatz in der Datenbank hinterlegen, um zur Laufzeit
der Anwendung den entsprechenden Bruttosatz zu berechnen. Sie können diese
Berechnung in der Programmiersprache oder im SQL-Befehl realisieren. Mit den Stored Procedures steht die Möglichkeit zur
Verfügung, die Funktion direkt in der Datenbank zu hinterlegen. Im Vergleich
zu Funktionen in der Programmiersprache haben diese den Vorteil, dass sie
wesentlich schneller ausgeführt werden. Stored Procedures verfügen im Deklarationsteil über die
Möglichkeit, Variablen und Bedingungen zu definieren oder sogar Schleifen
auszuführen. Hierfür stehen IF-, CASE-, LOOP- oder WHILE-Befehle zur Verfügung. Für den Einsatz von Stored Procedures sind
Programmierkenntnisse notwendig. Stored Procedures können sowohl zur
Automatisierung von Aufgaben (z B. zur automatischen Generierung von
Datenbankauszügen), aber auch in Anwendungen zur Performancesteigerung
eingesetzt werden.
Trigger
Trigger sind automatisch ablaufende SQL-Befehle, die bei
einer Speicherung oder Änderung eines Datensatzes ausgelöst werden.
Trigger
werden zum Beispiel eingesetzt, um während des Einfügens oder Löschens
eines
Datensatzes Bedingungen abzuprüfen, die nicht in der eigentlichen
Abfrage
enthalten sind. Ein anderes praktisches Beispiel ist die Auslösung von
Bestellvorgängen, wenn der Warenbestand unter eine definierte Anzahl
fällt. Auf diese Weise kann in einer Bestellliste ein entsprechender
Eintrag generiert werden.
Aus dem Wesen von Triggern folgt, dass diese bei einem
bestimmten Ereignis ausgelöst werden. Dies kann ein Einfüge- (INSERT), Update-
(UPDATE) oder Lösch-Vorgang (DELETE) in
einer Tabelle sein. Des Weiteren bestimmt die Definition des Triggers, ob
vor (BEFORE) oder nach (AFTER) dem
Ereignis ausgelöst wird. Über den Zeitpunkt der Auslösung kann die Logik des
Triggers entsprechend gesteuert werden. Wenn Sie etwa über einen Trigger eine
Statistiktabelle aktualisieren (beispielweise eine Kundenstatistik), würden Sie
den Trigger erst nach der Neuanlage oder dem Löschen eines Kundendatensatzes
auslösen. Wenn Sie aber eine Überprüfung eines Einfügevorgangs unterstützen,
würden Sie das vor der Befehlsausführung tun.
Der folgende Trigger erhöht z.B. nach dem Einfügen eines
Datensatzes in einer Kundentabelle automatisch den Kundenzähler in einer
Statistiktabelle.
CREATE TRIGGER upstat AFTER INSERT ON kunde FOR EACH ROW BEGIN UPDATE statistik SET kundenanzahl = kundenanzahl + 1; END
Listing 1
MySQL kennt für Trigger bislang nur den Auslösevorgang auf
Tabellen- und nicht auf Spaltenebene.
Views
Mit Version 5 wurden in MySQL Datensichten (Views)
integriert. Über Views können Abfragen gespeichert werden. Views verhalten sich
wie normale Tabellen und stellen dabei virtuelle Tabellen dar, weil Views keine
Daten enthalten, sondern nur auf die entsprechenden Spalten der Basistabellen
verweisen. Views bieten folgende Vorteile:
- Es besteht die Möglichkeit, einen eingeschränkten
Zugriff auf Informationen der Datenbank einzurichten. - Vereinfachung komplexer Datenbanklogik: Ein Update auf
eine View, die aus mehreren Tabellen besteht, ist einfacher als ein Update aller
Basistabellen. - Resultate von Berechnungen müssen nicht in die
Basistabellen aufgenommen werden.
Eine View kann beispielsweise mit folgendem Befehl erzeugt
werden:
CREATE VIEW v_rechnung (brutto, netto) AS SELECT rechnungsbetrag, rechnungsbetrag * (16/100+1) FROM bestellung
Listing 2
In diesem Beispiel wird zu einem Bruttobetrag gleich die
Mehrwertsteuer hinzuberechnet. Da eine View gespeichert ist, kann die
Abfrage später mit dem in Listing 3 angegebenen Code einfacher erfolgen.
SELECT brutto, netto FROM v_rechnung;
Listing 3
Information Schema
Mit dem Information Schema stellt MySQL
Metadateninformationen, etwa für Tabellen, Tabellenspalten, Rechten, Zeichensätzen, definierte Views oder Trigger, bereit.
Diese Metadateninformationen sind nützlich, um einen genauen
Einblick in die Datenbankdefinition zu erhalten und damit insbesondere für
Datenbank-Administratoren interessant. Die Metadateninformationen werden über
die Datenbank „information_schema“ bereitgestellt. Diese Datenbank
enthält für jede Metadatengruppe eine eigene Tabelle (z. B. TABLES für die
Tabelleninformationen oder VIEWS für die definierten Views). Die
Metadateninformationen können dann über einen SELECT-Befehl abgerufen werden.
Die folgende Abfrage liefert beispielsweise den eingestellten Zeichensatz, das
Erstellungsdatum, das letzte Update auf die Tabelle und den eingestellten
Tabellentyp der Tabelle „counter“:
USE information_schema; SELECT TABLE_NAME, TABLE_COLLATION, CREATE_TIME, UPDATE_TIME, ENGINE FROM TABLES WHERE TABLE_SCHEMA = "counter"
Listing 4
SQL Modes
Für den Server können ab Version 5 so genannte SQL Modes
definiert werden, die das Verhalten des Servers bei Lese- und
Schreibvorgängen
des Clients definieren. Diese SQL Modes dienen dazu, die
Datenüberprüfung sowie das Verhalten der Datenbank in heterogenen
Datenbankumgebungen zu regeln.
SQL Mode ist ein globaler
Serverparameter und kann beim Start des Servers (mit Startparamter
-sql-modes="modes") oder zur Laufzeit (mit SET [SESSION|GLOBAL]
sql_mode=’modes‘) gesetzt werden.
Mit den SQL Modes kann zum Beispiel eingestellt werden, dass
Datumswerte gültig sind (NO_ZEOR_DATE: keine 0000-00-00),
Division durch Null bei „UPDATE“ oder „INSERT“ verhindert wird
(ERROR_FOR_DIVISION_BY_ZERO) oder neue Benutzer nicht ohne Passwort erstellt
werden können (NO_AUTO_CREATE_USER).
Fazit
MySQL 5 enthält grundsätzlich wichtige
Neuerungen, mit denen der Datenbankbetrieb sicherer und effektiver
gestaltet
werden kann. Mit Views, Triggern und Prozeduren werden auch die
fortgeschrittenen Datenbankentwickler bedient. Mit einer Vielzahl an
neuen Befehlen und Optionen steigt aber auch die Anforderung an den
Datenbank-Administrator.
Bis sich die Neuerungen in der Praxis durchsetzen, wird noch einige Zeit vergehen. Da MySQL insbesondere in
Internetumgebungen eingesetzt wird, ist die eingesetzte MySQL-Version vom
Internetprovider abhängig, soweit ein
Standardangebot ohne eigenen Serverzugang
genutzt wird. In der Vergangenheit haben die Internetprovider die
Updates von MySQL nachvollzogen – meist jedoch mit einer
Verzögerung von sechs bis 18 Monaten. So ist die vor etwa einem Jahr für den
Produktiveinsatz freigegebene Version 4.1 heute noch unterrepräsentiert.
Die größte Bremse für die Verbreitung von MySQL 5 werden
aber sicherlich die Anwendungsentwickler sein. Gerade weit
verbreitete OpenSource-Projekte, wie auch TYPO3, räumen der Abwärtskompatibilität einen relativ
hohen Stellenwert ein. So findet man in vielen OpenSource-Projekten noch nicht einmal die
Neuerungen von Version MySQL 4.1, wie beispielsweise Unterabfragen. Ein nicht unbeträchtlicher Teil der Zielgruppe verfügt noch
nicht über die Voraussetzung für den Einsatz der aktuellen Version und würde somit ausgeschlossen. Die
Verbreitung von MySQL 5 wird deshalb wahrscheinlich über
Intranetanwendungen oder Individuallösungen erfolgen und erst dann verbreitet
in OpenSource-Anwendungen zu finden sein.