Events in MySQL – das ungeliebte Kind

Events in MySQL ist eine Technik, die ähnliche wie Triggers und Stored Procedures kaum Verwendung finden. Das wiederum liegt an der Tatsache (und man möge jetzt nicht auf mich einschlagen) das nur die wenigstens den Umgang mit einer Datenbank erlernt haben, sondern diese lediglich als Datenspeicher sehen. Ich habe schon ausreichend Seiten in meinem Leben alleine dadurch in astronomische Geschwindigkeitswelten katapultiert, indem ich Indexe eingeführt habe.

Also, man möchte eine Log-Datei alle Einträge löschen die älter sind als 14 Tage. Wie macht man das? Man programmiert die Funktion in PHP, setzt einen Cron auf und fertig ist das Ganze. Kann so funktionieren, muss aber nicht, denn man kann das Problem ohne PHP, und ohne Cron direkt in MySQL lösen – mit Events.

Zunächst einmal muss man den Event Scheduler in MySQL einschalten:

SET GLOBAL event_scheduler = ON;

und kann dann überprüfen was wann wo passiert:

SHOW EVENTS;

In den meisten Fällen fördert dies zu Tage, das keine Events eingerichtet worden sind. Dabei ist das Anlegen eines Events recht einfach:

DELIMITER |
 
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |
 
DELIMITER ;

Ausgehend von der aktuellen Uhrzeit würde MySQL für oben stehende Query ab sofort jede Stunde den Update-Befehl ausführen. Ich denke das ist etwas einfacher als ein PHP-Skript und ein Cron! Natürlich kann man einen bestehenden Event auch abändern, bzw. aussetzen. Man kann auch dafür sorgen das ein Event nur einmal zu einer bestimmten Uhrzeit ausgeführt wird, und ähnliche Späße.

Lange Rede, kurzer Sinn: PHP ist nicht immer die erste Wahl, MySQL kann eine Menge selbst – sogar ohne Cron. Wer sich mehr mit Events in MySQL beschäftigen will, sollte mal ein Blick auf das folgende Tutorial werfen.

Ähnliche Beiträge

Openark-Kit – coole Tools für MySQL Shlomi Noach hat eine interessante Tool-Sammlung für MySQL veröffentlicht. Das Ganze funktioniert über die Shell und setzt Python voraus. Die Tools si...
SQLite mit Lita administrieren Zugegebenermaßen ist SQLite nicht weit verbreitet – denkt man zumindest ;) 98% der Webworker nutzen MySQL und rücken von diesem Standard keinen Zentim...
Brave new World: Was ist eigentlich NoSQL !? Derzeit entsteht ein regelrechter Hype um die sogenannten NoSQL-Datenbanken wie zum Beispiel CouchDB oder MongoDB, aber was ist das eigentlich? Wie de...
DBKiss – eine weitere Alternative zu phpMyAdmin Meine Meinung bzgl. phpMyAdmin dürfte inzwischen hinlänglich bekannt sein, ich für meinen Teil benutze inzwischen fast nur noch Adminer für das Frank ...

3 Antworten auf „Events in MySQL – das ungeliebte Kind“

  1. Hatte heute in der Vorlesung von unserem Prof das gleiche Thema um die Ohren gehauen, der jedoch meinte Events gingen nur unter Oracle. Kam mir schon spanisch vor und dein Artikel hat mir das Gegenteil bewiesen^^v Events find ich ebenfalls sehr praktisch und werd ich jetzt demnächst in einigen Projekten unterbringen^^

    Grüße!

  2. Danke erst mal für dieses interessante Feature von MySQL. Das kannte ich in der Tat noch nicht, auch wenn ich MySQL schon recht „advanced“ nutze.

    Was für mich jedoch gegen MySQL-Events (genauso wie Trigger und Stored Procedures) spricht: Es passiert sehr viel Magic und keiner kann es nachvollziehen. Wenn da ein Fehler drin ist, sucht man sich sicher eine ganze Weile tot. Deshalb mag ich meine Crons in der Crontab und meine SQL-Statements im Code.

    Sicher gibt es Einsatzbereiche wo das Sinn macht. Aber wenn sollte der Grund wirklich Performance sein und nicht nur weil es geht oder Fancy ist. Und ein Cron, der dieses Statement absetzt ist auch mit wenigen Zeilen geschrieben und den kann man auch noch schön im SVN oder Github versionieren. =)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.