Ereignisplaner oder Timer in MySQL setzen

Mehvish Ashiq 3 Januar 2023
  1. MySQL Event und seine Bedeutung
  2. Ereignisplaner oder Timer in MySQL einstellen
  3. Fazit
Ereignisplaner oder Timer in MySQL setzen

Dieses Tutorial führt Sie durch die Erstellung eines EVENT, auch als MySQL-Timer bekannt.

Wir werden sehen, wie man in MySQL einen Timer setzt, damit MySQL Daten manipulieren kann (z. B. UPDATE/INSERT/DELETE-Daten). Es wird auch eine Sicherungskopie zum angegebenen Datum und zur angegebenen Uhrzeit erstellt (falls erforderlich).

Wir betrachten MySQL EVENT unter Berücksichtigung verschiedener Szenarien. Besprechen Sie auch seine Bedeutung und Vorteile. Für diesen Artikel verwenden wir die MySQL-Version 8.0.27, aber Sie können die neuere Version (falls verfügbar) von ihrer offiziellen Website erhalten.

MySQL Event und seine Bedeutung

MySQL EVENT ist eine Aufgabe, die verwendet wird, um einige Operationen zu planen – zum Beispiel das Aktualisieren der Spalten, das Übernehmen der Tabellen oder das Datenbank-Backup.

Sie können einen EVENT erstellen, der nur einmal ausgeführt wird, oder sich in bestimmten Intervallen wiederholen – zum Beispiel jede Minute, jede Stunde, jeden Monat oder jedes Jahr.

Es gibt keine feste Anzahl von Anweisungen, um ein EVENT zu erzeugen. Es kann viele Zeilen innerhalb des Körpers EVENT haben.

Wenn das EVENT mehr als eine Zeile hat, muss der Hauptteil in die Blöcke BEGIN und END eingeschlossen werden. Es ist auch wichtig zu wissen, dass geplante EVENT-Befehle in der Datenbank gespeichert und am geplanten DATE und TIME ausgeführt werden.

Das Erstellen eines Ereignisses ist für die folgenden Vorteile wichtig:

  • Hält alle auf derselben Seite
  • Setze deine Ziele
  • Verwalten Sie den Zeitplan und führen Sie die Ereignisse aus
  • Nützlich zum Optimieren von Tabellen, Aktualisieren von Daten
  • Generieren Sie nützliche Berichte für Nebenzeiten
  • Lassen Sie Ihre Aufgaben priorisieren
  • Spart Geld und Zeit

Ereignisplaner oder Timer in MySQL einstellen

Verzögerungen sind sowohl für das Produktionsteam als auch für die Marken sehr kostspielig.

Das Planen des EVENT oder das Einstellen eines Timers für bestimmte Felder (Spalten) und das anschließende Ablegen in einer separaten Datei für den Projektbericht spart Zeit. Auf diese Weise können sie sich auf andere produktive Aufgaben konzentrieren.

MySQL verwendet einen Thread namens event_scheduler, um alle Ereignisse auszuführen. Wenn der Wert von event_scheduler ON ist, wird nur dann das EVENT ausgeführt; andernfalls wird es nicht.

Sie müssen den folgenden Befehl verwenden, um den Wert von event_scheduler gleich ON zu setzen.

SET GLOBAL event_scheduler = ON;

Wenn Sie nun ein EVENT erzeugen, woher wissen Sie, dass es ausgeführt wird? Verwenden Sie zum Anzeigen den folgenden Befehl.

SHOW PROCESSLIST;

Sehen wir uns die Ausgabe vor und nach dem Setzen des Werts von event_scheduler auf ON an.

In der ersten Ausgabe können Sie das EVENT nicht ausführen, aber in der zweiten Ausgabe schon. Dies liegt daran, dass der event_scheduler für den zweiten Screenshot ON ist.

Ausgabe:

Ereignisplaner oder setze einen Timer in mysql - zeige Prozessliste Teil a

Ereignisplaner oder setze einen Timer in mysql - zeige Prozessliste Teil b

Sie können das EVENT für verschiedene Zwecke erzeugen – zum Beispiel läuft das EVENT nur einmal oder jährlich oder einmal, aber in den angegebenen Intervallen. Beginnen wir mit dem Verständnis mithilfe eines Beispielcodes.

Wir haben eine Tabelle student in der Datenbank person, die zum aktuellen Zeitpunkt die folgenden Datensätze enthält.

Ereignisplaner oder setze einen Timer in mysql - aktuelle Daten in Schülertabelle

Lassen Sie uns das folgende EVENT erstellen, um einmaliges Ereignis zu verstehen. Der Beispielcode ist unten angegeben.

SET GLOBAL event_scheduler = ON;

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
INSERT INTO person.student (id, FIRST_NAME, LAST_NAME, GENDER, EMAIL)
VALUES 
(7, 'Thomas', 'Christoper', 'Male', 'tchristopher@gmail.com');

Im oben angegebenen Code setzen wir den Wert von event_scheduler auf ON, um das EVENT auszuführen.

Dann haben wir ein EVENT erstellt, es als ONE_TIME_EVENT benannt und für CURRENT_TIMESTAMP geplant. Dieses EVENT stellt dar, dass es einmal am CURRENT_TIMESTAMP ausgeführt wird und dann abläuft.

Dieses EVENT wird nur erstellt, wenn es nicht existiert. Die Aufgabe dieses EVENT besteht darin, eine Zeile in der Tabelle student zu INSERT.

Überprüfen Sie nach dem Erstellen und Ausführen dieses EVENT die Tabelle student, um den neuen Datensatz zu sehen (siehe folgenden Screenshot).

Hinweis
Es ist möglich, dem EVENT einen beliebigen Namen zu geben, aber einen eindeutigen Namen. Die eindeutigen Namen der Ereignisse erleichtern Ihnen die Arbeit, wenn Sie viele Ereignisse haben.

Ausgabe:

Ereignisplaner oder setze einen Timer in mysql - aktualisierte Daten in der Schülertabelle

Nehmen wir an, Sie müssen ein EVENT ERSTELLEN, das nach 20 Sekunden des CURRENT_TIMESTAMP ausgeführt wird. Auch dieses Event wird nur einmal ausgeführt. Schreiben Sie den folgenden Code und verstehen Sie ihn.

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT_WITH_INTERVAL
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 SECOND
DO
INSERT INTO person.student 
VALUES 
(8, 'Suzu', 'Aly', 'Fmale', 'aly.suzu@yahoo.com');

Ausgabe:

Nach 20 Sekunden sehen Sie den neuen Datensatz in der Tabelle student.

Denken Sie daran, dass Sie diese neue Zeile in der Tabelle student nicht sehen, wenn Sie sie vor 20 Sekunden überprüfen. Lassen Sie die zwanzig Sekunden verstreichen und prüfen Sie dann.

Ereignisplaner oder setze einen Timer in mysql - aktualisierte Daten nach zwanzig Sekunden in der Schülertabelle

Verwenden Sie den folgenden Code, um anzuzeigen, wie viele Ereignisse erstellt und geplant werden.

SHOW EVENTS FROM classicmodels;

Ausgabe:

Ereignisplaner oder setze einen Timer in mysql - Ereignisliste

Warum ist eines der EVENT im obigen Screenshot nicht aufgeführt? Denn laut diesem Artikel sind alle unsere Events nun abgelaufen.

Sie können alle Ereignisse verfolgen, ob sie abgelaufen sind oder nicht, indem Sie die Klausel ON COMPLETION PRESERVE wie folgt verwenden.

CREATE EVENT TEST_PRESERVE_CLAUSE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO tests(test_name,test_date)
VALUES('Testing Preserve Clause',NOW());

Wie wäre es, wenn Sie ein EVENT erstellen, das am CURRENT_TIMESTAMP beginnt, jede MINUTE ausgeführt wird und nach einer HOUR abläuft. Es wird als wiederkehrendes Ereignis bezeichnet.

Sie können mithilfe des folgenden Codes erstellen und üben.

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

Im oben angegebenen Code teilen wir dem EVENT mit STARTS und ENDS die Start- und Endzeit mit. Sie können das Ereignis auch löschen, wenn Sie der Meinung sind, dass es jetzt nicht erforderlich ist.

Ersetzen Sie im folgenden Code den name durch Ihren EVENT-Namen.

DROP EVENT [IF EXIST] name;

Nehmen wir eine andere Situation, in der Sie das EVENT erstellt und den Auftrag an einen anderen Entwickler übergeben haben. Wäre es ohne COMMENT leicht verständlich? Natürlich nicht.

Erzeugen sie EVENT und üben Sie, indem Sie COMMENT wie folgt hinzufügen.

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
COMMENT 'It will add a new record every minture for one hour'
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

Wir haben das EVENT mit nur einer Zeile im EVENT-Körper gelernt. Was ist, wenn Sie mehrere Zeilen haben? Lassen Sie es uns anhand des folgenden Beispielcodes verstehen.

delimiter |
CREATE EVENT IF NOT EXISTS EVENT_FOR_UPDATE_COLUMNS_AND_DUMP
ON SCHEDULE AT current_timestamp
DO BEGIN
UPDATE student SET GENDER = 'M' WHERE student.GENDER = 'Male';
UPDATE student SET GENDER = 'F' WHERE student.GENDER = 'Female';
Table student INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';   
END |
delimiter ;

Sie sehen drei Abfragen im Körper EVENT im bereitgestellten Code. Wann immer Sie mehr als eine Zeile im EVENT-Körper haben, schließen Sie sie wie oben angegeben in BEGIN und END ein.

Wir haben ein EVENT erstellt, das in diesem Beispiel beim CURRENT_TIMESTAMP beginnt. Es aktualisiert die Spalte GENDER entsprechend der UPDATE-Anweisung und exportiert die Daten in eine .CSV-Datei.

Für den Export müssen Sie diesen Pfad C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv verwenden (wenn Sie MySQL in C Drive installiert haben). Andernfalls erhalten Sie den folgenden Fehler.

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Wenn Sie MySQL an einem anderen Ort installiert haben, verwenden Sie EVENT-Scheduler und verwenden Sie dann den folgenden Befehl, um den Pfad zu finden, in den Ihre Datei exportiert wird.

SHOW VARIABLES LIKE "secure_file_priv";  

Fazit

Wir haben in diesem Tutorial etwas über den MySQL EVENT-Scheduler gelernt.

Wir haben gelernt, wie man Ereignisse erstellt, die einmal gemäß den angegebenen Intervallen und nur einmal gemäß dem angegebenen Intervall ausgeführt werden. Wir haben uns auch damit beschäftigt, ein Ereignis mit vielen Zeilen zu erstellen, die Daten zu aktualisieren und sie dann in eine separate Datei zu exportieren.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook