Create a trigger that is executed whenever a product is deleted

0

How to create a trigger that is executed whenever a product is deleted by performing the deletion action on all batches related to the deleted product.

Here's my SQL code:

create database provafinal;

use provafinal;




create table produto
(codProduto integer not null,
 nomeProduto varchar(50) not null,
 marca varchar(50) not null,
 precoCusto decimal(15,2) not null,
 precoVenda decimal(15,2) not null,
 primary key (codProduto)); 

 create table loteproduto
 (codProduto integer not null,
  codLote integer not null,
  nuLote char(10) not null,
  dtValidade date,
  primary key (codProduto, codLote),
  foreign key (codProduto) references produto(codProduto));
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (1, 'Inseticida 500 ML', 'SBP',4,7);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (2, 'Pastilha refil', 'SBP', 2,4);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (3, 'Refrigerante guaraná', 'Pureza', 3,5);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (4, 'Refrigerante laranja', 'Pureza', 3,5);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (5, 'Amaciante amarelo', 'Downy', 6,9);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (6, 'Amaciante rosa', 'Downy', 4,5);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (7, 'Frango', 'Sadia', 5,10);
insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (8, 'Peru', 'Sadia', 5,10);



insert into loteproduto (codProduto, codLote, nuLote, dtValidade) 
values (1, 1, '399A',null);
insert into loteproduto (codProduto, codLote, nuLote, dtValidade) 
values (1, 2, '323A','2012-12-31');
insert into loteproduto (codProduto, codLote, nuLote, dtValidade) 
values (2, 1, 'EF2A','2012-12-30');
insert into loteproduto (codProduto, codLote, nuLote, dtValidade) 
values (7, 1, 'EF3A',null);
    
asked by anonymous 26.11.2014 / 17:36

3 answers

2

The referential action ON DELETE CASCADE is for your case, without the need to create a trigger. When we delete a record in the produto table, we want the records in the loteproduto table, which associate with the deleted product record, to be removed as well. For example, when we delete a code record in. 2 with the following query:

DELETE FROM produto WHERE codProduto = 2;

We want the records associated with that product in the loteproduto table to be deleted as well. To do so, this can be done in the creation of the table:

CREATE TABLE loteproduto (
    ...
    CONSTRAINT fk_loteproduto_produto
    FOREIGN KEY (codProduto)
        REFERENCES produto (codProduto)
    ON DELETE CASCADE
);

Or changing the table:

ALTER TABLE loteproduto
    ADD FOREIGN KEY (codProduto)
        REFERENCES produto (codProduto)
    ON DELETE CASCADE;

If you really prefer to use triggers, just use the following code:

CREATE TRIGGER produto_on_delete AFTER DELETE ON produto
FOR EACH ROW
BEGIN
DELETE FROM loteproduto
       WHERE loteproduto.codProduto = old.codProduto;
END

Reference

MySQL ON DELETE CASCADE Deletes Data From Multiple Tables

    
26.11.2014 / 17:50
1

Here's the specification of the trigger creation you want.

This is basically the trigger code:

DELIMITER //
    CREATE TRIGGER minhaTrigger
    BEFORE DELETE ON minhaTabela FOR EACH ROW

    BEGIN
       --Seu código para deletar na Minha_Segunda_Tabela
    END; //
DELIMITER ;

I would advise you to study how to use the trigger. Take a look at on this site .

Particularly, I would not do a Trigger for this. There is the ON DELETE CASCADE clause in Foreign Keys creation that when a row in the table is deleted, the bank automatically deletes its dependencies.

Take a look at documentation of creating keys Mysql Foreign.

    
26.11.2014 / 17:56
0

Good afternoon.

First you should check whether to run before or after deleting. Check this link, can you help: Introduction to Triggers

Hugs.

    
26.11.2014 / 17:44