Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer
Artiklar > Databaser & SQL

Triggers en introduktion

Vad är en trigger
Triggers implementerades i MySQL 5.02

En trigger är ett namngivet databasobjekt som är associerad till en tabell.
En trigger aktiveras när man kör INSERT, UPDATE eller DELETE på tabellen.


Syntax


CREATE TRIGGER

{BEFORE | AFTER}

{INSERT | UPDATE | DELETE} ON <table>

FOR EACH ROW

BEGIN

    sqlkod...

END



Härleda till nya och gamla fält

I en trigger kan du härleda till vilket fält som helst i en tabell. Men du kan inte bara
skriva fältnamnet, utan du måste använda NEW och OLD.
NEW och OLD kallas för transition variables (övergångsvariabler)



Ett exempel

CREATE TABLE trigger_test (

 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

  name VARCHAR(50)

);



Sen skapar vi en trigger som vi döper till on_insert_test.
on_insert talar om att triggern aktiveras vid INSERT, och test är namnet på tabellen.

Naturligtvis kan man döpa sin trigger till vad man vill. Det är bra om man döper den
till något logisk namn som beskriver vad triggern gör och vilken tabell den tillhör.


DELIMITER //



CREATE TRIGGER on_insert_test

 BEFORE INSERT ON trigger_test



  FOR EACH ROW

  BEGIN



   IF NEW.name = '' THEN

    SET NEW.name = 'Namn saknas';

   END IF;



  END//



DELIMITER ;



DELIMITER < tecken >, betyder att man ändrar avgränsaren. Avgränsaren ";"
används för att avsluta sqlkod, så vi byter ut avgränsaren till "//" för att det inte ska krocka.

Förklaring vad triggern gör
Vad denna trigger gör är att den sätter fältvärdet för fältet name till "Namn saknas"
innan data skrivs till tabellen.

Sätt in tre rader i tabellen trigger_test
INSERT INTO trigger_test (name) VALUES('Per'),('Kalle'),('')


Så fort vi exekverar INSERT frågan så körs triggern.

Resultatet blir

 1  Per
 2  Kalle
 3  Namn saknas



Triggern byter ut värdet till "Namn saknas" för den tredje raden innan den sparas, då den tredje raden är tom.

Det finns en del användningsområden där triggers är bra att använda.
I ett loginscript kan en trigger vara bra om man tänker logga varje inloggningsförsök automatiskt.

Skapades: 2007-08-03 00:10:40
Skribent: chrillemeter
Lästs 2152 gånger
Betyg: 0 (artikeln har endast 1 röster, det krävs minst 5 för ett betyg)

Kommentarer

chrillemeter sa den 3 augusti 2007 kl 06:18:
Byt ut ( t_test) mot trigger_test i denna kod

DELIMITER //

CREATE TRIGGER on_insert_test
BEFORE INSERT ON t_test

FOR EACH ROW
BEGIN

IF NEW.name = '' THEN
SET NEW.name = 'Namn saknas';
END IF;

END//

DELIMITER ;

Annars fungerar inte triggern. glömde byta ut namnet i trigger-koden till det rätta när jag byte namn på tabellen.
Timmie sa den 6 mars 2008 kl 00:44:
Mycket bra!
Kan name vara NOT NULL?
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy