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. 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:
|
Installieren der XML-Erweiterung in PHP Linux 1. ...
Dieser Artikel stellt einige Aspekte von HTML-Tag...
Inhaltsverzeichnis Kurze Analyse des MySQL Master...
Jeden Tag ein jQuery-Plugin - jQuery-Plugin zur I...
In diesem Artikel erfahren Sie, wie Sie das benut...
Persönliche Implementierungs-Screenshots: Install...
Umgebungsvorbereitung Docker-Umgebung MySQL 5.7 (...
In diesem Artikel wird der spezifische Implementi...
Durch die Verwendung von Dockerfile können Benutz...
Inhaltsverzeichnis Vorwort 1. for-Schleife 2. whi...
In diesem Artikel wird ein allgemeines Beispiel f...
Vom Einsteiger bis zum Neueinsteiger ist das Linu...
Inhaltsverzeichnis 1. Im Hintergrund laufende Job...
In der folgenden Analyse geht es um Produktdesign...
Vorwort Für die Berechtigungen von Dateien oder V...