Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Procedimientos almacenados y triggers. Vídeo 2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Procedimientos almacenados y triggers. Vídeo 2
y lo interpreta como con este delimiter que tiene que leerlo todo en bloque y no ejecutarlo de manera
00:00:00
fraccionada es como decirle al cliente durante un momento no interpreta ese punto y coma como
00:00:08
final de comando espera que acabe el delimitador un ejemplo sería este que aparece aquí que sería
00:00:14
veis lo que hace hemos creado un procedimiento que se llama simple pro que tiene un parámetro
00:00:21
de salida que se llama param1 y que es de tipo entero
00:00:25
y cuyo cuerpo generado entre el begin
00:00:28
y el end, esto podría simular la llave
00:00:31
de apertura y de cierre en cualquier lenguaje de programación
00:00:35
de un procedimiento o una función, dentro tiene una sentencia
00:00:37
que se llama, que sería, cuéntame
00:00:40
el número de la tabla T
00:00:42
el número de registros que tiene y me lo metes
00:00:46
into en el parámetro de salida que hemos
00:00:50
introducido aquí, con lo cual al final nos va a dar
00:00:52
el resultado de este parámetro.
00:00:55
El delimiter no cambia SQL en sí,
00:00:58
cambia cómo el cliente detecta el final del comando.
00:01:00
Es esencial cuando hay procedimientos y triggers
00:01:03
con bloques múltiples.
00:01:05
No es que el servidor necesite otro lenguaje,
00:01:07
sino que el cliente necesita una señal distinta
00:01:09
para no cortar la definición antes de tiempo.
00:01:11
En cuanto a la invocación externa,
00:01:21
bueno, esto sería, pues, nos ha sometido un poco,
00:01:23
muestra cómo una aplicación PHP interactúa con MySQL
00:01:25
en tres pasos.
00:01:28
primero realiza, veis, con PHP realiza la conexión con la base de datos
00:01:29
a través de su localhost y root
00:01:33
posteriormente es la selección de la base de datos
00:01:35
qué tipo va a seleccionar
00:01:38
y por último ejecuta a través de call
00:01:40
veis este procedimiento almacenado que tiene estos tres parámetros de entrada
00:01:44
la aplicación no necesita saber cómo está implementada
00:01:49
toda la lógica simplemente lo que hace es que llama al procedimiento
00:01:53
Aquí vemos cómo una aplicación PHP se comunica con el procedimiento almacenado, primero abre la conexión con MySQL, después selecciona la base de datos y, por último, ejecuta una llamada call.
00:01:56
Entonces, la aplicación no necesita saber todos los detalles internos de la lógica, solo pasa parámetros y recoge el resultado.
00:02:06
Esta lógica favorece, lógicamente, el encasulamiento. La lógica está escondida detrás de una interfaz simple. La aplicación consume servicios de la base de datos.
00:02:14
Si desde PHP queremos insertar una persona, podríamos llamar al procedimiento, por ejemplo, SP-insertarPersona. Desde el punto de vista de PHP, da igual si por dentro ese procedimiento hace una sola inserción o cinco comprobaciones adicionales. PHP solo lo invoca.
00:02:22
Aquí introducimos, una vez que hemos hablado a nivel sencillo de cómo es la estructura de un procedimiento almacenado y para qué sirven, vamos a ver los disparadores o triggers. Los triggers son como objetos ligados a tablas que se ejecutan automáticamente.
00:02:45
Pero se ejecutan, de ahí la palabra trigger, cuando ocurre un evento determinado, pues tenemos que se van a ejecutar. También se dice que encasulan, que es el encasulamiento de acciones dentro de un beginning. Son ideales para auditoría o rastreo de actividades.
00:02:58
Entonces, un trigger no se ejecuta manualmente con call, como pasaba con el procedimiento almacenado, sino que ahora un trigger lo que se activa es cuando ocurre un evento y ese evento siempre va a ser fundamentado cuando ocurre un insert, cuando ocurre un update y cuando ocurre un delete sobre una tabla concreta.
00:03:17
Por ejemplo, mientras que un procedimiento almacenado se ejecuta cuando alguien lo invoca expresamente, un trigger funciona como un piloto automático.
00:03:34
Está asociado a una tabla y se activa automáticamente cuando ocurre un evento, como una inserción, una actualización o un borrado.
00:03:42
La diferencia clave es que el procedimiento es una ejecución explícita, mientras que el trigger es una ejecución automática y reactiva.
00:03:48
Ejemplo muy bueno sería si una empresa quiere registrar en una tabla de auditoría
00:03:57
cada vez que se modifica el sueldo de un empleado,
00:04:01
no hace falta confiar en que el programador se acuerde de registrar ese cambio
00:04:04
en todos los puntos de la aplicación, sino que se crea un trigger
00:04:07
sobre el update asociado a esa tabla.
00:04:10
Y la base de datos lo hará siempre.
00:04:14
Si alguien inserta una venta, un trigger puede rellenar automáticamente
00:04:16
la fecha de registro, generar un log o validar ciertos datos antes de guardar.
00:04:20
Los triggers convierten la base de datos en un sistema reactivo, no espera que la llamen, responde automáticamente a eventos.
00:04:26
Esto combina lo anterior, tenemos los eventos en el que serían insert, update y delete y los momentos en el que se pueden producir y que se definirán en un trigger o si es antes de que se produzca un insert, un update o un delete que sería a través de before o after, después el evento se producirá después de que se produzca un insert, un update o un delete.
00:04:37
El BEFORE valida antes de tocar disco, el LASTER escribe en auditorías de forma segura.
00:04:59
Por tanto, BEFORE se ejecuta antes que el cambio sea efectivo.
00:05:05
¿Para qué sirve? Para validar datos, corregir valores, impedir operaciones,
00:05:09
modificar en NEW en ciertos casos, ahora lo veremos,
00:05:13
y el LASTER se ejecuta después de que un cambio sea realizado.
00:05:16
Sirve para auditoría, trazabilidad, sincronización, acciones posteriores.
00:05:19
Un trigger no solo reacciona a un tipo de operación,
00:05:27
También puede definirse según el momento en que actúa. Si es before, actúa antes de que el dato se escriba. Si es after, actúa cuando el cambio ya se ha realizado. Esta combinación genera una matriz muy útil. Before insert, after insert, before update, after update y así sucesivamente.
00:05:30
Ejemplos, por ejemplo, un before insert, pues sería antes de guardar un nuevo producto, puedo comprobar que el precio no sea negativo. After insert, pues después de insertar una nueva venta, puedo registrar ese hecho en una tabla de auditoría. Before update, antes de cambiar el stock, puedo impedir que quede por debajo de cero. O after delete, después de borrar un cliente, pues puedo guardar una copia de sus datos eliminados en una tabla de histórico.
00:05:50
Por tanto, BEFORE sirve para controlar o modificar, AFTER sirve para reaccionar y dejar constancia.
00:06:20
Aquí tenemos la anatomía de un disparador, cómo es su estructura, igual que CREATE PROCEDURE, aquí es CREATE TRIGGER y el nombre del disparador.
00:06:29
Después tenemos el momento del disparo, en el que va a ser BEFORE o AFTER, que es lo que hemos definido anteriormente.
00:06:40
Luego el evento del disparo, que sea un insert, un update, un delete. Luego el on, que es el objetivo a observar y con el nombre de la tabla y por cada una de las filas, for each row, la sentencia que se va a disparar o la acción que vamos a querer ejecutar.
00:06:45
aquí tenemos por ejemplo
00:07:00
la eliminación del trigger
00:07:04
como eliminar dicho trigger
00:07:05
¿qué significa
00:07:07
todo esto?
00:07:12
esto sería lo que llamamos la estructura
00:07:14
en cuanto a todo lo que vemos aquí
00:07:16
esto sería lo nuevo
00:07:17
que sería el onTabla
00:07:19
forEachRow, que significa que
00:07:22
el trigger se aplica a cada fila afectada
00:07:23
la sentencia disparada
00:07:26
sería la lógica
00:07:28
que sería la lógica que va a ejecutar cuando se produzca el evento.
00:07:28
La estructura de un disparador es bastante directa.
00:07:33
Se declara el Create Trigger, se indica si actúa antes o después del evento,
00:07:35
se especifica el tipo de operación que lo activa,
00:07:39
se asocia a una tabla y se define la acción que se ejecutará por cada fila afectada.
00:07:42
Es muy importante explicar bien que si una sentencia afecta a 10 filas,
00:07:48
el trigger se dispara 10 veces, una por cada fila. Cuida con eso.
00:07:52
Un ejemplo, pues tendríamos si ejecuto un update que modifica, por ejemplo, el precio de 100 productos, un trigger for each row actuará 100 veces una vez por cada fila modificada.
00:07:55
Por eso hay que diseñarlo con cuidado, porque puede tener un impacto en el rendimiento muy grande. Un ejemplo de disparador podría ser el Create Trigger, por ejemplo, auditoría. Podríamos poner After Insert, o sea, se va a producir después del insertado, y luego pondríamos On Ventas, afectaría a la tabla de ventas, y por cada fila, For Each Row, vamos a hacer una ejecución que será Insert Into Auditoria, el determinado de los valores.
00:08:11
Veis, cada vez que se produzca, después de que haya una inserción en la tabla ventas, se va a producir una inserción en la tabla de auditoría de una serie de valores para que quede reflejado.
00:08:41
Aquí tenemos el paradigma temporal con el all y el new. Aquí se explica dos términos o dos palabras clave que serían el all, que sean valores antes del cambio, y el new, que sean valores después del cambio.
00:08:59
Se especifica el insert, el update y el delay.
00:09:13
Lógicamente, el insert solo permite el new.
00:09:16
Hemos visto que el new son valores después del cambio.
00:09:19
El update permitirá all y new,
00:09:22
mientras que el delay solo permitirá all,
00:09:25
cuando ya se ha borrado.
00:09:28
Además, aparece una nueva sentencia,
00:09:31
que sería esta de aquí, que no se ve ahora.
00:09:32
Ahora, sería la de abajo,
00:09:35
que pone set new actor igual a Robert De Niro.
00:09:37
Esto lo que nos va a colocar es que cuando se realice, por ejemplo, el insert, el nuevo, el nuevo, el new punto actor, el nuevo actor, me coloque el rover de Nero.
00:09:42
Hay un antes y un después. El old sería el valor previo, mientras que el new sería el valor modificado.
00:09:58
En delete, tras borrar, no existe ningún valor persistente. Por eso solo se usa el old.
00:10:03
Entonces, por tanto, all y new son referencias al estado de la fila dentro de un trigger. Entonces, el all representa cómo estaba antes del cambio. El new, cómo quedará después. Hay las palabras all, dato anterior, new, dato nuevo.
00:10:10
Dependiendo del evento, una u otra estarán disponibles.
00:10:29
En un insert solo tiene sentido new, en un delete, en un insert un new.
00:10:32
¿Por qué? Porque va a ser el nuevo dato que se va a insertar.
00:10:39
En un delete solo el old, porque cuando se borre ya no habrá nuevo dato,
00:10:42
sino que se borrará y podremos hacer referencia al dato que antes existía.
00:10:46
En el update podemos utilizar ambos.
00:10:50
Un update, por ejemplo, si antes el sueldo era 1.200
00:10:53
y después pasa a 1.500, el odd.sueldo será 1.200,
00:10:57
mientras que el new.sueldo será 1.500.
00:11:02
Esto permite detectar cambios.
00:11:05
Entre el insert, por ejemplo, tendríamos cuando insertamos un nuevo usuario,
00:11:07
podemos acceder al new.email, a su email, para validarlo o normalizarlo.
00:11:11
Y en el delete, si eliminamos un pedido, podemos guardar el odd.id pedido
00:11:16
o el odd.total en una tabla, por ejemplo, de borrados.
00:11:21
¿Veis por qué el All y el New aparecen de manera diferente en Insert, Update y Delay? Porque son acciones diferentes. Entonces, All y New convierten el trigger en una especie de observador del antes y del después de cada fila.
00:11:25
Bueno, esta diapositiva lo que demuestra es lo que es la automatización de comisiones en el que tiene todos los pasos, en el que en principio tenemos el evento en el que inserta dentro de ventas los valores de queso y de 300.
00:11:41
El segundo paso sería el sensor, en el que tenemos un trigger, en el que queremos que se realice antes de que se produzca la inserción y se va a activar. Y la delegación, que sería el llamar a comisión, que sería el trigger, capturando el nuevo valor.
00:12:07
Se activa el cálculo, es el procedimiento que calcula el 10% y se lo asigna a arroba.com, que sería el parámetro de salida.
00:12:25
Y luego la modificación, colocamos la nueva comisión, o sea, lo que ha insertado dentro de esa variable.
00:12:37
Y por último tenemos la escritura del registro que se guarda como una comisión almacenada, que serían los tres valores.
00:12:43
Por tanto, el trigger se utiliza para detectar automáticamente el evento y el procedimiento almacenado, porque estamos utilizando dos, para encasular el cálculo.
00:12:50
Es decir, el trigger actúa como detector y el procedimiento como calculadora especializada.
00:13:03
¿Veis? Esto va a detectar cuando se produce una inserción y cuando se produce una inserción dentro del trigger llama a un procedimiento almacenado que sería el procedimiento commission.
00:13:07
Pero no solo la llama, la llama con un parámetro que además es el valor nuevo que ha sido insertado y que ha sido recogido a través del trigger. Lo veis, lo mete como un parámetro de entrada y para que luego ese procedimiento realice el cálculo. Una vez que el cálculo se ha realizado, ese parámetro, ese cálculo lo devuelve como un valor.
00:13:21
Veis aquí con el arroba com y ese es el que va a alojar el valor de la nueva comisión. Aquí vemos una automatización completa. Cuando se inserta una venta, el trigger before insert se activa automáticamente.
00:13:39
En lugar de hacer todo el cálculo directamente dentro del trigger, delega ese trabajo a un procedimiento almacenado llamado comisión y ese procedimiento calcula el 10% del valor de venta. Guarda el resultado y luego el trigger asigna ese valor al campo comisión antes de que el registro se escriba definitivamente.
00:13:56
Esto es una arquitectura limpia, el trigger desde tal momento, el procedimiento concentra la lógica y el resultado se integra antes de guardar.
00:14:18
Si insertamos una venta de 300 euros de queso, el trigger se activa antes de guardar, entonces llama al procedimiento de comisión que calcula el 10%, que es 30 euros.
00:14:25
Después el trigger coloca ese valor en el campo comisión y finalmente el registro se almacena ya completo.
00:14:35
Por tanto, esto evita depender de que la aplicación recuerde calcular la comisión.
00:14:41
La base de datos garantiza que siempre se haga. Aquí tenemos la comparación entre los procedimientos almacenados y los disparadores. Una sería en cuanto al modo de ejecución, en el que un procedimiento almacenado hay que llamarle de manera explícita, a través de call, mientras que un disparador es un evento autónomo, irreactivo.
00:14:46
O sea, cuando ocurre algo que nosotros queremos o salta ese evento, pues se dispara.
00:15:11
En cuanto a las variables de contexto, los parámetros que se pueden meter dentro de un parámetro almacenado serían el in, el out y el in-out.
00:15:16
Mientras que las palabras clave dentro de un trigger serían el old y el new.
00:15:23
Luego la interacción con la aplicación puede ser invocado directamente por PHP y en cambio un disparador es totalmente invisible para la aplicación.
00:15:27
Un caso de uso ideal, por ejemplo, la lógica de negocio, sería la que se utilizaría para los procedimientos almacenados.
00:15:35
Auditoría, validación y cálculos derivados serían para el trigger.
00:15:42
La última diapositiva resume cuándo conviene usar cada mecanismo.
00:15:46
Los procedimientos almacenados se ejecutan de forma explícita, normalmente mediante una llamada desde la aplicación,
00:15:51
y son ideales para encasular lógica de negocio más elaborada.
00:15:56
Los triggers, en cambio, reaccionan automáticamente ante cambios en los datos y resultan especialmente útiles para validaciones, auditoría y cálculos derivados.
00:16:00
Si quiero pedirle algo a la base de datos, uso un procedimiento. Si quiero que la base de datos reaccione sola ante un cambio, uso un trigger.
00:16:11
Procedimiento, un ejemplo, quiero generar un informe de ventas mensuales agrupado por regiones. Eso encaja mejor en un procedimiento almacenado.
00:16:19
En cambio, un trigger, quiero que cada modificación de precio quede registrada automáticamente, eso encajaría dentro de un trigger. No compiten entre sí, sino que se complementan. De hecho, como hemos visto, en el caso práctico, un trigger puede activarse y delegar parte del trabajo a un procedimiento almacenado.
00:16:27
Como conclusión general, decir que la automatización en una base de datos permite que el motor no solo almacene información, sino que también participe activamente en el procesamiento.
00:16:46
Los procedimientos almacenados sirven para encapsular lógica reutilizable que se invoca de forma explícita, mientras que los triggers permiten reaccionar automáticamente a cambios en las tablas.
00:16:56
Juntos forman una herramienta muy potente para validar datos, reducir duplicidad, mejorar la consistencia y automatizar tareas críticas.
00:17:09
- Idioma/s:
- Materias:
- Informática
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Segundo Curso
- Autor/es:
- Francisco José González Constanza
- Subido por:
- Francisco J. G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 2
- Fecha:
- 6 de abril de 2026 - 11:27
- Visibilidad:
- Público
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 17′ 27″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 97.41 MBytes