Spisie treści
Zaawansowany Mysql - Programowanie wyzwalaczyWyzwalacze to obiekt w bazie danych, który wykonuje akcję po wystąpieniu operacji lub zdarzenia w bazie danych.
Przykład przy sprzedaży biletu wstępu rabatujemy na dostępne miejsce.
Ogólny kod to
UTWÓRZ SPUST nazwa wyzwalacza
{PRZED | DESPUJE DE }
// Zostanie wykonany przed lub po zdarzeniu
{WSTAW | AKTUALIZACJA | KASOWAĆ}
// akcja lub zdarzenie, które wyzwala wyzwalacz
ON nazwa stołu
// nazwa tabeli, która wpłynęła na zdarzenie
DLA KAŻDEGO RZĘDU
instrukcja sql do wykonania
Tworzymy przykład sprzedaży biletów na wydarzenie lub produkt w magazynie. Aby to przetestować, możesz użyć phpmyadminn lub dowolnego oprogramowania, które obsługuje procedury składowane i wyzwalacze.
Tworzymy bazę danych
TWORZENIE BAZY DANYCH `sprzedaży`
Tworzymy 2 stoły
Stół do przechowywania sprzedanych biletów
UTWÓRZ TABELĘ `bilety` (
`id` int (10) NOT NULL AUTO_INCREMENT,
`idevent` int (11) NIE NULL,
`nroticket` int (11) NIE NULL,
KLUCZ GŁÓWNY ('id')
) ENGINE = MyISAM DOMYŚLNY ZESTAW ZNAKÓW = latin1 AUTO_INCREMENT = 1;
Tabela do przechowywania dostępności biletów na określone wydarzenie
UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `stock` (
`idevent` int (10) NIE NULL,
`stockactual` int (10) NOT NULL
) ENGINE = MyISAM DEFAULT CHARSET = latin1;
UTWÓRZ TABELĘ „wydarzenia” (
`idevent` int (10) NOT NULL AUTO_INCREMENT,
`event` int (11) varchar (200),
`data` data NIE NULL,
KLUCZ GŁÓWNY („idevent”)
) ENGINE = MyISAM DOMYŚLNY ZESTAW ZNAKÓW = latin1 AUTO_INCREMENT = 1;
Wyzwalacz tworzymy jako zapytanie sql, w tym przypadku korzystamy z bezpłatnego oprogramowania HEIDISQL, instrukcja NEW.nazwa_kolumny
a wskazuje, którego pola operacji wyzwalacza będziemy używać w wykonaniu w tym przypadku zdarzenia, jeśli jest ich więcej, zawsze używam ich z NEW na początku,
UTWÓRZ TRIGGER `update_stock` PO WSTAWIENIU` biletów`
DLA KAŻDEGO
WIERSZ
AKTUALIZUJ stan magazynowy USTAW stan rzeczywisty = stan rzeczywisty -1 GDZIE idevent = NEW.idevent
Wykonujemy instrukcję SQL i widzimy, że wyzwalacz rzeczywiście został utworzony:
Jako przykład wstawiamy w magazynie tabeli 500 biletów dostępnych dla zdarzenia, tutaj nie będzie odpowiedzi od wyzwalacza, ponieważ tworzymy go do wykonania, jeśli nastąpi wstawienie w biletach tabeli.
WSTAWIĆ WARTOŚCI ('1', '500');
Teraz spróbujmy magii wyzwalaczy
Załóżmy, że sprzedajemy bilet numer 100 na wydarzenie 1 i wstawiamy sprzedaż do bazy danych biletów
INSERT INTO ticket (idevent, nroticket) VALUES ('1', '100');
Przyjrzyjmy się, co się stało w tabeli stockowej i zobaczymy, że w magazynie na to wydarzenie jest teraz dostępnych 499 biletów, ponieważ wstawka w tabeli bilet Strzelam i biegnę do tygrysa update_stock.
Zastosowanie tej metodologii pozwala na przejrzystość wykonania zarówno dla użytkownika, jak i programisty, wiedząc, że akcja zostanie wykonana, jeśli inna ją wywoła, a tym samym uniknąć rutynowych zadań, takich jak aktualizacja zapasów w przypadku sprzedaży, wyobraź sobie to, jeśli sprzedaż jest rynek z tysiącami produktów, widzimy jak za pomocą kilku linijek kodu rozwiązujemy duży problem.
Innym przykładem może być usunięcie produktu z magazynu i usunięcie zapasów
UTWÓRZ WYZWALANIE `Dolne_produkty` PO USUNIĘCIU` produktów`
DLA KAŻDEGO
USUŃ Z magazynu GDZIE productid = NEW.productid
WIERSZ
Możliwości są nieograniczone i można zagłębić się w bardziej złożone sytuacje, wyzwalacze są świetnym uzupełnieniem procedur składowanychPodobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt