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

MySQL – Optimale Größe für Feldtypen Was ich wirklich und mit aller Leidenschaft hasse, sind Programmierer die im Fire&Forget-Stil Größen von Feldtypen in MySQL setzen - und dann auch...
DbNinja – Online MySQL Manager Meine nicht vorhandene Vorliebe für phpMyAdmin habe ich ja schon ausreichend in diesem Blog dokumentiert (z.B.: hier, hier und hier) was nicht zuletzt...
MyWebSQL – als Alternative zu phpMyAdmin (re... Meine Meinung zu phpMyAdmin habe ich ja schon ausreichend verkündet: es hat seine Zeit gehabt, nun ist aber auch gut. Leider setzen noch alle großen P...
MySQL Datenbanken abgleichen mit Toad Wer kennt das nicht, man entwickelt etwas lokal und muss es dann Live stellen, ruft die Seite auf und Peng: nichts geht! Man hat lokal eine geänderte ...

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.