Wie eine SQL-Trigger erstellen

Sie erstellen eine SQL-Trigger, logisch genug, mit einem CREATE TRIGGER

Erklärung. Nachdem der Trigger erstellt wird, liegt es auf der Lauer - Warten auf das auslösende Ereignis auftritt. Wenn das auslösende Ereignis auftritt, bang! Die Trigger ausgelöst.

Die Syntax für die CREATE TRIGGER Erklärung ist ziemlich beteiligt, aber man kann es brechen in verständliche Stücke. Zuerst nehmen Sie einen Blick auf das Gesamtbild:

CREATE TRIGGER trigger_nametrigger_action_timetrigger_eventON table_name [Referenzierung old_or_new_value_alias_list] triggered_action

Der Trigger-Name ist die eindeutige Kennung für diesen Trigger. Die Auslösezeit ist die Zeit, die Sie die ausgelöste Aktion ausgeführt werden soll: entweder VOR oder NACH das auslösende Ereignis. Die Tatsache, dass eine getriggerte Aktion auftreten kann, Vor das Ereignis, das angeblich verursacht es geschehen mag ein wenig seltsam, aber in einigen Fällen scheinen, kann diese Fähigkeit sehr nützlich sein.

Weil die Datenbank-Engine weiß, dass es sich um ein auslösendes Ereignis auszuführen, bevor sie tatsächlich ausgeführt wird, hat es die Fähigkeit sandwichartig in dem getriggerten Ereignis vor der Ausführung des auslösenden Ereignisses, wenn ein Trigger Einwirkzeit von VOR angegeben wurde.

Drei mögliche Triggerereignisse können einen Trigger Brand verursachen: die Ausführung eines EINFÜGEN Aussage, ein LÖSCHEN Anweisung oder ein AKTUALISIEREN Erklärung. Diese drei Aussagen haben die Macht, den Inhalt einer Datenbanktabelle zu ändern.

Somit kann jeder Einfügung eines oder mehrerer Zeilen in die Subjekttabelle, jede Deletion eines oder mehrere Zeilen aus dem Objekttisch oder jeder Aktualisierung eine oder mehrere Spalten in einer oder mehreren Reihen in der Betreff Tabelle kann einen Trigger zu einem Brand führen. ON table_name, Natürlich bezieht sich auf die Tabelle, für die ein EINFÜGEN, LÖSCHEN, oder AKTUALISIEREN angegeben wurde.

Statement und Zeilen Trigger

Das triggered_action in dem vorhergehenden Beispiel weist die folgende Syntax auf:

[FOR EACH ROW] WENN 

Sie können festlegen, wie der Trigger fungieren:

  • Row-Trigger: Der Trigger wird ausgelöst, sobald auf die Begegnung mit EINFÜGEN, LÖSCHEN, oder AKTUALISIEREN Aussage, dass das auslösende Ereignis darstellt.

  • Statement-Trigger: Der Trigger wird mehrere Male abzufeuern, einmal für jede Zeile in der Objekttisch, der von dem auslösenden Ereignis betroffen ist.

Wie durch die eckigen Klammern angegeben, die FÜR JEDE Klausel ist optional. Trotzdem muss der Auslöser eine oder andere Weise zu handeln. Wenn kein FÜR JEDE Klausel angegeben ist, ist das Standardverhalten FÜR JEDE AUSSAGE.

Wenn ein Trigger ausgelöst

Die Suchbedingung in der WANN Klausel ermöglicht es Ihnen, die Umstände angeben, unter denen ein Trigger ausgelöst. Geben Sie ein Prädikat, und wenn das Prädikat wahr ist, wird der Auslöser feuer- wenn es falsch ist, wird es nicht. Diese Fähigkeit erhöht die Nützlichkeit von Auslösern.

Sie können festlegen, dass ein Trigger ausgelöst wird erst nach einem bestimmten Schwellenwert überschritten wurde, oder wenn eine andere Bedingung, dass sie entweder wahr oder falsch bestimmt werden kann.

Die ausgelösten SQL-Anweisung

Die ausgelösten SQL-Anweisung kann eine einzelne SQL-Anweisung oder eine Folge von SQL-Anweisungen werden nacheinander ausgeführt. Im Falle einer einzigen SQL-Anweisung, die ausgelöst SQL-Anweisung ist nur eine gewöhnliche SQL-Anweisung.

Für eine Sequenz von SQL-Anweisungen, jedoch müssen Sie Atomarität gewährleisten, um sicherzustellen, dass der Vorgang nicht abgebrochen Midstream- wird, um die Datenbank in einem unerwünschten Zustand zu verlassen. Sie können mit einem dies tun BEGIN-END Block, der enthält ATOMIC Stichwort:

BEGIN ATOMIC {SQL-Anweisung 1} {SQL-Anweisung 2} ... {SQL-Anweisung n }ENDE

Ein Beispiel Trigger-Definition

Angenommen, der Corporate Human Resources Manager informiert werden möchte, wenn eine der Regionalmanager einen neuen Mitarbeiter einstellt. Der folgende Trigger kann mit dieser Situation gut umgehen:

CREATE TRIGGER newhireBEFORE INSERT ON employeeFOR EACH STATEMENTBEGIN ATOMICCALL sendmail ( 'HRDirector') INSERT INTO logtableVALUES ( 'NewHire', CURRENT_USER, CURRENT_TIMESTAMP) -ENDE-

Immer, wenn eine neue Zeile in die NewHire Tabelle eingefügt wird, wird eine E-Mail mit den Angaben zur HR-Manager feuerte, und der Anmeldename der Person, die das Einsetzen und die Zeit des Einführungs Herstellung werden in einer Protokolltabelle aufgezeichnet, die Bereitstellung ein Audit-Trail.

Menü