Detaillierte Erläuterung der geplanten MySQL-Aufgaben (Ereignisereignisse)

Detaillierte Erläuterung der geplanten MySQL-Aufgaben (Ereignisereignisse)

1. Kurze Einführung in die Veranstaltung

Ein Ereignis ist ein prozedurales Datenbankobjekt, das MySQL zu einem bestimmten Zeitpunkt aufruft. Ein Event kann einmalig aufgerufen oder periodisch gestartet werden. Die Verwaltung übernimmt ein spezieller Thread, der sogenannte „Event Scheduler“.

Ereignisse ähneln Auslösern, da sie ausgelöst werden, wenn etwas passiert. Ein Trigger wird ausgelöst, wenn eine Anweisung in der Datenbank gestartet wird, während ein Ereignis basierend auf einem geplanten Ereignis ausgelöst wird. Aufgrund ihrer Ähnlichkeit zueinander werden Ereignisse auch als temporäre Auslöser bezeichnet.

Ereignisse ersetzen die Arbeit, die zuvor nur von den geplanten Aufgaben des Betriebssystems ausgeführt werden konnte, und der Ereignisplaner von MySQL kann genau eine Aufgabe pro Sekunde ausführen, während die geplanten Aufgaben des Betriebssystems (wie CRON unter Linux oder die Aufgabenplanung unter Windows) nur einmal pro Minute ausgeführt werden können.

2 Vor- und Nachteile von Events

2.1 Vorteile

Einige geplante Operationen an Daten sind nicht mehr auf externe Programme angewiesen, sondern nutzen direkt die von der Datenbank selbst bereitgestellten Funktionen.
Es ist möglich, jede Sekunde eine Aufgabe auszuführen, was in einigen Umgebungen mit hohen Echtzeitanforderungen sehr praktisch ist.

2.2 Nachteile

Zeitgesteuerter Auslöser, kann nicht aufgerufen werden.

3 Ereignisse erstellen

Eine „Create Event“-Anweisung erstellt ein Ereignis. Jedes Event besteht aus zwei Hauptteilen. Der erste Teil ist der Eventplan, der angibt, wann das Event gestartet wird und in welcher Häufigkeit.

Der zweite Teil ist die Ereignisaktion, also der Code, der ausgeführt wird, wenn das Ereignis ausgelöst wird. Die Ereignisaktion enthält eine SQL-Anweisung, die eine einfache Einfüge- oder Aktualisierungsanweisung oder eine gespeicherte Prozedur sein kann oder
benin...end statement block, diese beiden Situationen ermöglichen uns, mehrere SQL-Anweisungen auszuführen.

Ein Ereignis kann aktiv (offen) oder inaktiv (geschlossen) sein. Aktiv bedeutet, dass der Ereignisplaner prüft, ob die Ereignisaktion aufgerufen werden muss. Inaktiv bedeutet, dass die Deklaration des Ereignisses im Katalog gespeichert ist, der Planer jedoch nicht prüft, ob es aufgerufen werden soll. Nachdem ein Ereignis erstellt wurde, wird es sofort aktiv. Ein aktives Ereignis kann einmal oder mehrmals ausgeführt werden.

3.1 Die Erstellungssyntax lautet wie folgt

  ERSTELLEN 
    [DEFINER = { Benutzer | AKTUELLER_BENUTZER }] 
    EREIGNIS 
    [WENN NICHT EXISTIERT] 
    Ereignisname 
    IM ZEITPLAN Zeitplan 
    [NACH ABSCHLUSS [NICHT] BEWAHREN] 
    [AKTIVIEREN | DEAKTIVIEREN | AUF SLAVE DEAKTIVIEREN] 
    [KOMMENTAR 'Kommentar'] 
    DO Ereignistext; 
    
  Zeitplan: 
    AT-Zeitstempel [+ INTERVAL-Intervall] ... 
   | JEDES Intervall 
    [STARTS Zeitstempel [+ INTERVAL Intervall] ...] 
    [ENDS Zeitstempel [+ INTERVAL Intervall] ...] 
    
  Intervall: 
    Menge {JAHR | QUARTAL | MONAT | TAG | STUNDE | MINUTE | 
         WOCHE | SEKUNDE | JAHR_MONAT | TAG_STUNDE | TAG_MINUTE | 
         TAG_SEKUNDE | STUNDE_MINUTE | STUNDE_SEKUNDE | MINUTE_SEKUNDE}

Glossar:

event_name: Der Name des zu erstellenden Ereignisses (eindeutig bestimmt).
IM ZEITPLAN: Planen Sie die Aufgabe.
Zeitplan: bestimmt die Ausführungszeit und Häufigkeit des Ereignisses (beachten Sie, dass die Zeit in der Zukunft liegen muss, eine vergangene Zeit ist falsch). Es gibt zwei Formen: AT und EVERY.
[ON COMPLETION [NOT] PRESERVE]: Optional. Der Standardwert ist ON COMPLETION NOT PRESERVE, was bedeutet, dass das Ereignis automatisch gelöscht wird, nachdem die geplante Aufgabe ausgeführt wurde; ON COMPLETION PRESERVE löscht es nicht.
[COMMENT 'Kommentar']: Optional, der Kommentar wird zur Beschreibung des Ereignisses verwendet; entspricht einem Kommentar mit einer maximalen Länge von 64 Bytes.
[ENABLE | DISABLE]: Legt den Status des Ereignisses fest. Die Standardeinstellung ist ENABLE: Das System versucht, dieses Ereignis auszuführen. DISABLE: Deaktiviert das Ereignis. Sie können es mit „alter“ ändern.
DO event_body: Die auszuführende SQL-Anweisung (kann eine zusammengesetzte Anweisung sein). CREATE EVENT ist zulässig, wenn es innerhalb einer gespeicherten Prozedur verwendet wird.

3.2 Aktivieren und Deaktivieren des Ereignisplaners

3.2.1 MySQL-Ereignisplaner event_scheduler ist für den Aufruf von Ereignissen verantwortlich und standardmäßig geschlossen. Dieser Scheduler überwacht ständig, ob ein Event aufgerufen werden soll. Um ein Event anzulegen, muss der Scheduler geöffnet werden.

mysql> Variablen wie „%event_scheduler%“ anzeigen; 
+-----------------+--------+ 
| Variablenname | Wert | 
+-----------------+--------+ 
| event_scheduler | AUS | 
+-----------------+--------+

3.2.2 Ereignisplaner aktivieren

Über die Befehlszeile

Sie können eine der folgenden Befehlszeilen verwenden

Setzen Sie den Event_Scheduler global auf ON. 
SETZEN Sie @@global.event_scheduler = EIN; 
SETZEN SIE GLOBAL event_scheduler = 1; 
SET @@global.event_scheduler = 1;

Über die Konfigurationsdatei my.cnf

event_scheduler = 1 #oder EIN

Scheduler-Threads anzeigen

mysql> Prozessliste anzeigen; 
+----+-----------------+-----------+---------+---------+---------+---------------------+------------------+ 
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info | 
+----+-----------------+-----------+---------+---------+---------+---------------------+------------------+ 
| 2 | root | localhost | NULL | Abfrage | 0 | NULL | Prozessliste anzeigen | 
| 3 | event_scheduler | localhost | NULL | Daemon | 6 | Warte auf leere Warteschlange | NULL| 
+----+-----------------+-----------+---------+---------+---------+---------------------+------------------+

3.2.3 Schalten Sie den Ereignisplaner aus

Über die Befehlszeile

Sie können eine der folgenden Befehlszeilen verwenden

SETZEN SIE GLOBAL event_scheduler = OFF; 
SETZEN Sie @@global.event_scheduler = OFF; 
SETZEN SIE GLOBAL event_scheduler = 0; 
SET @@global.event_scheduler = 0;

Über die Konfigurationsdatei my.cnf

Hinzufügen unter [mysqld]

event_scheduler = 0 #oder AUS, DEAKTIVIERT

Scheduler-Threads anzeigen

mysql> Prozessliste anzeigen; 
+----+------+--------------+------+---------+------+---------+----------+-----------------+ 
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info | 
+----+------+--------------+------+---------+------+---------+----------+-----------------+ 
| 2 | root | localhost | NULL | Abfrage | 0 | NULL | Prozessliste anzeigen | 
+----+------+--------------+------+---------+------+---------+----------+-----------------+

3.3 Beispiel: Erstellen Sie eine Tabelle, um den Namen und den Ereignisstempel jedes Ereignisversands aufzuzeichnen

3.3.1 Erstellen einer Testtabelle

mysql> Tabelle löschen, falls vorhanden, events_list; 
mysql> Tabelle „events_list“ erstellen (Eventname varchar (20) ungleich null, Event_started-Zeitstempel ungleich null);

3.3.2 Ereignis 1 anlegen (Ereignis sofort starten)

Ereignis erstellen event_now 
planmäßig 
jetzt() 
fügen Sie in events_list Werte ein („event_now“, jetzt());

Anzeigen der Ergebnisse der Ereignisausführung

mysql> wähle * aus der Ereignisliste; 
+------------+---------------------+ 
| Ereignisname | Ereignis gestartet | 
+------------+---------------------+ 
| event_now | 01.07.2014 04:06:40 | 
+------------+---------------------+

3.3.3 Ereignis 2 erstellen (jede Minute ein Ereignis starten)

Ereignis „test.event_minute“ erstellen 
planmäßig 
jede Minute  
fügen Sie in events_list Werte ein („event_now“, jetzt());

Anzeigen der Ergebnisse der Ereignisausführung

mysql> wähle * aus Ereignisseliste; 
+------------+---------------------+ 
| Ereignisname | Ereignis gestartet | 
+------------+---------------------+ 
| event_now | 01.07.2014 04:26:53 | 
| event_now | 01.07.2014 04:27:53 | 
| event_now | 01.07.2014 04:28:53 | 
+------------+---------------------+

3.3.3 Ereignis 3 erstellen (Ereignis jede Sekunde starten)

Ereignis „event_now“ erstellen 
PLANMÄSSIG 
JEDE SEKUNDE
Fügen Sie in event_test VALUES (1) Folgendes ein:

3.3.4 Ereignis 4 erstellen (jede Sekunde eine gespeicherte Prozedur aufrufen)

CREATE DEFINER=`root`@`localhost` EVENT `eventUpdateStatus` 
PER ZEITPLAN IM JEDEN SEKUNDEN 
BEGINNT '2017-11-21 00:12:44' 
BEI FERTIGSTELLUNG BEWAHREN 
AKTIVIEREN 
Rufen Sie updateStatus() auf.

3.4 Hinweis:

Standardmäßig wird das erstellte Ereignis in der aktuellen Bibliothek gespeichert. Sie können sich auch die Bibliothek anzeigen lassen, in der das angegebene Ereignis erstellt wird.

Über „Ereignisse anzeigen“ können Sie nur die in der aktuellen Bibliothek erstellten Ereignisse anzeigen.

Das Ereignis wird nach der Ausführung freigegeben. Wenn das Ereignis sofort ausgeführt wird, wird es nach der Ausführung automatisch gelöscht. Sie können die Mehrfachaufrufe oder wartenden Ereignisse anzeigen.

Wenn zwei Ereignisse gleichzeitig aufgerufen werden müssen, bestimmt MySQL die Reihenfolge, in der sie aufgerufen werden. Wenn Sie die Reihenfolge angeben möchten, müssen Sie sicherstellen, dass ein Ereignis mindestens 1 Sekunde nach dem anderen Ereignis ausgeführt wird.

Bei rekursiv geplanten Ereignissen kann das Enddatum nicht vor dem Startdatum liegen.

Eine Auswahl kann in ein Ereignis aufgenommen werden, ihre Ergebnisse verschwinden jedoch, als wäre sie nicht ausgeführt worden.

4 Ereignisse anzeigen

Veranstaltungen der aktuellen Bibliothek anzeigen

mysql> Ereignisse anzeigen;

Alle Events anzeigen

mysql> wähle * aus mysql.event;

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So konfigurieren Sie geplante MySQL-Aufgaben (EVENT-Ereignisse) im Detail
  • Beispiele für die Implementierung und Verwendung von geplanten MySQL-Aufgaben
  • Analyse der Methode zum Einrichten geplanter Aufgaben in MySQL
  • So implementieren Sie geplante MySQL-Aufgaben zur Datensicherung unter Linux
  • Beispiel-Tutorial für geplante MySQL-Aufgaben
  • So implementieren Sie geplante MySQL-Aufgaben unter Linux
  • Analyse und Lösung der Gründe, warum geplante MySQL-Aufgaben nicht normal ausgeführt werden können

<<:  Detaillierte Erklärung des Unterschieds zwischen Docker-Compose-Ports und Expose

>>:  So verarbeiten Sie lokal dynamisch geladene Bilder in Vue

Artikel empfehlen

CSS- und HTML- und Front-End-Technologie-Schichtendiagramm

Front-End-Technologieschicht (Das Bild ist etwas e...

HTML-Formular-Tag-Tutorial (5): Textfeld-Tag

<br />Mit diesem Tag können Sie ein mehrzeil...

Detaillierte Analyse von GUID-Anzeigeproblemen in Mongodb

Finden Sie das Problem Ich habe kürzlich den Spei...

Der Einsatz von MySQL Triggern und worauf zu achten ist

Inhaltsverzeichnis Über Trigger Verwendung von Tr...

So lassen sich Python-Skripte direkt unter Ubuntu ausführen

Nehmen wir als Beispiel das Übersetzungsprogramm....

Javascript-Eingabebild-Upload und -Vorschau, FileReader-Vorschaubild

FileReader ist eine wichtige API für die Frontend...

Zusätzliche Anweisungen zur Verwendung von Gettern und Aktionen in Vuex

Vorbemerkungen 1.Unterschiede zwischen Vue2.x und...

CSS Sticky Footer-Implementierungscode

Dieser Artikel stellt den Implementierungscode fü...

Untersuchung der Wirkung der durch JS realisierten Seitenseitenleiste

Inhaltsverzeichnis Entdecken Sie: Anwendung von D...

So beheben Sie Dateisystemfehler in Linux mit „fsck“

Vorwort Das Dateisystem ist für die Organisation ...

So vermeiden Sie die Duplizierung von Daten beim Einfügen in einen MySql-Batch

Inhaltsverzeichnis Vorwort 1. Einfügen von ignore...