MySQL verwendet Trigger, um das Zeilenlimit der Tabelle in der Datenbank zu lösen. Detaillierte Erklärung und Beispiele

MySQL verwendet Trigger, um das Zeilenlimit der Tabelle in der Datenbank zu lösen. Detaillierte Erklärung und Beispiele

MySQL verwendet Trigger, um das Zeilenlimit der Tabelle in der Datenbank zu lösen. Detaillierte Erklärung und Beispiele

Eine aktuelle Projektanforderung besteht darin, die Anzahl der Betriebsprotokolle auf 100.000 zu begrenzen. Wenn mehr als 100.000 vorhanden sind, wird das älteste gelöscht und die Anzahl der in der Datenbank gespeicherten Protokolle wird 100.000 nicht überschreiten.
Mein erster Gedanke war, einen Trigger zu verwenden, also habe ich das folgende SQL in der Datenbank ausgeführt:

Trennzeichen $
Trigger-LimitLog erstellen
vor
einfügen
im OperationLog
für jede Zeile
beginnen
wenn (wähle count(*) aus OperationLog) > 100000 dann
aus dem OperationLog-Limit 1 löschen;
Ende wenn;
Ende $

Trennzeichen ;

Es scheint, dass es kein Problem gibt. Vor dem Einfügen wird eine Prüfung durchgeführt und wenn die Zahl 100.000 überschreitet, wird die Löschung ausgeführt. Wenn die tatsächliche Datenbank jedoch 100.000 Datensätze überschreitet, tritt bei der Ausführung der IF-Anweisung ein Problem auf und MySQL meldet einen Fehler:

FEHLER 1442 (HY000): Tabelle 'OperationLog' kann nicht aktualisiert werden im gespeicherten 
Funktion/Trigger, da diese bereits von der Anweisung verwendet wird, die aufgerufen hat 
diese gespeicherte Funktion/Auslöser.

Nach Durchsicht der Informationen habe ich herausgefunden, dass MySQL, um die Ausführung rekursiver Endlosschleifen von Triggern zu verhindern, nicht zulässt, dass DML-Operationen (SELECT, DELETE, UPDATE, INSERT) direkt auf einer Tabelle im Trigger einer bestimmten Tabelle ausgeführt werden. Natürlich können solche Operationen auf anderen Tabellen ausgeführt werden.

Trigger beschränken die DML-Operationen, die an der Tabelle ausgeführt werden können. Der Trigger kann die Datenzeile ändern, die vor oder nach Ihrer Ausführung über das Schlüsselwort „Set“ ausgeführt werden soll.

Trennzeichen $
Trigger „setLog“ erstellen
vor
einfügen
im OperationLog
für jede Zeile
beginnen
setze NEW.action = "test";
Ende $

Trennzeichen ;

Die obige Anweisung gibt an, dass vor dem Einfügen in die OpetationLog-Tabelle der Aktionsfeldwert der eingefügten Daten zum Testen aktualisiert wird. NEU gibt das neu hinzugefügte Feld an und ALT gibt das Feld an, wenn es gelöscht wird. Beim Aktualisieren können NEU und ALT gleichzeitig verwendet werden.

Temporäre Auslöser

Die gerade besprochenen Trigger werden basierend auf Ereignissen ausgelöst, die von einer bestimmten Tabelle generiert werden, während temporäre Trigger, auch Ereignisplaner genannt, basierend auf einem bestimmten Zeitraum ausgelöst werden, um bestimmte Aufgaben auszuführen. Der Ereignisplaner von MySQL kann eine Aufgabe auf die Sekunde genau ausführen, während die geplanten Aufgaben des Betriebssystems (wie CRON unter Linux oder die Aufgabenplanung unter Windows) 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.).

Bevor Sie diese Funktion verwenden, müssen Sie sicherstellen, dass event_scheduler aktiviert und ausführbar ist

 GLOBAL event_scheduler = 1;

oder

Setzen Sie den Event_Scheduler global auf ON.

Um zu überprüfen, ob der Ereignisplaner derzeit aktiviert ist, führen Sie den folgenden SQL-Befehl aus:

VARIABLEN WIE „event_scheduler“ ANZEIGEN;

oder

Wählen Sie @@event_scheduler;

oder

PROZESSLISTE ANZEIGEN;

Die am Anfang des Artikels genannten Probleme können mit diesem Mechanismus problemlos gelöst werden:

Trennzeichen $
EREIGNIS-LimitLog nach Zeitplan alle 1 Sekunde erstellen. AUSFÜHREN, WENN (Anzahl(*) aus OperationLog auswählen) > 100000, dann aus OperationLog-Limit 1 löschen; ENDE, WENN $
 Trennzeichen ;

Nachgewiesene Wirksamkeit

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der MySQL-Datenbank-Trigger
  • Erste Schritte mit gespeicherten Prozeduren, Triggern und Ereignisplanern in MySQL
  • Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels
  • Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern
  • Verwendung von MySQL-Triggern
  • Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt
  • Verwendung von MySQL-Triggern
  • Detaillierte Erklärung des MySQL-Triggerbeispiels
  • MySQL-Datenbank-Trigger vom Anfänger bis zum Profi

<<:  Detaillierte Erläuterung der drei Möglichkeiten zum Konfigurieren virtueller Nginx-Hosts (basierend auf IP)

>>:  Probleme und Lösungen bei der Verwendung des V-Modells zum bidirektionalen Binden der Werte von übergeordneten und untergeordneten Komponenten in Vue

Artikel empfehlen

Detaillierte Schritte zur Installation der XML-Erweiterung in PHP unter Linux

Installieren der XML-Erweiterung in PHP Linux 1. ...

Achten Sie bei der Webseitenerstellung auf die Verwendung von HTML-Tags

Dieser Artikel stellt einige Aspekte von HTML-Tag...

Dieser Artikel zeigt Ihnen das Prinzip der MySQL Master-Slave-Synchronisation

Inhaltsverzeichnis Kurze Analyse des MySQL Master...

jQuery-Plugin zum Erzielen eines Karusselleffekts

Jeden Tag ein jQuery-Plugin - jQuery-Plugin zur I...

Detaillierte Erklärung zur Verwendung der benutzerdefinierten Vue-Baumsteuerung

In diesem Artikel erfahren Sie, wie Sie das benut...

HTML-Zeichnungsbenutzer-Registrierungsseite

In diesem Artikel wird der spezifische Implementi...

Erläuterung der Dockerfile-Anweisungen und der grundlegenden Struktur

Durch die Verwendung von Dockerfile können Benutz...

JavaScript implementiert Produktdetails der E-Commerce-Plattform

In diesem Artikel wird ein allgemeines Beispiel f...

VMware Workstation-Installation unter Linux

Vom Einsteiger bis zum Neueinsteiger ist das Linu...

Mehrere Grundsätze für die Produktdesign-Referenz auf Websites

In der folgenden Analyse geht es um Produktdesign...

Ausführliche Erklärung der Sonderberechtigungen SUID, SGID und SBIT in Linux

Vorwort Für die Berechtigungen von Dateien oder V...