ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Disparador


Enviado por   •  19 de Mayo de 2014  •  1.890 Palabras (8 Páginas)  •  143 Visitas

Página 1 de 8

1 Trigger (Disparador)[modifica]

Un disparador (trigger) és un objecte amb nom al qual s'associa amb una taula i s'activa cuand es produeix un event.

Por exemple, creem una taula i un disparador para sentencies INSERT dins de la taula. El disparador suma els valors insertats en una de les columnes de la taela:

1

2

3

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account

-> FOR EACH ROW SET @sum = @sum + NEW.amount;

1.1 Sintaxi de CREATE TRIGGER[modifica]

1

2

CREATE TRIGGER nom_disp moment_disp event_disp

ON nom_taula FOR EACH ROW sentència_disp

El disparador queda associat a una taula nom_taula.

moment_disp és el moment en el que el disparador entra en acció. Pot ser BEFORE (abans) o AFTER (després), indica que el disparador s'executi abans o després que la sentencia que l'activa.

event_disp indica la classe de sentencia que activa al disparador. Pot ser INSERT, UPDATE, o DELETE.

No poden haber-hi dos disparadors en una mateixa taula que corresponguin al mateix moment i sentencia. Per exemple, no es poden tenir dos disparadors BEFORE UPDATE. Però sí es possible tenir els disparadors BEFORE UPDATE i BEFORE INSERT o BEFORE UPDATE i AFTER UPDATE.

sentencia_disp és la sentencia que s'executa al activar el disparador. Si es desitgen executar múltiples sentencies, s'ha de fer servir BEGIN ... END, el constructor de sentencies compostes.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

CREATE TABLE test1(a1 INT);

CREATE TABLE test2(a2 INT);

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

);

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1

FOR EACH ROW BEGIN

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

END

|

DELIMITER ;

INSERT INTO test3 (a3) VALUES

(NULL), (NULL), (NULL), (NULL), (NULL),

(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES

(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

Si a la taula test1 s'insereixen els valores:

1

2

3

4

mysql> INSERT INTO test1 VALUES

-> (1), (3), (1), (7), (1), (8), (4), (4);

Query OK, 8 rows affected (0.01 sec)

Records: 8 Duplicates: 0 Warnings: 0

Les dades en les 4 taules quedarien així:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

...

Descargar como (para miembros actualizados)  txt (11 Kb)  
Leer 7 páginas más »
Disponible sólo en Clubensayos.com