Advanced Mysql – Löst die Programmierung aus

Advanced Mysql – Löst die Programmierung aus

Ein Trigger (Trigger) ist ein Objekt in der Datenbank, das eine Aktion ausführt, wenn in der Datenbank eine Operation oder ein Ereignis aufgetreten ist.
Beispiel: Wenn eine Eintrittskarte verkauft wird, wird ein verfügbarer Ort abgezinst.

Der generische Code lautet

CREATE TRIGGER Namensauslöser

{VOR | NACH}
// Wird vor oder nach dem Event ausgeführt
{INSERT | UPDATE | LÖSCHEN}
// durch den Trigger ausgelöste Aktion oder Ereignis
ON Tabellenname
// Name der Tabelle, die das Ereignis betroffen hat
FÜR JEDE REIHE

SQL-Satz, der ausgeführt wird

Wir haben das Beispiel des Ticketverkaufs für eine Veranstaltung oder ein Produkt auf Lager erstellt. Um dies zu testen, können Sie phpmyadminn oder eine beliebige Software verwenden, die gespeicherte Prozeduren und Trigger unterstützt.

Wir erstellen die Datenbank

CREATE DATABASE `sales`

Wir erstellen 2 Tabellen

Der Tisch zum Speichern der verkauften Tickets

CREATE TABLE `tickets` (
`id` int (10) NICHT NULL AUTO_INCREMENT,
`idevento` int (11) NICHT NULL,
`nroticket` int (11) NICHT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;

Die Tabelle zum Speichern der Verfügbarkeit von Tickets für ein bestimmtes Ereignis

CREATE TABLE IF NOT EXISTS `stock` (
`idevento` int (10) NICHT NULL,
`stockactual` int (10) NICHT NULL
) ENGINE = MyISAM DEFAULT CHARSET = latin1;

CREATE TABLE `events` (
`idevento` int (10) NICHT NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
`date` date NICHT NULL,
PRIMARY KEY (`idevento`)
) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1;

Wir erstellen den Trigger als SQL-Abfrage, in diesem Fall verwenden wir die kostenlose Software HEIDISQL, den Satz NEW.nombre_column
a gibt an, welches Feld der Trigger-Operation in diesem Fall für die Ausführung verwendet werden soll idevento, wenn mehr vorhanden sind, verwende ich sie immer mit NEW davor.

See also  AngularJS - Aufrufen der Bibliothek

CREATE TRIGGER `update_stock` NACH INSERT ON` tickets`
FÜR JEDEN
REIHE
UPDATE stock SET stockactual = stockactual -1 WHERE idevento = NEW.idevento

MYSQL_TRIGGERS.jpg

: Wir führen die SQL-Anweisung aus und stellen fest, dass der Trigger tatsächlich erstellt wurde :

MYSQL_TRIGGERS_2.jpg

Als Beispiel fügen wir in die Bestandsliste 500 Tickets ein, die für ein Ereignis verfügbar sind. Hier gibt es keine Antwort vom Auslöser, da wir ihn so erstellen, dass er ausgeführt wird, wenn eine Einfügung in die Kartentabelle erfolgt.

INSERT IN `sales`.`stock` (` idevento`, `stockactual`) VALUES (‘1’, ‘500’);

MYSQL_TRIGGERS_3.jpg

Lassen Sie uns nun die Magie der Auslöser ausprobieren

Angenommen, wir verkaufen Ticket Nummer 100 für Event 1 und fügen den Verkauf in die Datenbank Tickets ein

INSERT INTO tickets (idevento, nroticket) VALUES (‘1’, ‘100’);

Beobachten Sie, was in der Bestandsliste passiert ist, und wir werden sehen, dass in der Bestandsliste für dieses Ereignis jetzt 499 Tickets verfügbar sind, da das Einfügen in die Bestandsliste ausgelöst wurde und ich tigger updates_stock ausgeführt habe .

Die Verwendung dieser Methodik ermöglicht dem Benutzer und dem Programmierer eine transparente Ausführung, da bekannt ist, dass eine Aktion ausgeführt wird, wenn eine andere Aktion sie auslöst, und Routineaufgaben wie die Aktualisierung eines Bestands bei Verkäufen vermieden werden. Stellen Sie sich dies vor, wenn der Verkauf ein Markt mit Tausenden ist Produkt sehen wir, wie wir mit ein paar Zeilen Code ein großes Problem lösen.

Ein anderes Beispiel könnte sein, ein Produkt aus dem Lager zu entfernen und den Bestand zu entfernen

CREATE TRIGGER `Low_products` NACH DELETE ON` products`
FÜR JEDEN
AB Lager LÖSCHEN WO idproduct = NEW.idproduct
REIHE

Die Möglichkeiten sind endlos und Sie können tief in komplexere Situationen vordringen. Trigger oder Trigger sind eine großartige Ergänzung zu gespeicherten Prozeduren

See also  CURL, um Informationen und Hacking aus PHP zu extrahieren

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *