So konfigurieren Sie geplante MySQL-Aufgaben (EVENT-Ereignisse) im Detail

So konfigurieren Sie geplante MySQL-Aufgaben (EVENT-Ereignisse) im Detail

1. Was ist eine Veranstaltung?

Seit MySQL 5.1.6 wurde eine einzigartige Funktion hinzugefügt: der事件調度器, mit dem bestimmte Aufgaben (wie das Löschen von Datensätzen, Erstellen von Datenstatistikberichten, Datensicherung usw.) zu einem geplanten Zeitpunkt ausgeführt werden können, um die Arbeit zu ersetzen, die nur von den geplanten Aufgaben des Betriebssystems ausgeführt werden konnte.
Erwähnenswert ist, dass der Ereignisplaner von MySQL eine Aufgabe auf die Sekunde genau ausführen kann, während die geplanten Aufgaben des Betriebssystems (wie etwa Cron von Linux) nur auf einmal pro Minute genau ausgeführt werden können. Es eignet sich sehr gut für Anwendungen, die hohe Anforderungen an Echtzeitdaten stellen (wie Aktienkurse, Quoten, Spielstände usw.).

Ereignisse werden manchmal auch als temporäre Trigger bezeichnet, da der Ereignisplaner basierend auf einem bestimmten Zeitraum ausgelöst wird, um bestimmte Aufgaben auszuführen, während Trigger basierend auf Ereignissen ausgelöst werden, die von einer bestimmten Tabelle generiert werden. Das ist der Unterschied.

2. Aktivieren Sie die Funktion „Event“

Bevor Sie die Funktion „Event“ verwenden, müssen Sie sicherstellen, dass event_scheduler aktiviert ist

1. Prüfen Sie, ob die Funktion aktiviert ist:

- Methode 1 SELECT @@event_scheduler;
-- Methode 2: VARIABLEN ANZEIGEN WIE „event%“;

Wenn „ON“ angezeigt wird, bedeutet dies, dass die Funktion eingeschaltet wurde (siehe unten):

mysql> AUSWÄHLEN @@event_scheduler;
+---------------------------------+
| @@event_scheduler |
+---------------------------------+
| EIN |
+---------------------------------+
1 Zeile im Satz (0,00 Sek.)

mysql> VARIABLEN WIE 'event%' ANZEIGEN;
+-----------------+--------+
| Variablenname | Wert |
+-----------------+--------+
| event_scheduler | EIN |
+-----------------+--------+
1 Zeile im Satz (0,00 Sek.)

2. Funktionsbefehle aktivieren und deaktivieren:

-- Funktionsbefehl aktivieren:
SETZEN SIE GLOBAL event_scheduler = 1;
Setzen Sie den Event_Scheduler global auf ON.
-- Funktionsbefehl deaktivieren:
SETZEN SIE GLOBAL event_scheduler = 0;
SETZEN SIE GLOBAL event_scheduler = OFF;

Natürlich wird es automatisch geschlossen, wenn die Datenbank durch Öffnen des Befehls neu gestartet wird.

持久化開啟方式: Schreiben Sie event_scheduler=1 in die Konfigurationsdatei my.cnf, wie unten gezeigt:

Bildbeschreibung hier einfügen

Häufig verwendete Ereignisoperationsbefehle:

  • Schalten Sie das angegebene Ereignis aus: ALTER EVENT Ereignisname ON COMPLETION PRESERVE DISABLE;
  • Aktivieren Sie das angegebene Ereignis: ALTER EVENT Ereignisname ON COMPLETION PRESERVE ENABLE;
  • Aktuelle Ereignisse anzeigen: EREIGNISSE ANZEIGEN;

3. Ereignis - SQL-Syntax erstellen

Unten sehen Sie die Anweisung zur Erstellung eines EVENT-Ereignisses. Auf den ersten Blick ist sie ziemlich kompliziert. Lassen Sie uns sie aufschlüsseln und interpretieren.

EREIGNIS ERSTELLEN [WENN NICHT VORHANDEN] Ereignisname
   ON SCHEDULE-Zeitplan (Zeitplanungseinstellung)
   [NACH ABSCHLUSS [NICHT] BEWAHREN]
   [AKTIVIEREN | DEAKTIVIEREN | AUF SLAVE DEAKTIVIEREN]
   [KOMMENTAR 'Kommentar']
   DO SQL_Anweisung;

SQL-Syntax veranschaulichen
DEFINIERER Optional: Geben Sie den angegebenen Benutzern die Berechtigung
WENN NICHT EXISTIERT Optional, wird verwendet, um zu bestimmen, ob das zu erstellende Ereignis existiert
EREIGNIS Ereignisname Erforderlich. Gibt den Ereignisnamen an. Die maximale Länge von event_name beträgt 64 Zeichen. Wenn event_name nicht angegeben ist, wird standardmäßig der aktuelle MySQL-Benutzername verwendet (ohne Berücksichtigung der Groß-/Kleinschreibung).
IM ZEITPLAN Zeitplan Erforderlich. Der Zeitplan wird hier verwendet, um die Ausführungszeit und das Zeitintervall zu definieren. Wir werden es weiter unten ausführlich erklären.
BEI FERTIGSTELLUNG [NICHT] BEWAHREN Konfigurieren Sie optional die Verarbeitungsmethode, nachdem das Ereignis einmal ausgeführt wurde.
Wenn „Bei Abschluss beibehalten“ verwendet wird, wird das Ereignis nach Ablauf des Ereignisses deaktiviert, es bleibt aber bestehen. Wenn „Bei Abschluss beibehalten“ verwendet wird, wird das Ereignis nach Ablauf des Ereignisses automatisch gelöscht.
AKTIVIEREN, DEAKTIVIEREN, DEAKTIVIEREN AUF SLAVE Optional, wird verwendet, um ein Attribut des Ereignisses anzugeben.
ENABLE bedeutet, dass das Ereignis aktiviert ist, d. h. der Scheduler prüft, ob das Ereignis aufgerufen werden muss;
DISABLE bedeutet, dass das Ereignis deaktiviert ist, d. h. die Ereignisdeklaration wird im Verzeichnis gespeichert, aber der Scheduler prüft nicht, ob es aufgerufen werden soll;
DISABLE ON SLAVE zeigt an, dass das Ereignis im Slave deaktiviert ist. Wenn Sie keine dieser drei Auswahlmöglichkeiten angeben, wird ein Ereignis sofort nach seiner Erstellung aktiv.
KOMMENTAR 'Kommentar' Optional, wird verwendet, um Kommentare für das Ereignis zu definieren
DO Ereignistext Erforderlich, wird verwendet, um den Code anzugeben, der ausgeführt werden soll, wenn das Ereignis ausgelöst wird. Kann jede gültige SQL-Anweisung, gespeicherte Prozedur oder ein Ereignis sein, dessen Ausführung geplant ist. Wenn es mehrere Anweisungen enthält, können Sie die zusammengesetzte Struktur BEGIN...END verwenden.

Syntax schedule die Zeitplankonfiguration: Die Zeitplankonfiguration umfasst AT und EVERY

AT-Zeitstempel [+ INTERVAL-Intervall] ...
 | JEDES Intervall
 [STARTS Zeitstempel [+ INTERVAL Intervall] ...]
 [ENDS Zeitstempel [+ INTERVAL Intervall] ...]


-- Die in INTERVAL enthaltenen Zeiteinheiten sind wie folgt:
{JAHR | QUARTAL | MONAT | TAG | STUNDE | MINUTE |
 WOCHE | SEKUNDE | JAHR_MONAT | TAG_STUNDE | TAG_MINUTE |
 TAG_SEKUNDE | STUNDE_MINUTE | STUNDE_SEKUNDE | MINUTE_SEKUNDE}

1. Erstellen - Einzelnes geplantes Ausführungsereignis

AT TIMESTAMP Zeitzeichenfolge [+ INTERVAL INTERVAL]

AT TIMESTAMP bedeutet, dass das Ereignis nur einmal ausgeführt wird. TIMESTAMP stellt einen bestimmten Zeitpunkt dar, auf den ein Zeitintervall folgen kann, um anzuzeigen, dass das Ereignis nach diesem Zeitintervall auftritt. [+ INTERVAL INTERVAL] gibt die Verzögerungsauslösezeit an;

Es ist zu beachten, dass TIMESTAMP zusammen mit einer bestimmten Zeichenfolge verwendet wird. Wenn es sich nicht um eine bestimmte Zeichenfolge handelt (z. B. CURRENT_TIMESTAMP, um die aktuelle Zeit abzurufen usw.), wird TIMESTAMP nicht hinzugefügt.

Beispiel 1: Fügen Sie eine Datenzeile in die Tabelle demo_1119 ein. Ausführungszeit: 2020-11-20 00:00:00

EREIGNIS ERSTELLEN demo_event2 
IM ZEITPLAN ZUM ZEITSTEMPEL '2020-11-20 00:00:00' 
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())

Ergebnisabfrage:

mysql> wähle * aus demo_1119;
+-----+--------------------------+---------------------+
| ID | Name | Erstellungszeit |
+-----+--------------------------+---------------------+
| 145 | Chen Haha | 20.11.2020 00:00:00 |
+-----+--------------------------+---------------------+
9 Zeilen im Satz (0,00 Sek.)

Beispiel 2: Einfügen einer Datenzeile in die Tabelle demo_1119, Ausführungszeit: 5 Stunden nach der aktuellen Zeit;

EREIGNIS ERSTELLEN demo_event2 
ZEITPLANMÄSSIG UM CURRENT_TIMESTAMP + INTERVALL 5 STUNDEN
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())

2. Erstellen - Zeitgesteuertes Ausführungsereignis in Schleife

JEDES INTERVALL [BEGINNT ZEITSTEMPEL] [ENDET ZEITSTEMPEL]

EVERY表示循環執行該事件. Dabei wird die Startzeit mit der STARTS Klausel und die Endzeit mit der ENDS -Klausel angegeben.

Beispiel 1: Von nun an fügen Sie alle 10 Sekunden eine Datenzeile in die Tabelle demo_1119 ein

VERANSTALTUNG ERSTELLEN demo_event3 
PÜNKTLICH ALLE 10 SEKUNDEN 
BEI FERTIGSTELLUNG BEWAHREN 
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())
mysql> wähle * aus demo_1119;
+-----+--------------------------+---------------------+
| ID | Name | Erstellungszeit |
+-----+--------------------------+---------------------+
| 145 | Chen Haha | 19.11.2020 11:10:39 |
| 146 | Chen Haha | 19.11.2020 11:10:49 |
| 147 | Chen Haha | 20.11.2020 11:10:59 |
| 148 | Chen Haha | 20.11.2020 11:11:09 |
| 149 | Chen Haha | 20.11.2020 11:11:19 |
| 150 | Chen Haha | 20.11.2020 11:11:29 |
| 151 | Chen Haha | 20.11.2020 11:11:39 |
+-----+--------------------------+---------------------+
9 Zeilen im Satz (0,00 Sek.)

Beispiel 2: Ab 20.11.2020 12:00:00 Uhr alle 10 Minuten eine Datenzeile in die Tabelle demo_1119 einfügen

VERANSTALTUNG ERSTELLEN demo_event4 
FAHRPLANMÄSSIG ALLE 10 MINUTEN BEGINNT '2020-11-20 12:00:00' 
BEI FERTIGSTELLUNG BEWAHREN 
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())
mysql> wähle * aus demo_1119;
+-----+--------------------------+---------------------+
| ID | Name | Erstellungszeit |
+-----+--------------------------+---------------------+
| 152 | Chen Haha | 20.11.2020 12:00:00 |
| 153 | Chen Haha | 20.11.2020 12:10:00 |
| 154 | Chen Haha | 20.11.2020 12:20:00 |
| 155 | Chen Haha | 20.11.2020 12:30:00 |
| 156 | Chen Haha | 20.11.2020 12:40:00 |
+-----+--------------------------+---------------------+
5 Zeilen im Satz (0,00 Sek.)

Beispiel 3: Beginnen Sie eine Stunde nach der aktuellen Zeit und fügen Sie alle 10 Minuten eine Datenzeile in die Tabelle demo_1119 ein. Sie wurde getestet und ist verfügbar, daher werde ich keine redundanten Abfragedaten veröffentlichen ~

VERANSTALTUNG ERSTELLEN demo_event5 
GEMÄSS ZEITPLAN ALLE 10 MINUTE BEGINNT CURRENT_TIMESTAMP+INTERVALL 1 STUNDE 
BEI FERTIGSTELLUNG BEWAHREN 
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())

Beispiel 4: Beginnen Sie einen Tag ab der aktuellen Zeit, fügen Sie jede Stunde eine Datenzeile in die Tabelle demo_1119 ein und beenden Sie nach drei Tagen

VERANSTALTUNG ERSTELLEN demo_event5 
JEDE STUNDE GEMÄSS ZEITPLAN 
BEGINNT CURRENT_TIMESTAMP+INTERVALL 1 TAG 
ENDET CURRENT_TIMESTAMP+INTERVALL 3 TAGE 
BEI FERTIGSTELLUNG BEWAHREN 
INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, 'Erstellungszeit', NOW())

Beispiel 5: Löschen Sie die Daten in der Tabelle demo_1119 jeden Tag um 0:00 Uhr

VERANSTALTUNG ERSTELLEN demo_event5 
IM ZEITPLAN: JEDEN TAG BEGINNT '2020-11-20 00:00:00' 
BEI FERTIGSTELLUNG BEWAHREN 
DO TRUNCATE-Tabelle `demo_1119`

3. Ereignisse ändern

Die Anweisung „Modify Event“ ist genau dieselbe wie die Anweisung „Create“. Die Syntax lautet wie folgt:

ALTER EVENT Ereignisname
   [ONSCHEDULE-Zeitplan]
   [alter_NAME ZU neuer_NAME]
   [NACH ABSCHLUSS [NICHT] BEWAHREN]
   [KOMMENTAR 'Kommentar']
   [AKTIVIEREN | DEAKTIVIEREN]
   [DO SQL_Anweisung]

Schalten Sie die Ereignisaufgabe aus: ALTER EVENT Ereignisname ON COMPLETION PRESERVE DISABLE;

Ereignisaufgabe aktivieren: ALTER EVENT Ereignisname ON COMPLETION PRESERVE ENABLE;

4. Ereignisse löschen

DROP EVENT [WENN EXISTIERT] Ereignisname

4. Events – Erstellen mit Navicat (empfohlen)

Viele Leute geben gerne SQL-Anweisungen in die Befehlszeile ein, was ihnen ein Gefühl von Professionalität verleiht, aber sie können auch von ihren Vorgesetzten moralisch entführt werden~~

Manche Führungskräfte denken, es sei cool und beeindruckend, wenn ihre Mitarbeiter Google verwenden, aber es sei unerwünscht, Baidu für die Suche nach CSDN zu verwenden. Aber als Neuling verwende ich immer noch gerne mein Navicat-Gadget und Baidu. Okay, ohne weitere Umschweife, schauen wir uns an, wie Navicat EVENT-Ereignisse erstellt, LOS!

Klicken Sie wie unten gezeigt mit der rechten Maustaste, um ein neues Ereignis zu erstellen

Bildbeschreibung hier einfügen

定義im Erstellungsereignis wird zum Schreiben des Ausführungs-SQL verwendet, das eine oder mehrere SQL-Anweisungen, gespeicherte Prozeduren usw. enthalten kann.計劃wird zum Definieren der Ereignisauslösezeit verwendet. Wie unten gezeigt, habe ich während der Ausführung eine Einfügeanweisung definiert.

Bildbeschreibung hier einfügen

Natürlich können Sie auch mehrere SQL-Anweisungen gleichzeitig mit Semikolons dazwischen schreiben. Beginnen Sie mit BEGIN und enden Sie mit END.

Bildbeschreibung hier einfügen

Öffnen Sie die Plan-Spalte. Kommt es Ihnen nicht bekannt vor? Dies haben wir im vorherigen Modul gesehen. Damit unsere Freunde einen tieferen Eindruck bekommen, wollen wir es noch einmal durchgehen.

Bildbeschreibung hier einfügen

Parameterbeschreibung:

AT : Gibt an, dass das Ereignis nur einmal ausgeführt wird. Sie können eine bestimmte Zeit festlegen oder CURRENT_TIMESTAMP verwenden, um die aktuelle Zeit darzustellen, gefolgt von einem interval , das angibt, wie lange nach dieser Zeit das Ereignis auftritt, was die verzögerte Auslösezeit angibt.

  • EVERY : Führt das Ereignis wiederholt aus, wobei STARTS Klausel verwendet wird, um die Startzeit anzugeben;
  • Mit der ENDS -Klausel wird die Endzeit angegeben.
  • interval :表示從現在開始時間延遲多久以后的一個時間點. Sein Wert besteht aus einer Zahl und einer Einheit. Verwenden Sie beispielsweise „4 WEEK“, um 4 Wochen ab jetzt anzugeben; verwenden Sie „'1:10' HOUR_MINUTE“, um 1 Stunde und 10 Minuten ab jetzt anzugeben. Der Intervallabstand wird durch die Funktion DATE_ADD() bestimmt.

Die in INTERVAL enthaltenen Zeiteinheiten sind wie folgt:

JAHR | QUARTAL | MONAT | TAG | STUNDE | MINUTE | WOCHE | SEKUNDE |
JAHR_MONAT | TAG_STUNDE | TAG_MINUTE |
TAG_SEKUNDE | STUNDE_MINUTE | STUNDE_SEKUNDE | MINUTE_SEKUNDE

Okay, verwenden wir einige Beispiele, um es einprägsamer zu machen: Beispiel 1: Einfügen einer Datenzeile in die Tabelle demo_1119, Ausführungszeit: 2020-11-20 00:00:00

Bildbeschreibung hier einfügen Beispiel

2: Fügen Sie eine Datenzeile in die Tabelle demo_1119 ein, Ausführungszeit: 5 Stunden nach der aktuellen Zeit;

Bildbeschreibung hier einfügen

Beispiel 3: Von nun an fügen Sie alle 10 Sekunden eine Datenzeile in die Tabelle demo_1119 ein

Bildbeschreibung hier einfügen

Beispiel 4: Ab 20.11.2020 12:00:00 Uhr alle 10 Minuten eine Datenzeile in die Tabelle demo_1119 einfügen

Bildbeschreibung hier einfügen

Beispiel 5: Beginnen Sie eine Stunde nach der aktuellen Zeit und fügen Sie alle 10 Minuten eine Datenzeile in die Tabelle demo_1119 ein.

Bildbeschreibung hier einfügen

Beispiel 6: Beginnen Sie einen Tag ab der aktuellen Zeit, fügen Sie jede Stunde eine Datenzeile in die Tabelle demo_1119 ein und beenden Sie nach drei Tagen

Bildbeschreibung hier einfügen

Beispiel 7: Löschen Sie die Daten in der Tabelle demo_1119 jeden Tag um 0:00 Uhr

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels zum Konfigurieren von geplanten MySQL-Aufgaben (EVENT-Ereignisse). Weitere relevante geplante MySQL-Aufgaben finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Erste Schritte mit gespeicherten Prozeduren, Triggern und Ereignisplanern in MySQL
  • MySQL-Datenbank-Trigger vom Anfänger bis zum Profi
  • Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels
  • Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern
  • Detaillierte Erläuterung der Idee des MySQL-Triggers zur Echtzeiterkennung einer Anweisung zum Sichern und Löschen
  • MySQL verwendet Ereignisse, um geplante Aufgaben abzuschließen
  • Erfahren Sie mehr über den Ereignisplaner EVENT in MySQL
  • Analyse der geplanten Aufgaben und Ereignisplanungsbeispiele von MySQL
  • Themenverfeinerung für MySQL-Ereignisse und -Trigger

<<:  W3C Tutorial (6): W3C CSS Aktivitäten

>>:  Analyse des Prinzips von Nginx + Tomcat zur Erreichung eines Lastausgleichs sowie einer dynamischen und statischen Trennung

Artikel empfehlen

Fassen Sie einige häufige Rankingprobleme in MySQL zusammen

Vorwort: In manchen Anwendungsszenarien stoßen wi...

Eine kurze Analyse der Netzwerkprogrammierfunktionen von Linux

Inhaltsverzeichnis 1. Erstellen Sie einen Socket ...

So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist

Befehl: mysqlhotcopy Dieser Befehl sperrt die Tab...

Schritt-für-Schritt-Anleitung zum Erstellen einer Kalenderkomponente mit React

Inhaltsverzeichnis Betriebswirtschaftlicher Hinte...

Webdesigner sollten Webseiten unter drei Aspekten optimieren

<br />Mit der zunehmenden Bandbreite werden ...

Vue realisiert die Funktion eines Bucheinkaufswagens

In diesem Artikelbeispiel wird der spezifische Co...

Datendiebstahl mit CSS in Firefox

0x00 Einführung Vor einigen Monaten habe ich eine...