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

web.config (IIS) und .htaccess (Apache) Konfiguration

xml <?xml version="1.0" encoding=&qu...

Zusammenfassung des Wissens zum MySQL-Protokoll

Inhaltsverzeichnis SQL-Ausführungsreihenfolge Bin...

Detaillierte Einführung in die gespeicherten MySQL-Funktionen

Inhaltsverzeichnis 1. Erstellen Sie eine gespeich...

So ändern Sie den MySQL-Zeichensatz utf8 in utf8mb4

Wenn für MySQL 5.5 der Zeichensatz nicht festgele...

Auszeichnungssprachen – Nochmal auflisten

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Beispiel für eine erzwungene Konvertierungsmethode für MySQL-Zeichenfolgen

Vorwort Da die Typen derselben Felder in den beid...

Lernprogramm für HTML-Webseitenlisten-Tags

Lernprogramm zum Erlernen von Listen-Tags für HTML...

Drei Netzwerkmethoden und Prinzipien von virtuellen VMware-Maschinen (Zusammenfassung)

1. Brigde——Bridge: VMnet0 wird standardmäßig verw...

js Canvas realisiert Slider-Verifizierung

In diesem Artikelbeispiel wird der spezifische Co...

So stellen Sie Tencent Cloud Server von Grund auf bereit

Da dies mein erster Beitrag ist, weisen Sie mich ...