Datenbanksystem-Unterschiede 3
Verfasst am: Donnerstag, 22. Mrz. 2012 um 16:01Im letzten Teil war bereits für Firebird und Oracle ein Datenbanktrigger enthalten, der die Aufgabe hatte, das Auto-ID Feld zu füllen. Der Vollständigkeit halber möchte ich heute einen einfachen Trigger für alle 3 Datenbanksysteme vorstellen. Da die syntaktischen Unterschiede zwischen den Triggern nicht größer sein könnten, werde ich die 3 SQL-Befehle relativ unkommentiert im Raum stehen lassen. Die Möglichkeiten des einzelnen Datenbanksystems sind in den jeweiligen Dokumentationen besser erfasst. Bevor ich jetzt auf die 3 Datenbanksysteme eingehe, möchte ich aber kurz erläutern was ein Trigger ist.
Was ist ein Trigger?
Ein Datenbanktrigger ist eine Datenbankfunktionalität, die in eigentlich jedem größeren Datenbanksystem integiert ist. Man kann sich einen Trigger wie ein kleines Programm vorstellen, das bei bestimmten Datenbankaktionen ausgeführt wird. Beispielsweise kann vor dem Einfügen eines Datensatzes geprüft werden, ob die Daten valide sind. Oder es wird ein Trigger erstellt, der das Erstellungsdatum des Datensatzes speichert.
Genau so ein Trigger soll mein Beispiel für den Vergleich zwischen MySQL,Firebird und Oracle sein. In der Tabelle bva_image speichert der Trigger in dem Feld mod_date das aktuelle Systemdatum ab, sobald ein Datensatz in der Tabelle hinzugefügt wird.
Trigger unter MySQL
CREATE TRIGGER bva_image_insert_timestamp BEFORE INSERT on bva_image FOR EACH ROW SET NEW.mod_date = NOW();
Trigger unter Firebird
CREATE TRIGGER bva_image_insert_timestamp FOR bva_image BEFORE INSERT AS BEGIN NEW.mod_date = CURRENT_TIMESTAMP; END
Trigger unter Oracle
CREATE OR REPLACE TRIGGER IMAGE_INSERT_TIMESTAMP BEFORE INSERT ON BVA_IMAGE FOR EACH ROW BEGIN :new.mod_date := SYSDATE; END;