Denne artikel beskriver, hvordan du opretter og bruger MySQL-udløsere på din A2 Hosting-konto. Triggere er foruddefinerede regler knyttet til en tabel. De kan kaldes ("udløst") før eller efter en SQL-sætning indsætter, opdaterer eller sletter data fra den tilknyttede tabel.
Du kan bruge triggere i en lang række scenarier. For eksempel kan du bruge en trigger til automatisk at ændre visse værdier, når en række opdateres. Eller du kan angive et sæt handlinger, der skal udføres, når en række slettes. Mulighederne er næsten uendelige.
Oprettelse og brug af triggere
Du kan oprette og bruge triggere på enhver A2 Hosting-server, der bruger MySQL.
Opsætning af en testdatabase
For at demonstrere et grundlæggende eksempel på en trigger i aktion, lad os starte med at oprette en database til testformål. I den følgende SQL-sætning skal du erstatte brugernavn med dit kontobrugernavn:
OPRET DATABASE brugernavn _test;Du kan køre den forrige SQL-kommando (og de følgende SQL-kommandoer) fra kommandolinjen ved hjælp af MySQL-værktøjet eller i din webbrowser ved hjælp af phpMyAdmin.
Hvis du bruger phpMyAdmin, skal du klikke på navnet brugernavn _test for at vælge databasen. Ellers, hvis du bruger mysql-kommandolinjeprogrammet, skal du skrive følgende SQL-sætning:
BRUG brugernavn _test;
Opret derefter en tabel i brugernavnet _test database med navnet produkter . For at gøre dette skal du køre følgende SQL-sætning:
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod>_id));Den følgende SQL-sætning tilføjer nogle eksempeldata til produkterne tabel:
INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);Nu er vi klar til at skabe en trigger til vores bord!
Oprettelse af triggeren
Lad os oprette en trigger ved navn updateProductPrice . Denne særlige trigger aktiveres, når produkterne tabellen er opdateret. Når denne hændelse opstår, tjekker triggeren hver række for at se, om produktet koster (prod_cost ) værdien ændres. Hvis det er det, sætter triggeren automatisk varens nye pris (prod_price ) til 1,40 gange varens nye pris (med andre ord en 40 % markup).
For at oprette denne trigger skal du køre følgende MySQL-sætninger:
DELIMITER $$CREATE TRIGGER `updateProductPrice`FØR OPDATERING PÅ `produkter`FOR HVER RÆKKEBEGIN HVIS NEW.prod_cost <> OLD.prod_cost SÅ SÆT NEW.prod_price =NEW.prod_cost * 1,40; END IF;END$$DELIMITER;DELIMITER kommandoen i begyndelsen af disse udsagn forhindrer MySQL i at behandle triggerdefinitionen for tidligt. DELIMITER kommandoen i slutningen af disse udsagn returnerer behandlingen til normal.Brug af triggeren
updateProductPrice trigger er nu klar til at blive aktiveret automatisk, hver gang en række i produkterne tabellen er opdateret. Kør f.eks. følgende SQL-sætning for at ændre prisen på Basic Widget:
OPDATERING produkter SET prod_cost =7,00 WHERE prod_id =1;Når du kører denne SQL-sætning, aktiveres triggeren også og opdaterer automatisk Basic Widgets pris i forhold til den nye pris. For at bekræfte dette kan du køre følgende SQL-sætning:
VÆLG * FRA produkter;Denne erklæring returnerer følgende resultater:
+--------+-------------------+--- ---+| prod_id | prod_name | prod_cost | prod_price |+--------+--------------+-----------+-------- --+| 1 | Grundlæggende widget | 7 | 9,8 || 2 | Mikro-widget | 0,95 | 1,35 || 3 | Mega Widget | 99,95 | 140 |+---------+------------------------ --+3 rækker i sæt (0,00 sek.)Som du kan se, er updateProductPrice trigger har automatisk opdateret Basic Widgets pris (9,80) baseret på den nye pris (7,00). Selvom dette er et simpelt eksempel på, hvad en trigger kan gøre, kan du bruge de samme teknikker i dine egne databaser – mulighederne er næsten uendelige.
Flere oplysninger
- For mere information om MySQL-triggere, besøg venligst http://dev.mysql.com/doc/refman/5.0/en/triggers.html.
- For flere oplysninger om OPRET TRIGGER erklæring, besøg venligst http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html.