Frage

Ich habe von Auslösern gehört und habe ein paar Fragen.
Was sind Auslöser?
Wie richte ich sie ein?
Gibt es neben den typischen SQL-Vorkehrungen irgendwelche Vorsichtsmaßnahmen, die beachtet werden sollten?

War es hilfreich?

Lösung

Mit Triggern können Sie eine Funktion in der Datenbank ausführen, wenn bestimmte Ereignisse eintreten (z. B. eine Einfügung in eine Tabelle).

Ich kann mich nicht speziell zu MySQL äußern.

Vorsicht:Auslöser können sehr verlockend sein. Wenn Sie sie zum ersten Mal verwenden, wirken sie wie ein Wundermittel für alle möglichen Probleme.Aber sie lassen „magische“ Dinge geschehen. Wenn Sie die Datenbank nicht in- und auswendig kennen, kann es so aussehen, als würden wirklich seltsame Dinge passieren (z. B. Einfügungen in andere Tabellen, Änderung von Eingabedaten usw.).Bevor ich Dinge als Auslöser umsetze, würde ich ernsthaft darüber nachdenken, stattdessen die Verwendung einer API rund um das Schema zu erzwingen (vorzugsweise in der Datenbank, aber außerhalb, wenn das nicht möglich ist).

Für einige Dinge würde ich immer noch Trigger verwenden

  • Verfolgen Sie die Felder „date_created“ und „date_last_edited“.
  • Einfügen von „IDs“ (in Oracle, wo es kein Auto-ID-Feld gibt)
  • Änderungshistorie führen

Dinge, für die Sie Trigger nicht verwenden möchten

  • Geschäftsregeln/Logik
  • alles, was eine Verbindung außerhalb der Datenbank herstellt (z. B. ein Webservice-Aufruf)
  • Zugangskontrolle
  • Alles, was nicht transaktional ist (alles, was Sie im Trigger tun, MUSS mit der Transaktion rückgängig gemacht werden können)

Andere Tipps

Aus dev.mysql.com, ein Auslöser ist

... ein benanntes Datenbankobjekt, das einer Tabelle zugeordnet ist und die aktiviert ist, wenn ein bestimmtes Ereignis für die Tabelle auftritt.

Die Syntax zum Erstellen ist auch auf dieser Seite dokumentiert.

Knapp,

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

Und sie liefern ein Beispiel:

CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

Sie müssen sich zumindest daran halten alle Einschränkungen für gespeicherte Funktionen.Sie können keine Tabellen sperren, Ansichten ändern oder die Tabelle ändern, die den Auslöser ausgelöst hat.Auch Auslöser kann zu Replikationsproblemen führen.

Ein Trigger ist ein benanntes Datenbankobjekt, das einer Tabelle zugeordnet ist und aktiviert wird, wenn ein bestimmtes Ereignis für die Tabelle eintritt.

So erstellen Sie einen Trigger:

CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;


Obwohl ich diesen Teil beantwortet habe, bleibt die andere Frage bestehen.

Diese Frage ist alt und andere Antworten sind sehr gut, aber da der Benutzer nach Vorsichtsmaßnahmen gefragt hat, die getroffen werden sollten, möchte ich etwas hinzufügen:

  • Wenn Sie die Replikation in einer komplexen Umgebung verwenden, sollten Sie nicht zu viele Trigger verwenden und keine gespeicherten Prozeduren über Trigger aufrufen.
  • Trigger sind in MySQL langsam.
  • Einige SQL-Anweisungen können nicht innerhalb von Triggern verwendet werden.Und einige Anweisungen sind erlaubt, sollten aber vermieden werden, wie zum Beispiel LOCK.Die allgemeine Regel lautet:Wenn Sie die Auswirkungen dessen, was Sie tun, nicht vollständig verstehen, sollten Sie es nicht tun.
  • Trigger können Endlosschleifen verursachen, seien Sie also vorsichtig.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top