So richten Sie Postgresql -Trigger ein

So richten Sie Postgresql -Trigger ein
„Der Auslöser wird in jeder Datenbank verwendet, um eine automatisierte Aufgabe auszuführen, wenn ein bestimmtes Datenbankereignis angezeigt wird. Es wird als Rückruffunktion der Datenbank bezeichnet, die basierend auf dem Ereignis automatisch bezeichnet wird. Es gibt viele Vorteile der Verwendung von Triggern in der PostgreSQL -Datenbank. Es können drei Arten von Triggern erstellt werden, die in diesem Tutorial unter Verwendung mehrerer Beispiele beschrieben werden.”

Einige Vorteile der Verwendung von Triggern

  • Die Datenvalidierung kann leicht durchgeführt werden.
  • Der eindeutige Wert eines neuen Datensatzes kann generiert werden.
  • Die Anwendungsentwicklung wird schneller.
  • Die Geschäftsregeln des Antrags können durchgesetzt werden.
  • Die Wartung der Anwendung wird einfacher.

Syntax

Die Syntax des Erstellens eines Auslösers ist unten angegeben.

Erstellen [oder ersetzen] [Einschränkung] Trigger -Name vor | Nach | Anstelle von Ereignis [oder…]
Auf table_name
[Aus referenz_table_name]
[Nicht aufschiebbar | [Aufschiebbar] [anfangs unmittelbar | Anfänglich verschoben]]]
[Referenzierung Old | Neue Tabelle [as] transition_relation_name […]]
[Für [jeweils] row | STELLUNGNAHME ]
[Wenn (Zustand)]
Function | ausführen | Prozedur function_name (Argumente)
  • Das Erstellen von Schlüsselwort wird verwendet, um einen neuen Auslöser zu erstellen, und das Ersetzen von Schlüsselwort wird verwendet, um einen vorhandenen Trigger zu ändern.
  • Die Option Einschränkungen wird verwendet, um einen Einschränkungsauslöser zu erstellen, der basierend auf dem Einschränkungswert abgefeuert wird.
  • Zum Erstellen des Auslösers wird ein eindeutiger Triggername verwendet.
  • Vier Arten von Ereignissen können verwendet werden, um einen Auslöser zu erstellen. Diese sind Einfügen, Aktualisierung, Löschen und Abschneiden.
  • Drei Arten von Triggern, die erstellt werden können, sind VOR, NACH, Und ANSTATT. Die Auslöser können für Tabelle, Fremde und Ansicht erstellt werden. VOR Und NACH Triggers Support Support Insert, Update und Löschen von Operationen für Tabelle und Fremdtabelle in Zeilenebene sowie die Ansicht auch in Statement-Ebene. ANSTATT Trigger unterstützt Einfügungs-, Aktualisierungs- und Löschen von Operationen für die Ansicht nur in Zeilenebene. Ein Abschnitte-Ereignis kann nur auf Anweisungsebene für die Tabelle verwendet werden.
  • Nach der Definition des Ereignisse.
  • Der Referenz_table_name wird nur für die Einschränkung des Fremdschlüssels und für den Einschränkungsauslöser verwendet.
  • Der Standardzeitpunkt des Auslösers wird durch definiert Nicht aufschiebbar oder Aufschiebbar oder Anfänglich sofort oder Anfänglich verschoben.
  • Referenzierung Das Schlüsselwort wird verwendet, um ein oder zwei Beziehungsnamen zu deklarieren.
  • Alter Tisch oder Neue TabelleDie E-Klausel definiert die Übergangsbeziehung vor dem Bild oder die Übergangsbeziehung nach dem Bild.
  • transsition_relation_name wird im Trigger für die Übergangsbeziehung verwendet.
  • FÜR JEDE REIHE oder Für jede Aussage Definiert, ob die Triggerfunktion für jede vom Triggerereignis betroffene Zeile einmal oder nur einmal pro SQL -Anweisung abgefeuert werden soll. Für jede Aussage ist der Standard.
  • Zustand Bestimmt, ob die Triggerfunktion ausgeführt wird oder nicht.
  • Funktionsname ist eine benutzerdefinierte Funktion, die kein Argument nimmt, und der Rückgabetyp ist der Auslöser, der ausgeführt wird, wenn der Auslöser feuert.
  • Die von den Kommas getrennte Liste von Argumenten wird an die Funktion übergeben, wenn der Auslöser ausgeführt wird.

Voraussetzungen

A. Installieren Sie die Postgresql

Sie müssen die neueste Version von PostgreSQL -Paketen auf dem Linux -Betriebssystem installieren, bevor Sie die in diesem Tutorial gezeigten SQL -Anweisungen ausführen. Führen Sie die folgenden Befehle aus, um die Postgresql zu installieren und zu starten:

$ sudo apt-get -y install postgresql postgresql-contrib
$ sudo systemctl starten postgresql.Service

B. Führen Sie den folgenden Befehl aus, um sich bei PostgreSQL mit Root -Privilegien anzumelden.

$ sudo -u postgres psql

C. Sie können eine Datenbank namens erstellen “testdb ” Durch Ausführen der folgenden SQL -Anweisung.

# Datenbank testdb erstellen;

Wenn Sie einen Tisch in die erstellen möchten testdb Datenbank, dann müssen Sie tippen "\C" Um die Datenbank zu ändern. In diesem Tutorial habe ich die Datenbank jedoch nicht geändert, und die Tabelle und alle Funktionen wurden in der Standarddatenbank erstellt, die benannt ist Postgres.

Erstellen Sie eine Tabelle mit dem Namen Lehrer Und Kurse Mit einigen Datensätzen, um die Verwendung von Triggern zu testen, die später in diesem Tutorial erstellt werden.

Tischlehrer erstellen (
id serielle Primärschlüssel,
Nennen Sie Varchar (30),
Adress varchar (100),
contact_no varchar (20),
verfügbar bool Standard true);
Tischkurse erstellen (
serieller Primärschlüssel für Kurs_id,
Nennen Sie Varchar (30),
Credit_Hour Float,
lehrer_id int Standard 0);
In Lehrer einfügen (Name, Adresse, contact_no, verfügbar)
Werte
('Nasir Uddin', 'Dhanmondi 15, Dhaka', +8801947854523 ', Falsch),
('Farzana Mahmud', '39/1, Jigatola, Dhaka ', +88018553426754', falsch);
In Kurse einfügen (Name, Credit_Hour, Teacher_ID)
Werte
('Physik', 2.0, 1),
('Chemie', 2.0, 2),
('Math', 3.0, 1);

Beispiele auslösen

Jeder Auslöser ist einer Postgresql -Funktion zugeordnet. Sie müssen also die Funktion erstellen, bevor Sie den Abzug erstellen. In diesem Teil des Tutorials wurde die Art der Erstellung verschiedener Arten von Triggern gezeigt.

Beispiel 1: Erstellen Sie vor dem Einfügen von Trigger

Der Voreinsatz löst Brände vor, bevor die Einsatzbetrieb ausgeführt wird. Führen Sie die folgende SQL -Anweisung aus, um eine Funktion mit dem Namen zu erstellen vor_insert () das wird in a verwendet Vor dem Einfügen Abzug. Einer der Hauptzwecke für die Verwendung eines Triggers ist die Datenvalidierung. Die folgende Funktion prüft, ob die bestimmten Felder leer sind oder nicht. Wenn einer der Feldwerte leer bleibt, wird eine bestimmte Fehlermeldung erhoben. Eine andere Validierung wird auf die überprüft Name Feld, und eine Fehlermeldung wird erhöht, wenn die Länge dieses Feldes weniger als 5 beträgt. Die nächste bedingte Anweisung wird verwendet, um den String -Wert zu verkettet "+88" mit dem contact_no Wenn die Länge der contact_no Feld ist 11.

Funktion erstellen oder ersetzen Sie die Funktion vor_insert ()
Gibt Trigger als zurück
$$
START
Wenn neu.name = "oder neu.Adresse = "oder neu.contact_no = "dann
Erhöhen Sie den Namen oder die Adresse oder das Feld contact_no ist leer.';
Ende wenn;
Wenn Länge (neu.Name) < 5 THEN
Das Feld des Namens erhöhen muss mehr als 5 Zeichen enthalten.';
Ende wenn;
Wenn Länge (neu.contact_no) = 11 Dann
NEU.contact_no = '+88' || NEU.contact_no;
Ende wenn;
Neu zurückkehren;
ENDE;
$$
Sprache 'PLPGSQL';

Die folgende Ausgabe wird angezeigt, wenn die Funktion erfolgreich in der erstellt wird Postgres Datenbank.

Führen Sie die folgende SQL -Anweisung aus, um einen Trigger mit dem Namen zu erstellen check_before_insert das wird die ausführen vor_insert () Funktionieren Sie, bevor Sie den neuen Datensatz in die einfügen Lehrer Tisch.

Erstellen Sie Trigger check_before_insert
Vor dem Einfügen
Über Lehrer
FÜR JEDE REIHE
Funktionen Sie vordoinsert () aus

Die folgende Ausgabe wird angezeigt, wenn der Trigger erfolgreich erstellt wird.

Führen Sie die folgende Einfügeanweisung aus, die alle gültigen Daten enthält.

In Lehrer einfügen (Name, Adresse, contact_no)
Werte ('Zafar iqbal', 'Mirpur, Dhaka', '01738975634');

Die folgende Ausgabe wird angezeigt, wenn der neue Datensatz erfolgreich eingefügt wird.

Führen Sie die folgende Einfügeanweisung aus, die die ungültigen Daten für das Feld Name enthält.

In Lehrer einfügen (Name, Adresse, contact_no)
Werte ('Lina', 'Malibag, Dhaka', '01790975630');

Die folgende Fehlermeldung wird für den ungültigen Namenswert angezeigt.

Führen Sie die folgende Einfügeanweisung aus, die den leeren Wert für die enthält Adresse Und contact_no Felder und der leere Wert für diese Felder sind ungültig.

In Lehrer einfügen (Name, Adresse, contact_no)
Werte ('Nilufar Rahman', ",");

Die folgende Fehlermeldung wird für die leeren Werte angezeigt.

Führen Sie die folgende Auswahlanweisung aus, um zu überprüfen.

Wählen Sie * von Lehrern aus;

Die folgende Ausgabe zeigt, dass nach Verwendung des Triggers nur ein Datensatz eingefügt wird.

Beispiel-2: Erstellen Sie nach dem Löschen des Triggers

Der Auslöser nach dem Löschen feuert nach dem Löschen eines Datensatzes aus der jeweiligen Tabelle. Führen Sie die folgende SQL -Anweisung aus, um eine Funktion mit dem Namen zu erstellen After_delete () das wird in einem verwendet Nach dem Löschen auslösen, um die zugehörigen Zeilen aus dem zu löschen Kurse Tabelle, wenn ein Datensatz aus dem gelöscht wird Lehrer' Tisch. Hier, an alt.Ausweis wurde verwendet, um die gelöschten Verfolgung zu verfolgen Ausweis von dem Lehrer' Tisch.

Funktion erstellen After_delete ()
Gibt Trigger als zurück
$$
START
Löschen Sie aus Kursen, in denen lehre_id = alt ist.Ausweis;
Alt zurückkehren;
ENDE;
$$
Sprache PLPGSQL;

Die folgende Ausgabe wird angezeigt, wenn die Funktion erfolgreich in der erstellt wird Postgres Datenbank.

Führen Sie die folgende SQL -Anweisung aus, um einen Trigger mit dem Namen zu erstellen Delete_Teacher das wird die ausführen After_delete () Funktion nach dem Löschen eines Datensatzes aus dem Lehrer' Tabelle, die die Datensätze aus dem löscht Kurse Tisch, wo die lehrer_id Wert übereinstimmt mit dem gelöschten Ausweis Wert der Lehrer' Tisch.

Erstellen Sie Trigger Delete_Teacher
Nach dem Löschen
Über Lehrer
FÜR JEDE REIHE
Funktionsfunktion von AFTE_DELETE () ausführen;

Die folgende Ausgabe wird angezeigt, wenn der Trigger erfolgreich erstellt wird.

Führen Sie die folgende Löschanweisung aus, die den Datensatz aus der Tabelle der Lehrer löscht, in der die Ausweis Wert ist 1. Der Delete_Teacher Der Auslöser wird abgefeuert, wenn ein Datensatz aus dem gelöscht wird Lehrer' Tisch.

Löschen von Lehrern, wobei ID = 1;

Die folgende Ausgabe zeigt, dass ein Datensatz aus der Tabelle der Lehrer gelöscht wurde. Also die Delete_Teacher Der Auslöser wird abgefeuert und alle Datensätze aus der Courses -Tabelle löschen, die enthält 1 im lehrer_id Feld.

Führen Sie nun die folgenden Auswahlbefehle aus, um zu überprüfen, welche Datensätze aus dem gelöscht werden Lehrer Und Kurse Tische.

Wählen Sie * von Lehrern aus;
Aus Kursen auswählen;

Die Ausgabe zeigt, dass ein Datensatz aus der Tabelle der Lehrer gelöscht wurde, und zwei Datensätze wurden mit dem Trigger aus der Courses -Tabelle gelöscht.

Beispiel-3: Erstellen anstelle des Aktualisierungsauslösers

Der Auslöser anstelle von Aktualisierungen kann nur auf die Tabellenansichten angewendet werden. Sie müssen also eine Ansicht der Tabelle und eine Funktion erstellen, um die Verwendung dieser Art von Trigger zu testen. Führen Sie die folgende SQL -Anweisung aus, um eine Funktion mit dem Namen zu erstellen insert_course () Das wird die Werte der aktualisierten Lehrer und das Kurse Tabelle nach dem Einfügen eines neuen Datensatzes in die Kurse Tisch. Der Zweck dieser Funktion ist es, einen Lehrer für den neuen Kurs zuzuweisen, wenn der Lehrer verfügbar ist.

Funktion erstellen oder ersetzen Funktion Insert_course ()
Gibt Trigger als zurück
$$
ERKLÄREN
tec_id int;
START
In Kurse einfügen (Name, Credit_Hour)
Werte (neu.Name, neu.Credit_Hour);
Wählen Sie ID in TEC_ID von Lehrern aus, wo verfügbar = True Limit 1;
Aktualisieren Sie die Lehrer, die verfügbar sind = false, wobei id = tec_id;
Aktualisieren Sie Kurse SET lerner_id = tec_id wobei lehrer_id = 0;
Neu zurückkehren;
ENDE
$$
Sprache PLPGSQL;

Die folgende Ausgabe wird angezeigt, wenn die Funktion erfolgreich in der erstellt wird Postgres Datenbank.

Führen Sie den folgenden SQL -Befehl aus, um eine Ansicht der Kurstabelle zu erstellen.

Erstellen Sie Ansicht cures_view als
Aus Kursen auswählen;

Die folgende Ausgabe wird angezeigt, wenn die Ansicht erfolgreich erstellt wird.

Führen Sie nun die folgende SQL Daten aktualisieren Das wird abgefeuert, wenn ein neuer Datensatz mit der Verwendung der Verwendung der Verwendung eingefügt wird create_view Sicht.

Erstellen Sie Trigger update_data
Anstatt in cours_view einzufügen
FÜR JEDE REIHE
Funktionsfunktion Insert_Course ();

Die folgende Ausgabe wird angezeigt, wenn der Trigger erfolgreich erstellt wird.

Führen Sie die folgende Einfügungsanweisung aus, um einen neuen Datensatz in die Courses -Tabelle einzulegen, indem Sie verwenden cours_view Sicht.

In cours_view (Name, Credit_Hour) einfügen)
Werte ('höhere Mathematik', 3.0);

Die folgende Ausgabe wird angezeigt, wenn die Daten erfolgreich mit der Ansicht eingefügt werden.

Führen Sie nun die folgenden ausgewählten Aussagen aus, um zu überprüfen.

Wählen Sie * von Lehrern aus;
Wählen Sie * aus cours_view;

Die folgende Ausgabe zeigt, dass ein neuer Datensatz in die Courses -Tabelle und das verfügbare Feld der Lehrer' Die Tabelle wurde von "T" nach "F" aktualisiert, wobei der ID -Wert 3 beträgt, und dieser ID -Wert wurde in der aktualisiert Kurse Tabelle, um diesen Lehrer für den neu eingefügten Kurs zuzuweisen.

Abschluss

Viele Datenbankaufgaben können automatisch mit einem Auslöser in der PostgreSQL -Datenbank erfolgen. Jeder Auslöser wird durch Verwendung einer bestimmten Funktion ausgeführt. In diesem Tutorial wurden viele Zwecke für die Verwendung von Triggern erläutert, indem mehrere Trigger mit der Funktion erstellt werden. Hier wurden drei verschiedene Arten von Triggern erstellt, die den neuen PostgreSQL -Benutzern helfen, die Art des Erstellens und Verwendens von Triggern in der PostgreSQL -Datenbank zu erstellen und zu verwenden.