Disparador

Páginas: 7 (1691 palabras) Publicado: 20 de mayo de 2014
ASIX/M10/UF1/A07

1

ASIX/M10/UF1/A07
Trigger (Disparador)
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:
mysql> CREATE TABLE account (acct_num INT, amountDECIMAL(10,2));
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;

Sintaxi de CREATE TRIGGER
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 BEFOREUPDATE 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.
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 INTNOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
DELIMITER |
CREATE TRIGGER testref BEFORE
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 =
DELETE FROM test3 WHERE a3
UPDATE test4 SET b4 = b4 +
END
|
DELIMITER ;
INSERT INTO test3 (a3) VALUES

Julian Garcia

INSERT ON test1
NEW.a1;
= NEW.a1;
1 WHERE a4 = NEW.a1;

ASIX/M10/UF1/A07
(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:
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í:
mysql> SELECT * FROM test1;+------+
| a1
|
+------+
|
1 |
|
3 |
|
1 |
|
7 |
|
1 |
|
8 |
|
4 |
|
4 |
+------+
8 rows in set (0.00 sec)
mysql> SELECT * FROM test2;
+------+
| a2
|
+------+
|
1 |
|
3 |
|
1 |
|
7 |
|
1 |
|
8 |
|
4 |
|
4 |
+------+
8 rows in set (0.00 sec)
mysql> SELECT * FROM test3;
+----+
| a3 |
+----+

Julian Garcia

2

ASIX/M10/UF1/A07
| 2 |
| 5 |
| 6 |
|9 |
| 10 |
+----+
5 rows in set (0.00 sec)
mysql> SELECT * FROM test4;
+----+------+
| a4 | b4
|
+----+------+
| 1 |
3 |
| 2 |
0 |
| 3 |
1 |
| 4 |
2 |
| 5 |
0 |
| 6 |
0 |
| 7 |
1 |
| 8 |
1 |
| 9 |
0 |
| 10 |
0 |
+----+------+
10 rows in set (0.00 sec)
Les columnes de la taula associada amb el disparador es poden referenciar amb OLD i NEW. OLD.nom_col fa
referencia auna columna de una fila existent, abans de ser actualitzada o esborrada. NEW.nom_col fa referencia a
una columna en una nova fila a punt de ser inserida, o en una fila existent després de ser actualitzada.
L'uso de SET NEW.nom_col = valor es necessita el privilegi UPDATE sobre la columna. L'uso de SET nom_var =
NEW.nom_col es necessita el privilegi SELECT sobre la columna.

Sintaxis de DROPTRIGGER
DROP TRIGGER [nom_esquema.]nom_disp
Elimina un disparador. El nom d'esquema és opcional. Si l'esquema no es posa, el disparador s'elimina en l'esquema
actual.
Amb versions inferiors a 5.0.10 de MySQL, es requería el nom de taula en lloc del nom de l'esquema.

Ús
Aquí tenim un exemple que associa un disparador amb una taula per a que quan rebi sentencies INSERT, el qual
acumula la...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Disparos
  • disparo
  • Disparadores
  • disparadores
  • Diagrama de disparo
  • Disparo Mosfets
  • Disparidades Regionales
  • Disparidades Regionales

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS