Transact SQL 004, Triggers (Disparadores)
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
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.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
));
drop table if exists tblcontador;
CREATE TABLE `condominios`.`tblcontador` (
`id` int null,
`contador` int null);
insert into tblcontador (id,contador) values (1,0);
insert
de inicialización del contador.
Practica
Material previo de Transact SQL
Post | Contenido | Ir |
---|---|---|
Instalacion Servidor LAMP en Xubuntu 18.04 | Vídeo explicativo de la instalación de servidor LAMP de laboratorio base | Post 01 |
Transact SQL, Unión de tablas (Join) | Práctica del uso de las formas de Join para consultas de tablas enlazadas | Post 02 |
Transact SQL 003, Store Procedure | Práctica para el uso de librerías de código Store Procedures. Creación y llamadas | Post 03 |
Referencia
Imágenes
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!
Thanks
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
Gracias por el apoyo
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