Direct naar de hoofdinhoud
Module 12 · Les 4 van 448/57 in de cursus~12 min
Modulelessen (4/4)

Praktische triggers en audit

Nu we hebben geleerd hoe we slimme kogels kunnen smeden (de triggerfuncties), moeten we ze op echte primed-wapens monteren, wachtend op een gebeurtenis: hier komen de daadwerkelijke triggers! Een trigger koppelt formeel een eerder gemaakte functie en instrueert deze om "VOOR" of "NA" een bepaalde CRUD-gebeurtenis op een bepaalde tafel af te vuren.

Er zijn veel opties; FOR EACH ROW activeert deze bijvoorbeeld één keer per getroffen rij, dus als een bulkquery een GLOBAL UPDATE van meer dan 5 miljoen rijen is, worden er 5 miljoen micro-executies geactiveerd - wees daar voorzichtig mee!

SQL
CREATE TRIGGER sync_inventory_trigger
-- Event options
AFTER INSERT OR UPDATE ON order_items
-- Modus operandi (singular or global macro-block FOR EACH STATEMENT)
FOR EACH ROW
-- Run the forged action
EXECUTE FUNCTION update_stock();

De trigger is onzichtbaar voor JavaScript en zorgt ervoor dat de voorraad autonoom perfect consistent blijft, uitsluitend op basis van updates die veilig naar de engine worden verzonden.

Automatisering van Updated_At

Er is een altijd groen zakelijk probleem waarbij we vergeten { updated_at: new Date() } door te geven in onze JS-updatemodellen. Een triggerfunctie set_updated_at gecombineerd met een BEFORE UPDATE trigger elimineert deze hinder, waarbij elke recordwijziging automatisch automatisch wordt bijgewerkt.

Probeer het zelf

Oefening#sql.m12.l4.e1
Pogingen: 0Laden…

Maak een trigger met de naam 'trg_force_uppercase'.\nVoeg deze toe in de fase 'BEFORE INSERT' aan de tabel 'klanten'.\nForceer rij-voor-rij berekening 'FOR ELKE RIJ' en roep de uitvoering van de functie 'force_uppercase_name()' aan.\nOpmerking: maak ook de UDF 'force_uppercase_name' (aangezien de omgeving geïsoleerd is) bovenaan de code opnieuw en voeg deze vervolgens toe de triggerdeclaratie.

Editor laden…
Toon hint

Tekstsyntaxis: maak eerst de functie en voeg vervolgens CREATE TRIGGER trg_force_uppercase toe VOORDAT INSERT OP klanten VOOR ELKE RIJ FUNCTIE UITVOEREN force_uppercase_name();

Oplossing beschikbaar na 3 pogingen

Oefening#sql.m12.l4.e2
Pogingen: 0Laden…

Dood de sensor! Soms willen we onbewerkte zaadbestanden of tijdelijke systeemeigen wijzigingen doorsturen, waardoor luidruchtige audits worden omzeild.\nHet verwijderen van een trigger is ongelooflijk eenvoudig (je verwijdert niet de organische functie, je verwijdert alleen de sensorbinding).\nGebruik het trefwoord 'DROP TRIGGER', waarbij je de naam en de globale bijlage specificeert.

Editor laden…
Toon hint

Vergeet niet aan te geven waar vandaan. DROP TRIGGER trg_force_uppercase AAN klanten;

Oplossing beschikbaar na 3 pogingen