Heim >Backend-Entwicklung >PHP-Tutorial >Aktionsautomatisierung mit MySQL -Triggern

Aktionsautomatisierung mit MySQL -Triggern

William Shakespeare
William ShakespeareOriginal
2025-02-25 17:52:09180Durchsuche

Action Automation with MySQL Triggers

Kernpunkte

  • MySQL -Trigger vereinfachen PHP -Projekte mit automatisierten Vorgängen wie Datenbankabfragen, Dateivorgängen und Datenverarbeitung. Sie werden automatisch vor oder nach Aktionen (einfügen, aktualisieren, löschen) auf der Tabelle aufgerufen.
  • Auslöser wurden in MySQL Version 5.0.2 eingeführt und erfordern entsprechende Berechtigungen, die erstellt werden müssen. Sie müssen einen eindeutigen Namen in der Datenbank haben, in dem sie erstellt werden, und werden nur dann abgefeuert, wenn die ursprüngliche SQL -Anweisung ausgeführt wird.
  • Auslöser tragen dazu bei, die Integrität einer Reihe von Tabellen aufrechtzuerhalten, die statistischen Tabellen automatisch zu erhöhen oder zu verringern, wenn neue Einfügungen/Löschungen geändert werden, Änderungen an Daten in der Datenbank aufzeichnen und Tabellen mit anderen Tabellen synchronisiert halten.
  • MySQL -Trigger können sich positiv auf die Leistung auf die Website auswirken und es Entwicklern ermöglichen, viel PHP -Code für den Betrieb zu schreiben. Sie können verwendet werden, um automatisch Aufgaben auszuführen, die auf bestimmte Datenänderungen reagieren.

Viele der Code, die wir schreiben, besteht darin, eine Operation durchzuführen. Unabhängig davon, ob es sich um Datenbankabfragen, Dateioperationen, Datenverarbeitung usw. handelt, können Sie unsere Skripte ermöglichen, ihren beabsichtigten Zweck zu erreichen. Aber haben Sie bemerkt, wie viel Code Sie manchmal schreiben müssen, um eine frühere Operation zu überprüfen? Eines meiner jüngsten Projekte beinhaltete ein ziemlich umständliches Problem, das mich dazu veranlasste, unzählige Abfragen zu verwenden, um sicherzustellen, dass alle Daten nach jedem Vorgang in meiner Tabelle synchronisiert bleiben. Dies ist alles andere als elegant, und es hätte ein ziemlich einfaches Skript sein sollen, aber es ist zu einer komplexen Abfrageseite geworden. Aus Wartungspunkt ist dies nicht möglich und es ist ein Albtraum, wenn ich einen Teil der Seite der Seite aktualisieren möchte. Hier geht der MySQL -Trigger in mein Projekt ein. Indem MySQL mehr mit Triggern arbeiten lässt, ist die PHP -Seite meines Projekts stark vereinfacht. Der Zweck dieses Artikels ist es daher, Ihnen ein tieferes Verständnis der Erstellung und Verwendung von MySQL -Triggern zu vermitteln, damit Sie sie am Ende Ihrer Lektüre in Ihrem eigenen Projekt verwenden können.

Was ist ein MySQL -Auslöser?

Trigger wurden in MySQL Version 5.0.2 eingeführt und sind nur eine der zusätzlichen Funktionen von MySQL, die uns helfen können, unsere Arbeit als Entwickler zu vereinfachen. Sie werden automatisch vor oder nach Aktionen (einfügen, aktualisieren, löschen) auf der Tabelle aufgerufen. Sie müssen über die entsprechenden Berechtigungen verfügen, um einen Auslöser zu erstellen. Vor MySQL 5.1.6 brauchten Sie Superberechtigungen, aber in 5.1.6 änderte sich dies und Sie brauchten Triggerberechtigungen. Normalerweise erlaubt ein gemeinsamer Hosting -Plan nicht Super, da er leicht missbraucht wird. Möglicherweise können Sie sie nur auf Servern verwenden, die Sie mehr Berechtigungen haben, z. Mysql Version. Hier sind einige andere schnelle Anweisungen zu Triggern:

  • Sie müssen in der Datenbank, in der sie erstellt wurden, einen eindeutigen (fallinsensitiven) Namen haben.
  • Nur ein Auslöser mit demselben Ereignis (Update/Einfügen/Löschen) und Zeit (vor/nachher).
  • Wenn eine Tabelle gelöscht wird, wird auch der damit verbundene Abzug gelöscht.
  • Sie können die Trigger (im Gegensatz zu Ereignissen) mithilfe der Alter Anweisung nicht explizit ändern. Sie müssen den Auslöser löschen und nachbilden.
  • Auslöser werden nur ausgelöst, wenn die ursprüngliche SQL -Anweisung ausgeführt wird.

Schauen wir uns nun die grundlegende Syntax des Triggers an, indem wir ihn in seine ursprüngliche Form zerlegen:

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Wenn Sie einen Auslöser erstellen, können Sie wählen, ob er vor oder nach der Aktion ausgelöst wird. Wenn Sie eingehende Daten ändern möchten, die in die Datenbank eingeben, benötigen Sie zuvor. Wenn Sie jedoch aufgrund einer früheren Aktion etwas tun, sollten Sie die After -Anweisung verwenden. Die Operation, die den Auslöser auslöst, kann einfügen, aktualisieren oder löschen, da diese drei Anweisungen die einzigen Aussagen sind, die dazu führen, dass die Daten in der Tabelle geändert werden.

Wenden Sie den Auslöser auf die tatsächliche Situation

an

Trigger sind in vielen Fällen sehr nützlich. Eine bekannte Verwendung besteht darin, die Integrität eines Tabellensatzes zu erhalten, indem die Löschung veralteter Datensätze ausgelöst wird, wenn Fremdschlüsse nicht verwendet werden. Sie können auch verwendet werden, um statistische Tabellen automatisch zu erhöhen oder zu verringern, wenn neue Einfügungen/Löschungen, Änderungen der Daten in der Datenbank aufgezeichnet, Tabellen mit anderen Tabellen synchronisiert werden und mehr. In diesem Artikel werden wir sie verwenden, um einige Berechnungen vorzubereiten. Dies ist der Fall, dass wir ein Unternehmen haben, das seine Hallen für 30 Pfund pro Stunde mietet. Sie erfassen den Namen, die Start- und Endzeit jeder in der Halle gehaltenen Veranstaltung und berechnen dann die Zeit und die Ausgaben, die in der Einkommenstabelle zu zahlen sind. Der Name und die Startzeit des Ereignisses werden ursprünglich in die Ereignisstabelle eingefügt, um die Lobby zu buchen, und dann werden die Mietkosten in dieser Zeile erst nach dem Ende des Ereignisses aktualisiert. Die Dauer des Ereignisses (in Minuten) muss berechnet werden, wo die Startzeit von der Endzeit abgezogen wird, und die Mietgebühr wird dann berechnet, indem die Gesamtzeit um 0,5 (£ 30 pro Stunde, 50 Pence pro Stunde) multipliziert wird Minute). Wir können PHP verwenden, um Berechnungen der Ereignisdauer und -kosten bei der Aktualisierung von Ereignisinformationen durchzuführen (durch Auswahl der eingefügten Daten, die Berechnung der Dauer und der Mietkosten und dann ein Einfügen oder Aktualisieren von Einnahmenlisten), oder wir können einfach Trigger verwenden, um diesen Prozess zu automatisieren und zu reduzieren ein PHP -Code. Lassen Sie uns zwei grundlegende Tabellen einrichten und einige virtuelle Abonnementdaten in das Ereignis einfügen, um den Vorgang zu starten.

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Nach dem Einrichten der beiden Tabellen können wir weiterhin einen Trigger namens Costcalc erstellen. Der Auslöser wird nach einem Update auf der Ereignis Tabelle auf Feuer gesetzt und dann die oben genannte Berechnung durchführen. Anschließend wird die Einnahmeliste eingefügt oder aktualisiert (wenn die bereits bestehende Ereignis-ID festgelegt ist).

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Beim Erstellen eines Auslösers (ähnlich wie Ereignisse und gespeicherte Routinen) müssen wir als erstes einen Neugrenzwert angeben, der das Ende des Auslösers darstellt. Dies geschieht mit dem Schlüsselwort des Trennzeichens, gefolgt von einem benutzerdefinierten Symbol (oder Symbol) und erfordert, dass der Auslöser als Ganzes ausgeführt wird, anstatt dass MySQL nur interne Anweisungen ausführt. Wir geben dann den Namen des Auslösers, seine Zeit, das Ereignis und die Tabelle an, auf der er ausgelöst wird. In diesem Beispiel setzen wir die Zeit für die Arbeit, nachdem die Update -Anweisung eingetreten ist, da wir den Auslöser erst nach einem erfolgreichen Update ausführen möchten. Als nächstes verwenden wir die Start ... End Compound -Anweisung, um die Funktionalität des Abzugs zu berücksichtigen. Der Körper des Abzugs erklärt zuerst zwei Variablen: Zeilen und Zeit. Wir wählen die Anzahl der Zeilen aus der Ereignisentabelle aus, in der sich die ID auf die gerade geänderte Zeile bezieht, und ein oder zwei der Zeiten Event_Start und Event_end wurden geändert, und die Zeit für Event_end ist nicht gleich Null. Dies soll klarstellen, ob eine Aktion auf der Gewinn- und Verlustrechnung erforderlich ist, da die Mietgebühr nur durch diese Änderungen berechnet werden kann. Sobald wir wissen, dass wir Zeit und Kosten berechnen können, setzen wir die Zeitvariable auf die Anzahl der Minuten vom Anfang bis zum Ende der Spalte. Durch Multiplizieren dieser Zahl mit 0,5 können wir auch die Mietkosten erhalten. Da die Spalte Event_id eindeutig ist, können wir nur eine ID haben, die der Ereignistabelle entspricht. In der MySQL -Anweisung können Sie auch feststellen, dass die alten und neuen Schlüsselwörter in den obigen Auswahl und Ersetzen von Aussagen und in den Ausdrücken der Zeitvariablenwerte verwendet werden. Ihre Verwendung dieser beiden Schlüsselwörter hängt von dem Ereignis in Ihrer Situation ab und wenn der Auslöser ausgelöst wird.

  • Neues Schlüsselwort wird verwendet, um eingehende Daten in die Datenbank zuzugreifen. Dies ist nur in Einfügen und Aktualisierungsanweisungen verfügbar.
  • Altes Schlüsselwort wird verwendet, um auf die aktuellen Daten im Datensatz zuzugreifen, bevor Änderungen am Datensatz vorgenommen werden. Dies ist nur in Aktualisierungs- und Löschen von Anweisungen verfügbar.

Das entsprechende PHP -Skript, mit dem der Auslöser gestartet wird, enthält eine Klasse (genannt EventHandler) sowie unseren Client -Aufrufcode. Die Klasse verbindet über PDO eine Verbindung zu unserer MySQL -Datenbank und enthält eine Methode updateEvent (), die aufgerufen wird, wenn der Ereignisinhalt aktualisiert werden muss.

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Wir erstellen zuerst unsere EventHandler -Klasse, in der die Eigenschaft $ db definiert ist, um eine Instanz der PDO -Klasse zu halten, die von einer Konstruktor -Methode festgelegt wird. Anschließend machen wir unsere updateEvent () -Methode durch, wobei drei Parameter definiert sind. Der erste Parameter gibt die Spalte an, die wir in der Ereignistabelle aktualisieren möchten, und ermöglicht einen von drei Werten: Name, Start, Ende. Der zweite Parameter hält den zu fügigen Wert oder den aktuellen Wert der aktualisierten Spalte. Nachdem sichergestellt wurde, dass der Spaltenname gültig ist, fragen wir unsere Tabelle durch parametrisierte Abfrage ab und prüfen schließlich, ob Zeilen aktualisiert wurden. Nachdem wir die Klasse erstellt haben, nennen wir sie weiter. Wir geben eine Instanz des PDO -Objekts als Parameter an die EventHandler -Klasse weiter. Die updateEvent () -Methode wird dann viermal mit unterschiedlichen Werten bezeichnet, um zu zeigen, wie unser Trigger auf Updates reagiert, die in der Ereignisentabelle erstellt wurden. Die ersten beiden Aktualisierungen führen nicht dazu, dass unser Auslöser Zeilen einfügt oder aktualisiert, da wir immer noch nicht über die Informationen verfügen, die zur Berechnung der Ereignisdauer und der Mietgebühren erforderlich sind. Wir haben nur den Ereignisnamen aktualisiert und seine Startzeit um zwei Tage verzögert. Die nächsten beiden Aktualisierungen erfordern jedoch die Funktionalität unserer Auslöser, da das erste Update die Endzeit definiert. Das zweite Update definiert die Endzeit eine Stunde später neu, was zu einer Änderung der Dauer führt, sodass sich auch die Mietkosten geändert haben. Hier benötigen wir die Ersatzaussage, da wir beim Erstellen der Tabelle Einschränkungen auf der Tabelle auferlegen und nur einen Datensatz pro Ereignis -ID haben können.

Schlussfolgerung

MySQL -Auslöser können bei ordnungsgemäß nicht nur positive Auswirkungen auf die Leistung der Website haben, sondern vermeiden auch, dass viel PHP -Code für solche Vorgänge geschrieben wird. Ich hoffe, Sie finden sie in Ihren Projekten als nützlich wie in meinen Projekten. Verwenden Sie daher mutig aus Trigger! Bilder aus Fotolien

FAQs zur Automatisierung von Operationen mit MySQL -Triggern

Was sind MySQL -Auslöser und wie funktioniert es?

MySQL Trigger ist ein gespeichertes Programm, das automatisch als Antwort auf Ereignisse in einer Tabelle (z. B. Einfügen, Aktualisierung oder Löschen) aufgenommen wird. Auslöser werden verwendet, um die Integrität von Informationen in der Datenbank aufrechtzuerhalten, und werden automatisch aufgerufen, wenn bestimmte Vorgänge in der Tabelle auftreten. Sie können vor oder nach einem Ereignis ausgeführt werden.

Wie erstelle ich MySQL -Trigger?

Erstellen eines MySQL -Triggers beinhaltet eine Erstellung von Trigger -Anweisungen, die den Namen des Auslösers, des Triggerereignisses und die nach dem Ereignis ausgeführte Anweisung enthält. Hier ist ein grundlegendes Beispiel:

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Kann ich ein PHP -Skript von einem MySQL -Trigger aufrufen?

kann nicht direkt aufgerufen werden. MySQL unterstützt keine Anrufe von PHP -Skripten von Triggern. Sie können dies jedoch indirekt mit UDF (Benutzerdefinierte Funktionen) oder ein externes System verwenden, um Änderungen in der Datenbank zu überwachen und dann ein PHP-Skript aufzurufen.

Was ist die Syntax des MySQL -Triggers?

Die Syntax zum Erstellen eines Auslösers in MySQL lautet wie folgt:

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

Wie kann ich MySQL verwenden, um Aufgaben zu automatisieren?

Automatisierung in MySQL kann durch Auslöser, gespeicherte Verfahren und Ereignisse erreicht werden. Auslöser können verwendet werden, um Aufgaben zu automatisieren, die als Reaktion auf bestimmte Datenänderungen ausgeführt werden sollten. Mit gespeicherten Prozeduren können Sie eine Reihe von Befehlen in eine einzelne rangbare Routine zusammenfassen. Ereignisse sind Aufgaben, die nach Zeitplan ausgeführt werden.

Was sind die Einschränkungen von MySQL -Auslösern?

Einige Einschränkungen von MySQL -Triggern sind: Sie können nur einer einzelnen Tabelle zugeordnet werden, sie können keine Ergebnismenge zurückgeben, sie können keine Parameter akzeptieren und können nicht wie gespeicherte Prozeduren als direkt aufgerufen werden.

Wie kann MySQL -Trigger debuggen?

Debuggen von MySQL-Triggern kann eine Herausforderung sein, da es keinen integrierten Debugger gibt. Sie können jedoch Problemumgehungen verwenden, z. B. Werte in separate Tabellen einfügen, um den Ausführungsfluss zu verfolgen, oder Tools von Drittanbietern wie MySQL-Debugger.

Können MySQL -Trigger gespeicherte Verfahren aufrufen?

Ja. Sie sollten jedoch dabei vorsichtig sein, da dies zu komplexen Ereignisketten führen kann, die schwer zu verwalten und zu debuggen sind.

Wie lösche ich MySQL -Trigger?

Sie können den MySQL -Trigger mit der Drop -Trigger -Anweisung, gefolgt vom Namen des Triggers, löschen. Zum Beispiel:

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

Können MySQL -Auslöser zur Datenüberprüfung verwendet werden?

Ja. Sie können einen Auslöser erstellen, um zu überprüfen, ob die Daten in die Tabelle eingefügt oder aktualisiert werden, und die Maßnahmen entsprechend ergreifen.

Das obige ist der detaillierte Inhalt vonAktionsautomatisierung mit MySQL -Triggern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn