Create a Trigger that runs whenever a product is deleted

Asked

Viewed 1,715 times

0

How to create a Trigger that is executed whenever a product is deleted, performing the delete action in 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);
  • ON DELETE CASCADE not fit for your case?

  • Hello all good guy? This method can even serve, only I intend to use triggers for this my example

3 answers

2


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

DELETE FROM produto WHERE codProduto = 2;

We want the records associated with such product in the table loteproduto are deleted as well. 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 by 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

  • Thank you very much my dear! That’s what I was looking for! God Bless you

  • Cara a ultima dúvida, quando eu vou deletar um produto pelo código aparace o erro 1451: cannot delete or update a Parent Row This is what I used to delete: DELETE FROM produto WHERE codProduct=1;

1

Here is the specification of the creation of the Trigger that you want.

This is basically Trigger’s 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 advise you to study how to use Trigger. Take a look on this website.

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

Take a look at documentation creation of foreign Mysql keys.

0

Good afternoon.

First you should check whether it should be executed before or after deleting. Check this link, it may help you: Introduction to Triggers

Hugs.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.