Gespeicherte Prozeduren und Trigger in MySQL

Inhaltsverzeichnis

Einige von der MySQL-Datenbank-Engine bereitgestellte Tools sind die Gespeicherte Prozeduren, Funktionen und Trigger, die verwendet werden, um Transaktionen oder Operationen wie das Einfügen oder Ändern von Datensätzen durchzuführen.

Stored Procedures sind kleine Programme, die in SQL-Code entwickelt wurden. Eine gespeicherte Prozedur ist ein Satz von SQL-Befehlen, die zusammen mit der Datenbank gespeichert werden.

Der Vorteil einer gespeicherten Prozedur besteht darin, dass wir sie in jedem Texteditor erstellen können und sogar auf dem Server, sie wird von der Datenbank-Engine ausgeführt und ist nicht für Benutzer, sondern nur für den Administrator zugänglich.

Eine gespeicherte Prozedur sendet ihre Ergebnisse an eine Anwendung, damit sie sie auf dem Bildschirm anzeigt, um eine Überlastung des Servers zu vermeiden, im Tutorial:

  • MYSQL Stored Procedures - Erstellung, Abfragen und Dateneinfügungen

Ich hatte erklärt, wie man sie erstellt, hier werden wir Funktionen und Trigger hinzufügen. Wir werden ein Beispiel in einer Datenbank einer Immobilie sehen, die wir Mietplatz nennen, und dann werden wir die Tabellen erstellen.

 - Tabellenstruktur für Tabelle `immobilien` CREATE TABLE IF NOT EXISTS`immobilien` (`id` int (11) NOT NULL,` userid` int (11) DEFAULT NULL, `idtype property` int (6) DEFAULT '0 ', `Preis` Dezimal (10,2) DEFAULT' 0.00 ',` Provision` Dezimal (10,0) NOT NULL, `Beschreibung` Text,` Highdate` Datum DEFAULT' 0000-00-00 ', `Provinz ID` int (10) DEFAULT NULL, `idlocalidad` int (10) DEFAULT NULL,` address` varchar (150) DEFAULT NULL, `floor and apartment` varchar (100) DEFAULT NULL,` between_streets` text, `idoperation` int (100 ) DEFAULT NULL , `featured` char (3) DEFAULT 'no',` image1` varchar (255) DEFAULT NULL, `image2` varchar (255) DEFAULT NULL,` image3` varchar (255) DEFAULT NULL, `image4` varchar (255) DEFAULT NULL, `altes` varchar (100) DEFAULT NULL,` mt2covered` int (11) DEFAULT NULL, `lot_surface` int (11) DEFAULT NULL,`aktivierte` Aufzählung ('yes','no') NOT NULL DEFAULT' si ') ENGINE = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - Indizes der Tabelle `Immobilien` ALTER TABLE` Immobilien` ADD PRIMARY KEY (`id`);

Wir werden nun für jede Transaktion eine gespeicherte Prozedur entwickeln, um einen Datensatz abzufragen, einzufügen, zu ändern und zu löschen.

Wir können Phpmyadmin oder einen Manager wie Heidisql verwenden, der kostenlos ist und unter Windows oder Linux mit Wine funktioniert.

Wir erstellen eine gespeicherte Prozedur, um die Immobilientabelle abzufragen:

 DELIMITER // CREATE PROCEDURE pa_listainmuebles () BEGIN SELECT * FROM Eigenschaften; ENDE // DELIMITER;
MYSQL versteht, dass eine Anweisung mit einem Semikolon endet. Das DELIMITER-Anweisung ändern Sie das Endzeichen gemäß Konvention in ein beliebiges anderes Zeichen // wird verwendet, um das Ende der gespeicherten Prozedur anzuzeigen, damit MySQL die gespeicherte Prozedur nicht beendet, wenn das erste Semikolon auftritt.

Wir können zum gehen Registerkarte "Routinen" um jede von uns erstellte Transaktion zu sehen und von dort aus den Code zu ändern, auszuführen, zu exportieren oder zu löschen.

Zur Ausführung eines Vorgangs durch Speicherung verwenden wir die CALL-Befehl von dem SQL-Registerkarte oder auch aus einer Programmiersprache wie .NET oder Java. Als nächstes rufen wir die mit dem Befehl erstellte gespeicherte Prozedur auf.

 CALL pa_listinmuebles ();

Als nächstes erstellen wir eine gespeicherte Prozedur zum Einfügen einer Eigenschaft, dazu benötigen wir Parameter vom Typ IN, dh wir weisen der gespeicherten Prozedur Daten und Eingabevariablen zu, um eine Transaktion durchzuführen, in diesem Fall speichern wir sie in der Datenbank.

 DELIMITER // CREATE PROCEDURE pa_nuevoinmueble (IN id INT, IN userid INT, IN price DECIMAL, IN provisions DEZIMAL) BEGIN INSERT INTO property` (`id`,` userid`, `price`,` provisions`) VALUES (id, userid ) , Preis, Provision) END // DELIMITER;

VERGRÖSSERN

Dann können wir die gespeicherte Prozedur ausführen, indem wir die Parameter aufrufen und zuweisen.

 CALL `pa_newinmueble` ('12','15','10.00','0.05')
Wir können auch Daten eingeben, indem wir die Routine von Phpmyadmin ausführen.

VERGRÖSSERN

Als nächstes erstellen wir die gespeicherte Prozedur zum Bearbeiten einer Eigenschaft aus dem Phpmyadmin-Editor, in diesem Fall ändern wir nur den Preis.

Wir können Rollen aus dem Definer-Feld erstellen, in denen wir einen im Mysql-Server definierten Benutzer zuweisen können, in diesem Fall den Root-Benutzer des localhost-Hosts, damit dieser auf die gespeicherte Prozedur zugreifen kann.
Wenn wir dies von SQL-Code aus tun möchten, müssen wir die folgenden Befehle ausführen:

 CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_editarinmueble` (IN` neue Eigenschaft` DECIMAL (10,2), IN `Eigenschafts-ID` INT (11)) BEGIN UPDATE Eigenschaft SET Preis = neue Eigenschaft WHERE id = Eigenschafts-ID; ENDE
Sie führen es und Sie sind fertig.

Verwenden von Trigger oder Triggern in Mysql
Ein Trigger oder Trigger in MySQL ist ein Satz von SQL-Anweisungen, die von einer gespeicherten Prozedur abhängen und automatisch ausgeführt werden, wenn ein bestimmtes Ereignis in unserer Datenbank auftritt. Diese Ereignisse werden durch Transaktionen oder Anweisungen wie INSERT, UPDATE und DELETE ausgelöst.

Ein Beispiel ist, wenn eine Änderung in einer Registrierung gespeichert wird, wir automatisch ein Backup erstellen oder eine Audit-Datei aufzeichnen, um zu wissen, welche Daten wann und von wem geändert wurden. Sie können für jede Manipulation verwendet werden, die sich auf die Daten auswirkt, um neue Informationen zu unterstützen oder zu generieren.

Wir erstellen die folgende Immobilien-Audit-Tabelle:

 CREATE TABLE `audit` (` user` VARCHAR (200) NULL DEFAULT NULL, `description` TEXT NULL,` date` DATETIME NULL DEFAULT NULL) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB
Wir erstellen einen Auslöser, der eine Nachricht im Audit speichert, wenn jemand den Preis einer Immobilie ändert.
 CREATE DEFINER = `root` @` localhost` TRIGGER `real estate_after_update` AFTER UPDATE ON` real estate` FOR JED ROW INSERT INTO audit (user, description, date) VALUES (user (), CONCAT ('Immobilienpreis geändert', NEU.id, '(', ALTER.Preis, ') von (', NEU.Preis, ')'), JETZT ())
Dieser Trigger wird automatisch nach einer Preisaktualisierung ausgeführt, wir können weitere Felder hinzufügen, wenn wir möchten, mit OLD geben wir das Feld mit dem Wert vor der Änderung an und mit NEW geben wir den neuen eingegebenen Wert an, mit NOW () geben wir das Datum an und aktuelle Uhrzeit.

Wir erstellen einen Trigger, der Nach Update auf Eigenschaften als Ereignis hat, d. h. nachdem eine Aktualisierung in der Eigenschaftstabelle auftritt, fügen wir in diesem Fall den Benutzer, der die Änderung vorgenommen hat, den neuen Preis und den vorherigen Preis hinzu.

Ich führe ein Update für eine Property durch:

 CALL `pa_editarinmueble` ('80000', '170')
Dann gehen wir zur Audit-Tabelle und wir können die Änderung sehen:

Wir können die Ergebnisse auch in einem Bericht in der Druckansicht von Phpmyadmin sehen. Wir können sehen, wie die Daten, die die Immobilie identifizieren, die vorgenommene Änderung und der Benutzer, der sie vorgenommen hat, gespeichert wurden, wir haben auch das Datum und die Uhrzeit der Änderung.

Als nächstes sehen wir eine weitere mögliche Anwendung, wenn eine Immobilie vermietet wird, die ihren Status automatisch in nicht aktiv ändert oder wir sie nicht verfügbar machen.

Dazu benötigen wir eine einfache Tabelle, in der gespeichert werden soll, welche Immobilie vermietet wird. Für ein praktisches Beispiel werden wir die Daten nicht sehr streng nehmen.

 CREATE TABLE `rentals` (` id` INT (10) NOT NULL, `property id` INT (10) NOT NULL,` Mieter-ID` INT (11) NOT NULL, PRIMARY KEY (`id`)) COLLATE = 'latin1_swedish_ci ' ENGINE = InnoDB; 
Als Nächstes erstellen wir die gespeicherte Prozedur, um einen neuen Datensatz in die Miettabelle einzufügen.
 CREATE DEFINER = `root` @` localhost` PROCEDURE `pa_newrental` (IN` property id` INT, IN `tenant id` INT) LANGUAGE SQL NOT DETERMINISTIC ENTHÄLT SQL SQL SECURITY DEFINER COMMENT '' INSERT INTO` rentals` (`property id `,` Mieter-ID`) WERTE (Mandant-ID, Mieter-ID)

Und dann der Auslöser zum Ändern von Eigenschaften aktiviert:

 CREATE DEFINER = `root` @` localhost` TRIGGER `rentals_after_insert` AFTER INSERT ON` rentals` FOR JED ROW UPDATE Immobilien SET aktiviert = 'no' wobei id = NEU. propertyid
Dann rufen wir die gespeicherte Prozedur auf, in der wir die ID der Immobilie und die ID des Kunden oder Mieters zuweisen, den ich vermiete.
 ANRUF für Neuvermietung (170.11)
Als nächstes gehen wir zur Immobilientabelle und wir sollten sehen, dass das aktivierte Feld den Zustand ändert, wenn es aktiv ist, zu NICHT aktiv ist.

Wir haben die Vorteile der Verwendung von Trigger mit gespeicherten Prozeduren in MySQL gesehen für:

  • Auditieren und zeichnen Sie Datenänderungsereignisse oder -aktivitäten in einer Tabelle auf.
  • Ändern Sie den Status eines Felds, indem Sie Berechtigungen und Aktionen für eine Tabelle aktivieren oder verweigern
  • Es ermöglicht auch, die Konsistenz der Daten zu bewahren, indem Aktionen gemäß Ereignissen ausgeführt werden, die eine oder mehrere Tabellen betreffen.
In einem anderen Tutorial werden wir mit der Programmierung von bedingten Strukturen und sich wiederholenden Strukturen in gespeicherten Prozeduren fortfahren.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave