Einige Tools, die die MySQL-Datenbank-Engine bereitstellt, sind die gespeicherten Prozeduren , Funktionen und Trigger , die zum Ausführen von Transaktionen oder Operationen wie dem Einfügen oder Ändern von Datensätzen verwendet werden.
Die gespeicherten Prozeduren sind kleine Programme, die in SQL-Code entwickelt wurden. Eine gespeicherte Prozedur ist eine Reihe von SQL-Befehlen, die zusammen mit der Datenbank gespeichert werden.
Der Vorteil einer gespeicherten Prozedur ist, dass wir sie in einem beliebigen Texteditor erstellen können und dass sie sogar auf dem Server von der Datenbank-Engine ausgeführt wird und nicht für die Benutzer, sondern nur für den Administrator zugänglich ist.
Eine gespeicherte Prozedur sendet ihre Ergebnisse an eine Anwendung, damit sie auf dem Bildschirm angezeigt werden, um eine Überlastung des Servers zu vermeiden.
- Gespeicherte MYSQL-Prozeduren – Erstellung, Abfragen und Dateneinfügungen
Ich hatte erklärt, wie man sie erstellt. Hier werden Funktionen und Trigger oder Trigger hinzugefügt. Wir werden ein Beispiel in einer Immobiliendatenbank sehen, das wir als Miete bezeichnen und dann die Tabellen erstellen.
- Tabellenstruktur für die Tabelle "Immobilien" TABELLE ERSTELLEN, WENN ES KEINE "Immobilie" GIBT ( `id` int (11) NICHT NULL, `userid` int (11) DEFAULT NULL, `idtipoimueble` int (6) DEFAULT '0', `price` decimal (10,2) DEFAULT '0.00', `comision` decimal (10,0) NICHT NULL, `description` text, `dateAlta` date DEFAULT '0000-00-00', `idprovince` int (10) DEFAULT NULL, `idlocality` int (10) DEFAULT NULL, `address` varchar (150) DEFAULT NULL, `pisoydepto` varchar (100) STANDARD NULL, `between_calles` text, `idoperacion` int (100) DEFAULT NULL, "markiertes" Zeichen (3) STANDARD "nein", `image1` varchar (255) DEFAULT NULL, `image2` varchar (255) DEFAULT NULL, `image3` varchar (255) DEFAULT NULL, `image4` varchar (255) DEFAULT NULL, `antiquity` varchar (100) STANDARD NULL, `mt2covered` int (11) DEFAULT NULL, `surface_lote` int (11) DEFAULT NULL, `enabled` enum ('yes', 'no') NOT NULL DEFAULT 'yes' ) ENGINE = MyISAM AUTO_INCREMENT = 196 DEFAULT CHARSET = latin1; - Indizes der Tabelle "Immobilien" ALTER TABELLE "Immobilien" ADD PRIMARY KEY (`id`);
Wir werden nun für jede Transaktion eine gespeicherte Prozedur entwickeln, um einen Datensatz abzurufen, 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 zu konsultieren:
BEGRENZER // VERFAHREN ERSTELLEN pa_listainmuebles () BEGINNEN SELECT * FROM Immobilien; ENDE // DELIMITER;
MYSQL versteht, dass ein Satz mit einem Semikolon endet. Die DELIMITER-Anweisung ändert das Endungszeichen in ein beliebiges anderes Zeichen. Konventionell geben wir mit // das Ende der gespeicherten Prozedur an, damit MySQL die gespeicherte Prozedur nicht beendet, wenn das erste Semikolon gefunden wird.
Auf der Registerkarte Routinen können wir jede von uns erstellte Transaktion anzeigen und von dort aus den Code ändern, ausführen, exportieren oder löschen.
Zum Ausführen eines Speichervorgangs verwenden wir den Befehl CALL auf der Registerkarte SQL oder auch aus einer Programmiersprache wie .NET oder Java. Als Nächstes rufen wir die mit dem Befehl erstellte gespeicherte Prozedur auf.
CALL pa_listainmuebles ();
Als nächstes erstellen wir eine gespeicherte Prozedur, um eine Eigenschaft einzufügen. Dazu benötigen wir den Parametertyp IN, dh, die gespeicherte Prozedur weist Daten und Eingabevariablen zu, um eine Transaktion durchzuführen. In diesem Fall speichern wir sie in der Datenbank.
BEGRENZER // VERFAHREN ERSTELLEN pa_nuevoinmueble ( IN id INT, IN Benutzer-ID INT, IN DEZIMALEN Preis, IN KOMMISSION DECIMAL ) BEGINNEN INSERT INTO-Eigenschaft (ID, Benutzer-ID, Preis, Provision) VALUES (ID, Benutzer, Preis, Provision) ENDE // DELIMITER;
Dann können wir die gespeicherte Prozedur ausführen, die die Parameter aufruft und zuweist.
CALL `pa_nuevoinfurniture` ('12 ',' 15 ',' 10.00 ',' 0.05 ')
Wir können Daten auch eingeben, indem wir die Routine von Phpmyadmin ausführen.
Als Nächstes erstellen wir die gespeicherte Prozedur zum Bearbeiten einer Eigenschaft im Phpmyadmin-Editor. In diesem Fall ändern wir nur den Preis.
Wir können Rollen aus dem Feld Definitor erstellen, in dem wir einen im MySQL-Server definierten Benutzer zuweisen können, in diesem Fall den Root-Benutzer des Host-LocalHost, damit er auf die gespeicherte Prozedur zugreifen kann.
Wenn wir es aus SQL-Code machen wollen, müssen wir die folgenden Befehle ausführen:
CREATE DEFINER = `root` @` localhost` VERFAHREN `pa_editarinmueble` (IN` precionuevo` DECIMAL (10,2), IN` idinmueble` INT (11)) BEGINNEN UPDATE Immobilien SET Preis = Vorbestellung WHERE id = idinmueble; ENDE
Sie führen es aus und sind bereit.
Ein Trigger oder Trigger in MySQL ist eine Reihe von SQL-Anweisungen, die von einer gespeicherten Prozedur abhängen und automatisch ausgeführt werden, wenn ein bestimmtes Ereignis in unserer Datenbank eintritt. Diese Ereignisse werden durch Transaktionen oder Anweisungen wie INSERT, UPDATE und DELETE ausgelöst.
Wenn beispielsweise eine Änderung in einem Datensatz gespeichert wird, erstellen wir automatisch eine Sicherungskopie oder zeichnen eine Überwachungsdatei auf, um zu erfahren, 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 werden die folgende Immobilien-Audit-Tabelle erstellen:
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 Meldung überwacht, wenn jemand den Preis einer Immobilie ändert.
CREATE DEFINER = `root` @` localhost` TRIGGER `inmuebles_after_update` NACH UPDATE VON` immobilien` FÜR JEDES REIHEN-INSERT INTO-Audit (Benutzer, Beschreibung, Datum) WERTE (Benutzer (), CONCAT ('Der Preis der Immobilie wurde geändert', NEW.id, '(', OLD.price, ') von (', NEW.price, ')', NOW ())
Dieser Trigger wird nach einer Preisaktualisierung automatisch ausgeführt. Auf Wunsch können wir weitere Felder einfügen. Bei ALT geben wir das Feld mit dem Wert vor der Änderung an und bei NEU den neu eingegebenen Wert. Bei JETZT () geben wir das Datum und an aktuelle Zeit
Wir haben einen Trigger erstellt, der After Update für Immobilien enthält. In diesem Fall fügen wir nach einer Aktualisierung in der Immobilientabelle den Benutzer, der die Änderung vorgenommen hat, den neuen Preis und den vorherigen Preis hinzu.
Ich führe ein Update für eine Immobilie durch:
CALL `pa_editarinmueble` ('80000', '170')
Dann gehen wir zum Audit-Tisch und wir können die Änderung sehen:
Wir können die Ergebnisse auch in einem Bericht in Druckansicht von Phpmyadmin sehen. Wir können sehen, wie die Daten, die die Immobilie identifizieren, gespeichert wurden, welche Änderungen vorgenommen wurden und von welchem Benutzer sie vorgenommen wurden. Außerdem können wir das Datum und die Uhrzeit der Änderung abrufen.
Als nächstes sehen wir eine andere mögliche Anwendung, wenn eine Immobilie vermietet ist, dann wechselt sie automatisch vom Status in den Status inaktiv oder wir setzen sie als nicht verfügbar.
Dazu müssen wir eine einfache Tabelle haben, um die Eigenschaft zu speichern, die gemietet wird, für ein praktisches Beispiel werden wir nicht viel Genauigkeit in den Daten nehmen.
CREATE TABLE `mietet` ( `id` INT (10) NICHT NULL, `idinmueble` INT (10) NICHT NULL, `idinquilino` INT (11) NICHT NULL, PRIMARY KEY (`id`) ) COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB;
Als Nächstes erstellen wir die gespeicherte Prozedur, um einen neuen Datensatz in die Mietpreistabelle einzufügen.
CREATE DEFINER = `root` @` localhost` VERFAHREN `pa_newcall` (IN` idinmueble` INT, IN `idinquilino` INT) SPRACHE SQL NICHT DETERMINISTISCH ENTHÄLT SQL SQL SECURITY DEFINER KOMMENTAR '' INSERT IN `rents` (` idinmueble`, `idinquilino`) VALUES (idinmueble, idinquilino)
Und dann wird der Auslöser zum Ändern von Eigenschaften aktiviert:
CREATE DEFINER = `root` @` localhost` TRIGGER `rentals_after_insert` AFTER INSERT ON` rentals` FÜR JEDE REIHEN-UPDATE-Eigenschaften SET aktiviert = 'nein' wobei id = NEW.idinfurniture
Dann rufen wir die gespeicherte Prozedur auf, in der wir die ID der Immobilie und die ID des von mir gemieteten Kunden oder Mieters zuweisen.
CALL pa neues Auto (170.11)
Als nächstes gehen wir zur Immobilientabelle und wir müssen sehen, dass das aktivierte Feld den Zustand ändert, WENN es aktiv ist, wird es NICHT aktiv.
Wir haben den Vorteil der Verwendung der in MySQL gespeicherten Triggered-with-Prozedur gesehen, um:
- Überwacht und zeichnet Ereignisse oder Aktivitäten auf, um Daten in einer Tabelle zu ändern.
- Ändern Sie den Status eines Felds, indem Sie Berechtigungen und Aktionen in einer Tabelle aktivieren oder verweigern
- Außerdem kann die Konsistenz der Daten gewahrt werden, indem Aktionen entsprechend Ereignissen ausgeführt werden, die sich auf eine oder mehrere Tabellen auswirken.
In einem weiteren Tutorial werden wir mit der Programmierung von bedingten Strukturen und sich wiederholenden Strukturen in gespeicherten Prozeduren fortfahren.