Transact SQL 004, Triggers (Disparadores)

in #spanish6 years ago (edited)

En el último post del curso de Transact SQL se trabajó con los Store Procedure (SP), pequeñas librerías de código que se pueden invocar mediante un call. Poder concentrar trozos de código en librerías centralizadas, facilita la administración, ayudando a simplificar el mantenimiento de sistemas.

Los Triggers o Disparadores, son fragmentos de código al igual que los SP, su mayor diferencia es que ejecutan de forma automática, según un evento específico dentro de una tabla.

Los disparadores se activan cuando una tabla sufre una modificación, bien sea insert, delete o update , utilizando la siguiente sintaxis para su creación:


CREATE TRIGGER nombre_del _disparador BEFORE INSERT ON tabla_modificada
FOR EACH ROW BEGIN
INSERT INTO tabla SET a.2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END

El código before insert, puede ser sustituido por after insert, si se desea que la transacción del trigger se ejecute después de insertado el registro. La importancia de diferenciar estas dos instrucciones es sutil, pero importante.

Before insert, invoca el código del disparador antes de modificar la tabla original. Mientras after insert, ejecutará la modificación a la tabla y después el código del disparador.

Before update y after update, son el equivalente del disparador anterior, se accionan cuando la intrucción transact modifica una o varios registros de la tabla. Before delete y after delete en el caso de eliminar registros.

Es importante observar el segmento de código for each row, esto significa que si nuestra transacción inserta, modifica o elimina más de un registro, se ejecutará el disparador por cada registro afectado.

Los comando Begin, End, delimitan las instrucciones que se ejecutaran dentro del disparador, se puede realizar un insert, delete o update al momento, o varios de estos.


Para esta práctica utilizaremos las siguientes estructuras:


CREATE TABLE usuario (
id_usuario bigint(20) unsigned NOT NULL auto_increment,
id_tipo_usuario bigint(20) unsigned NOT NULL default '0',
cedula varchar(15) NOT NULL default '',
nombre varchar(45) NOT NULL default '',
activo bit(1) NOT NULL default '\0',
clave varchar(10) NOT NULL default '',
usuario varchar(10) NOT NULL default '',
fecha_creacion date NOT NULL default '0000-00-00',
PRIMARY KEY (id_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Usuario estructura usada en la práctica Store Procedure. Una tabla con la función de guardar la información básica de los usuarios del sistema.


CREATE TABLE condominios.tblprueba (
idtblprueba INT NOT NULL AUTO_INCREMENT,
valor01 VARCHAR(10) NULL,
valor02 VARCHAR(45) NULL,
valor03 char(50) null,
PRIMARY KEY (idtblprueba));

La estructura Tblprueba ha sido creada para este ejercicio y su objetivo es tener una tabla que sirva para guardar información de referencia originada en los triggers creados; convirtiéndose esta en uno de los ejes de la práctica.

drop table if exists tblcontador; CREATE TABLE `condominios`.`tblcontador` ( `id` int null, `contador` int null);
insert into tblcontador (id,contador) values (1,0);
Tblcontador es una estructura básica, creada para demostrar la manera de llevar un contador con ayuda de los disparadores. Se coloca además el insert de inicialización del contador.

Practica

Material previo de Transact SQL


PostContenidoIr
Instalacion Servidor LAMP en Xubuntu 18.04Vídeo explicativo de la instalación de servidor LAMP de laboratorio basePost 01
Transact SQL, Unión de tablas (Join)Práctica del uso de las formas de Join para consultas de tablas enlazadasPost 02
Transact SQL 003, Store ProcedurePráctica para el uso de librerías de código Store Procedures. Creación y llamadasPost 03

Referencia

  • Manual de Referencia en línea MySQL 8.0 link
  • La herramienta MySQL Workbench puede Descargarse de aquí

Imágenes

La imagen de la miniatura del vídeo fue compuesta con Gimp 2.10 utilizando la siguiente Fuente, de PixBay

Sort:  

20180624_093612.gif



This post has been voted on by the steemstem curation team and voting trail.

There is more to SteemSTEM than just writing posts, check here for some more tips on being a community member. You can also join our discord here to get to know the rest of the community!

Buen articulo y muy bien explicado. Espero seguir viendo mas explicaciones. Quizás luego ir a por el tema: NoSQL DBs ;)

Hi @ubaldonet!

Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Thanks for the support

Amigo el curso esta super que mal que el apoyo es poco.

Aveces necesita unas horas para terminar de arrancar jjj, pero gracias me alegra que te guste, son varios capítulos, la idea es dar una base práctica a estos temas, a veces uno necesita ver como se implementan ciertos códigos.

Congratulations @ubaldonet! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

You can upvote this notification to help all Steemit users. Learn why here!