Ein SQL-Set off ist eine Logik, die automatisch ausgeführt wird, wenn sich Daten in einer Tabelle ändern. Es wird bei INSERT-, UPDATE- oder DELETE-Ereignissen ausgelöst.

Manchmal muss Ihre Datenbank reagieren, wenn sich Daten ändern. Eine neue Zeile wird eingefügt und Sie möchten sie protokollieren. Ein Datensatz wird aktualisiert und Sie benötigen einen Zeitstempel. Eine Zeile wird gelöscht und etwas anderes sollte automatisch passieren.

Das ist es, was ein SQL-Set off macht. Es läuft automatisch, ohne dass Sie es aufrufen müssen.

Lernen Sie SQL by Doing 💡

Wenn Sie es mit der Beherrschung von SQL ernst meinen, ist unser interaktiver Kurs genau das Richtige für Sie SQL-Kurse basieren auf praktischer Übung und nicht auf passivem Unterricht. Sie schreiben echte Abfragen, arbeiten mit echten Datensätzen und erfahren, wie Analysten und Ingenieure SQL tatsächlich bei der Arbeit einsetzen.

So funktionieren SQL-Set off

Stellen Sie sich vor, Sie verfügen über eine Net-App und eine cellular App, mit denen Benutzer ihre Profile aktualisieren können und die beide in dieselbe Datenbank schreiben. Nehmen wir nun an, Sie möchten jedes Mal protokollieren, wenn ein Benutzer sein Profil aktualisiert.

Ohne Auslösermüssten Sie diesen Protokollierungscode zweimal schreiben: einmal in Ihrer Net-App, einmal in Ihrer mobilen App. Und wenn Sie später eine dritte Möglichkeit zum Aktualisieren der Datenbank hinzufügen, müssen Sie daran denken, diese auch dort hinzuzufügen.

Mit Auslösernschreiben Sie die Logik einmal in die Datenbank selbst. Es wird jedes Mal automatisch ausgelöst, unabhängig davon, woher die Änderung kommt. Ihre Net-App, Ihre cellular App, ein Skript oder etwas anderes.

Jeder Auslöser folgt dem gleichen Muster:

Ereignis → Timing → Aktion

  • Ereignis: INSERT, UPDATE oder DELETE
  • Timing: VOR (bevor die Änderung geschrieben wird) oder NACH (sobald sie abgeschlossen ist)
  • Aktion: Ihre SQL-Logik läuft

So funktioniert ein SQL-TriggerSo funktioniert ein SQL-Trigger

SQL-Set off-Syntax

Bevor wir zu einem vollständigen Beispiel kommen, sehen Sie hier, wie die grundlegende Syntax in MySQL aussieht. MySQL ist eines der am weitesten verbreiteten Datenbanksysteme und ein guter Ausgangspunkt für das Erlernen von SQL. Betrachten Sie dies als eine Vorlage, die Sie mit Ihrer eigenen Logik ausfüllen.

CREATE TRIGGER trigger_name 
AFTER UPDATE 
ON table_name 
FOR EACH ROW 
BEGIN   
-- your logic right here 
END; 

Jeder Teil hat eine Aufgabe:

  • trigger_name: wie du es nennst
  • AFTER UPDATE: wann und was es auslöst (der Zeitpunkt kann sein BEFORE oder AFTERund das Ereignis kann sein INSERT, UPDATEoder DELETE)
  • ON table_name: Welcher Tisch soll beobachtet werden?
  • FOR EACH ROW: Es wird einmal professional betroffener Zeile ausgeführt
  • BEGIN...END: umschließt deine Logik

Beispiel für einen SQL-Set off (Schritt für Schritt)

Lassen Sie uns ein reales Beispiel durchgehen. Wir protokollieren jedes an einem vorgenommene Replace customers Tabelle automatisch.

Schritt 1: Erstellen Sie die Tabellen

CREATE TABLE customers (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(100),
  e mail VARCHAR(100),
  updated_at DATETIME
);

CREATE TABLE user_logs (
  log_id INT PRIMARY KEY AUTO_INCREMENT,
  user_id INT,
  changed_at DATETIME
);

Schritt 2: Erstellen Sie den Set off

Jetzt erstellen wir den Set off, der das überwacht customers Tabelle und protokolliert jedes Mal einen Datensatz, wenn eine Zeile aktualisiert wird.

CREATE TRIGGER log_user_update
AFTER UPDATE ON customers
FOR EACH ROW
BEGIN
  INSERT INTO user_logs (user_id, changed_at)
  VALUES (OLD.id, NOW());
END;

Was sind OLD Und NEW?

Wenn eine Zeile aktualisiert wird, OLD bezieht sich auf die Werte der Zeile vor die Veränderung, und NEW bezieht sich auf die Werte nach die Veränderung.

In diesem Set off-Beispiel verwenden wir OLD.id um die ID der gerade aktualisierten Zeile abzurufen. NOW() hat nichts damit zu tun NEW. Es handelt sich um eine integrierte MySQL-Funktion, die das aktuelle Datum und die aktuelle Uhrzeit zurückgibt. Wir werden sehen NEW in Aktion in einem kommenden Beispiel, in dem es zur Validierung eingehender Daten vor dem Speichern verwendet wird.

Beispiel für einen SQL-Trigger (alt vs. neu)Beispiel für einen SQL-Trigger (alt vs. neu)

Schritt 3: Geben Sie einige Daten ein

INSERT INTO customers (title, e mail) VALUES ('Jake', '(e mail protected)');

Schritt 4: Führen Sie ein Replace durch

Dieses UPDATE löst den Auslöser aus.

UPDATE customers SET e mail = '(e mail protected)' WHERE id = 1;

Schritt 5: Überprüfen Sie das Ergebnis

SELECT * FROM user_logs;
log_id Benutzer-ID geändert_at
1 1 01.01.2026 1:23:45

Der Abzug wurde automatisch ausgelöst. Kein zusätzlicher Anwendungscode erforderlich.

Arten von SQL-Triggern

Es gibt verschiedene Möglichkeiten, wie sich Auslöser unterscheiden können. Sie müssen sich nicht alle davon merken, aber es hilft, sie zu erkennen.

Syntax und Verhalten können zwischen Datenbanksystemen leicht variieren, die Grundidee ist jedoch dieselbe.

DML vs. DDL-Set off

DML (Datenmanipulationssprache) Löst Feuer bei Datenänderungen aus (INSERT, UPDATE, DELETE). Dies ist der Typ, den Sie quick immer verwenden werden, und der einzige Typ, den MySQL unterstützt.

DDL (Datendefinitionssprache) Löst Feuer bei strukturellen Änderungen wie dem Erstellen oder Ändern von Tabellen aus. Diese sind in anderen Datenbanksystemen verfügbar, z SQL-Server werden aber in MySQL nicht unterstützt.

VOR vs. NACH Auslöser

BEFORE-Set off werden ausgeführt, bevor die Änderung geschrieben wird. Dies ist nützlich für die Validierung oder Änderung von Daten vor der Landung. AFTER-Set off werden ausgeführt, sobald die Änderung vorgenommen wurde. Dies ist nützlich für die Protokollierung oder Synchronisierung verwandter Tabellen.

Vorher vs. Nachher-TriggerVorher vs. Nachher-Trigger

Set off auf Zeilenebene im Vergleich zu Triggern auf Anweisungsebene

Ein Set off auf Zeilenebene wird einmal professional betroffener Zeile ausgeführt. Aktualisieren Sie 10 Zeilen und es wird 10 Mal ausgelöst. Ein Set off auf Anweisungsebene wird einmal professional Abfrage ausgeführt, unabhängig davon, wie viele Zeilen betroffen sind. MySQL unterstützt nur Zeilenebene. PostgreSQL (ein weiteres beliebtes Datenbanksystem wie MySQL) unterstützt beides.

Trigger auf Zeilenebene im Vergleich zu Triggern auf AnweisungsebeneTrigger auf Zeilenebene im Vergleich zu Triggern auf Anweisungsebene

Anmeldeauslöser

Anmeldeauslöser werden ausgelöst, wenn sich ein Benutzer bei der Datenbank anmeldet. Sie werden hauptsächlich von Datenbankadministratoren verwendet, um Anmeldungen zu verfolgen, den Zugriff zu kontrollieren oder die Anzahl aktiver Sitzungen zu begrenzen. Wenn Sie ein Anfänger sind, werden Sie diese wahrscheinlich nicht benötigen, aber es ist intestine zu wissen, dass es sie gibt.

Hier ist ein einfaches SQL Server-Beispiel zur Veranschaulichung der Syntax:

CREATE TRIGGER track_logon
ON ALL SERVER
FOR LOGON
AS
BEGIN
    PRINT 'A brand new person has logged in.';
END;

Beachten Sie, dass Anmeldetrigger spezifisch für SQL Server sind und in MySQL nicht verfügbar sind.

Häufige Anwendungsfälle

Dies sind gekürzte Beispiele, die nur die Logik zeigen, die im BEGIN…END-Block eines Triggers enthalten wäre. Sie sind nicht dafür gedacht, alleine betrieben zu werden.

Audit-Protokolle

Speichern Sie jedes Mal einen Datensatz, wenn sich etwas ändert, ohne dass Sie sich dabei auf Ihre App verlassen müssen.

-- inside a set off
INSERT INTO audit_log (table_name, motion, changed_at)
VALUES ('customers', 'UPDATE', NOW());

Datenvalidierung

Stoppen Sie fehlerhafte Daten, bevor sie gespeichert werden. In diesem Beispiel wird jedes Alter unter Null abgelehnt und eine benutzerdefinierte Fehlermeldung zurückgesendet.

-- inside a set off
IF NEW.age < 0 THEN
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age can't be damaging';
END IF;

SIGNAL SQLSTATE '45000' ist MySQLs Artwork, einen benutzerdefinierten Fehler auszulösen. Der '45000' ist ein generischer Fehlercode, der „benutzerdefinierter Fehler“ bedeutet, und MESSAGE_TEXT ist die Nachricht, die zurückgegeben wird.

Felder automatisch aktualisieren

Behalten Sie ein Feld wie updated_at aktuell, ohne zusätzliche Logik in Ihren Anwendungscode (den Code außerhalb Ihrer Datenbank) zu schreiben.

-- inside a BEFORE set off
SET NEW.updated_at = NOW();

Verwandte Tabellen synchronisieren

Wenn sich eine Zeile in einer Tabelle ändert, wird eine andere automatisch aktualisiert.

-- inside a set off
UPDATE orders SET standing = 'closed' WHERE user_id = OLD.id;

Wann man einen Auslöser verwendet (und wann nicht)

Verwenden Sie einen Set off, wenn:

  • Bei INSERT, UPDATE oder DELETE muss automatisch etwas passieren, sei es jedes Mal (z. B. Protokollierung) oder bedingt (z. B. Validierung).
  • Mehrere Anwendungen oder Skripte schreiben in dieselbe Datenbank und Sie müssen die Logik unabhängig von der Quelle konsistent anwenden
  • Sie möchten Datenintegritätsregeln auf Datenbankebene durchsetzen, anstatt sich auf Anwendungscode zu verlassen

Vermeiden Sie einen Auslöser, wenn:

  • Die Logik ist komplex oder kann sich häufig ändern
  • Es muss einfach zu debuggen und zu verfolgen sein
  • Der Tisch hat ein sehr hohes Schreibvolumen und die Leistung ist wichtig
  • Die Logik muss für jeden sichtbar sein, der Ihren Anwendungscode liest, da Set off für Ihre App-Ebene unsichtbar sind und Teamkollegen möglicherweise nicht bemerken, dass einer existiert
  • Sie sind besorgt über kaskadierende Aktualisierungen, die auftreten können, wenn Set off Tabellen ändern, die über eigene Set off verfügen

Verwalten von SQL-Triggern

Lassen Sie einen Auslöser fallen

In SQL bedeutet „Löschen“ etwas, es zu löschen. So entfernen Sie einen Auslöser vollständig:

DROP TRIGGER trigger_name;

Alle Auslöser anzeigen

SHOW TRIGGERS;

So sehen Sie Set off für eine bestimmte Tabelle:

SHOW TRIGGERS FROM database_name LIKE 'table_name';

In MySQL können Sie einen Set off nicht deaktivieren, ohne ihn zu löschen. Wenn Sie das Feuern einer Waffe vorübergehend unterbrechen müssen, müssen Sie sie löschen und bei Bedarf neu erstellen.

Zusammenfassung

Set off sind das richtige Werkzeug, wenn Ihre Datenbank automatisch und konsistent auf Änderungen reagieren muss. Unabhängig davon, ob Sie Aktualisierungen einer Benutzertabelle protokollieren, Daten vor deren Landung validieren oder zugehörige Tabellen synchron halten, können Sie mit Triggern diese Logik einmal auf Datenbankebene verarbeiten, anstatt sie im gesamten Anwendungscode zu wiederholen.

Um Ihre SQL-Kenntnisse weiter auszubauen, können Sie diese erkunden SQL-Kurse:

Beide Kurse konzentrieren sich auf praktisches, interaktives Lernen. Sie üben SQL direkt in Ihrem Browser, erhalten angeleitetes Suggestions und arbeiten realistische Szenarien durch.

Sie wenden das Gelernte auf Abfragen, Verknüpfungen und Datenbankdesign in realen Szenarien an, sodass SQL zu einer aktiven Fähigkeit wird und nicht nur die Syntax auswendig gelernt wird.

FAQs

Was ist ein reales Beispiel für einen Set off in SQL?

Ein häufiges Beispiel ist das Protokollieren von Änderungen an einer Tabelle, etwa das Nachverfolgen von Aktualisierungen oder Löschungen zu Prüfzwecken.

Ein weiteres Beispiel ist die automatische Aktualisierung eines Zeitstempels, wenn sich ein Datensatz ändert. Wenn ein Benutzer sein Profil aktualisiert, kann ein Auslöser gesetzt werden updated_at auf die aktuelle Uhrzeit umstellen, ohne dass eine zusätzliche Abfrage erforderlich ist.

Was ist der Zweck eines SQL-Triggers?

Der Zweck eines Triggers besteht darin, die Logik automatisch auszuführen, wenn sich Daten ändern.

Zu den häufigsten Anwendungsfällen gehören das Protokollieren von Änderungen, das Validieren von Daten und das Synchronisieren zugehöriger Tabellen.

Verlangsamen Set off eine Datenbank?

Ja, das können sie.

Set off werden bei jedem ausgeführt INSERT, UPDATEoder DELETEDaher können komplexe oder ineffiziente Set off die Leistung beeinträchtigen, insbesondere bei Tabellen mit hohem Datenverkehr.

Kann ein SQL-Set off fehlschlagen?

Ja.

Wenn ein Set off einen Fehler enthält, wird der ursprüngliche Vorgang je nach Datenbanksystem normalerweise abgebrochen oder zurückgesetzt.

Wie erhalte ich eine Liste von Triggern in SQL?

Abhängig von Ihrer Datenbank können Sie Set off mithilfe der folgenden Befehle auflisten:

MySQL: SHOW TRIGGERS;

PostgreSQL: SELECT * FROM information_schema.triggers;

SQL-Server: SELECT * FROM sys.triggers;

Können mehrere Set off auf derselben Tabelle vorhanden sein?

Ja.

Die meisten Datenbanksysteme, einschließlich MySQL (seit Model 5.7.2) und SQL Server, erlauben mehrere Set off für dieselbe Tabelle und dasselbe Ereignis.

Wenn in MySQL mehrere Set off denselben Zeitpunkt und dasselbe Ereignis haben, können Sie die Ausführungsreihenfolge mit steuern FOLLOWS Und PRECEDES in der Triggerdefinition.

Können Sie einen Set off in SQL deaktivieren?

In SQL Server ja.

In MySQL gibt es keine Choice zum Deaktivieren eines Triggers. Sie müssen den Auslöser löschen und bei Bedarf neu erstellen.

Kann ein Set off einen anderen Set off aufrufen?

Ja. Dies ist bekannt als Triggerverkettung oder kaskadierende Set off.

Beispielsweise kann ein Set off für eine Tabelle eine andere Tabelle aktualisieren, die dann automatisch ihren eigenen Set off auslöst.

Dies kann schnell komplex werden, daher ist es wichtig, bei der Arbeit mit mehreren Auslösern sorgfältig vorzugehen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert