Herramientas de usuario

Herramientas del sitio


bloque4:triggers

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:triggers [2021/11/15 19:02] – [Palabras clave NEW y OLD] fernandobloque4:triggers [2024/09/16 15:37] (actual) – editor externo 127.0.0.1
Línea 30: Línea 30:
  
 Hay que tener en cuenta que cuando nos referimos a una columna precedida por ''OLD'', el acceso es de sólo lectura, por lo que se podrá hacer referencia a ella sólo para leerla.  Hay que tener en cuenta que cuando nos referimos a una columna precedida por ''OLD'', el acceso es de sólo lectura, por lo que se podrá hacer referencia a ella sólo para leerla. 
-En el caso de las columnas precedidas por ''NEW'', se podrán leer y también modificar su valor con la instrucción ''SET'', siempre que el trigger se active antes de la operación (''BEFORE'').+En el caso de las columnas precedidas por ''NEW'', su valor se podrá leer y también modificar con la instrucción ''SET'', siempre que el trigger se active antes de la operación (''BEFORE'').
  
  
Línea 40: Línea 40:
 CREATE TRIGGER nombre_trigger CREATE TRIGGER nombre_trigger
 {BEFORE | AFTER} {INSERT | UPDATE| DELETE } {BEFORE | AFTER} {INSERT | UPDATE| DELETE }
-ON nombre_tabla [FOR EACH ROW]+ON nombre_tabla FOR EACH ROW
 BEGIN BEGIN
    ...    ...
Línea 53: Línea 53:
 </code> </code>
  
-La sentencia ''FOR EACH ROW'' es opcional. Si se indica, el trigger se ejecuta por cada una de las filas afectadas. Es decir, si se borran 15 filas, se insertan ó se actualizan, el trigger se ejecutará 15 veces. 
- 
-Si se omite la sentencia, el trigger se ejecutará una sola vez por independientemente del número de filas afectadas por una sentencia. 
  
 Ejemplos: Ejemplos:
Línea 111: Línea 108:
  
 IF NEW.nota < 0 THEN IF NEW.nota < 0 THEN
-   SET NEW.edad = 0+   SET NEW.nota = 0
 ELSEIF NEW.nota > 10 THEN ELSEIF NEW.nota > 10 THEN
    SET NEW.nota = 10;    SET NEW.nota = 10;
Línea 173: Línea 170:
  
 </code> </code>
 +
 +La temporalidad de los eventos se indica en la clausula ''ON SCHEDULE'', y puede ser:
 +  * ''AT'' -> Permite indicar un momento concreto en el que se ejecuta una sola vez.
 +  * ''EVERY'' -> Permite indicar una frecuencia con la que se ejecuta.
 +  * ''STARTS'' y ''ENDS'' -> Permite indicar cuando se activa o desactiva el evento.
  
 Una vez que el evento se ha ejecutado se elimina automáticamente. Si queremos preservarlo debemos indicar la cláusula ''ON COMPLETION PRESERVE'' en su definición. Una vez que el evento se ha ejecutado se elimina automáticamente. Si queremos preservarlo debemos indicar la cláusula ''ON COMPLETION PRESERVE'' en su definición.
Línea 192: Línea 194:
 ALTER EVENT nombre_evento DISABLE|ENABLE; ALTER EVENT nombre_evento DISABLE|ENABLE;
  
-SET GLOBAL event scheduler = OFF;+SET GLOBAL event_scheduler = OFF;
  
  
Línea 211: Línea 213:
 <code sql> <code sql>
 CREATE EVENT [IF NOT EXISTS] nombre_evento CREATE EVENT [IF NOT EXISTS] nombre_evento
-    ON SCHEDULE schedule+    ON SCHEDULE temporalidad
     [ON COMPLETION [NOT] PRESERVE]     [ON COMPLETION [NOT] PRESERVE]
          
     DO operaciones_evento;     DO operaciones_evento;
  
-schedule+temporalidad
-    AT timestamp [+ INTERVAL interval] ... +    AT fecha-hora [+ INTERVAL intervalo ] ...  | EVERY intervalo 
-  | EVERY interval +    [STARTS fecha-hora [+ INTERVAL intervalo ] ...] 
-    [STARTS timestamp [+ INTERVAL interval] ...] +    [ENDS fecha-hora [+ INTERVAL intervalo ] ...]
-    [ENDS timestamp [+ INTERVAL interval] ...]+
  
-interval:+intervalo:
     quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |     quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
               WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |               WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
bloque4/triggers.1637002953.txt.gz · Última modificación: 2024/09/16 15:40 (editor externo)