joaopaulofcc

[GABARITO] trigger_exemplo1

Jun 16th, 2021
1,071
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE DATABASE IF NOT EXISTS trigger_exemplo;
  2.  
  3. USE trigger_exemplo;
  4.  
  5. CREATE TABLE IF NOT EXISTS produtos
  6. (
  7.     idProduto INT UNSIGNED NOT NULL AUTO_INCREMENT,
  8.     nome VARCHAR (50),
  9.     preco FLOAT,
  10.     qtd SMALLINT,
  11.     PRIMARY KEY (idProduto)
  12. );
  13.  
  14. CREATE TABLE IF NOT EXISTS itens
  15. (
  16.     idCompra INT UNSIGNED,
  17.     idProduto INT UNSIGNED,
  18.     qtd INT,
  19.     PRIMARY KEY (idCompra),
  20.     FOREIGN KEY (idProduto) REFERENCES produtos (idProduto)
  21. );
  22.  
  23. INSERT INTO
  24.     produtos (nome, preco, qtd)
  25. VALUES
  26.     ('Caneta', 1.00, 10),
  27.     ('Lápis', 0.50, 50),
  28.     ('Borracha', 0.20, 100);
  29.  
  30. # --------------------------------
  31.  
  32. # Exemplo 1
  33.  
  34. # Um trigger para dar baixa em estoque
  35.    
  36. DELIMITER //
  37. CREATE TRIGGER
  38.     tg_diminuir_estoque
  39. AFTER INSERT ON
  40.     itens
  41. FOR EACH ROW
  42. BEGIN
  43.     UPDATE
  44.         produtos
  45.     SET
  46.         qtd = qtd - NEW.qtd
  47.     WHERE
  48.         idProduto = NEW.idProduto;
  49. END;
  50. //
  51. DELIMITER ;
  52.  
  53. # Testando
  54.  
  55. SELECT * FROM produtos;
  56.  
  57.  
  58. INSERT INTO
  59.     itens (idCompra, idProduto, qtd)
  60. VALUES
  61.     (1, 1, 5);
  62.    
  63.    
  64. SELECT * FROM produtos;
  65.  
  66. # --------------------------------
  67.  
  68. # Exemplo 2
  69.  
  70. # O comprador desistiu de comprar toda aquela quantidade do item.
  71.  
  72. DELIMITER //
  73. CREATE TRIGGER
  74.     tg_devolverTudo_estoque
  75. BEFORE DELETE ON
  76.     itens
  77. FOR EACH ROW
  78. BEGIN
  79.     UPDATE
  80.         produtos
  81.     SET
  82.         qtd = qtd + OLD.qtd
  83.     WHERE
  84.         idProduto = OLD.idProduto;
  85. END;
  86. //
  87. DELIMITER ;
  88.  
  89. # Testando
  90.  
  91. SELECT * FROM produtos;
  92.  
  93.  
  94. DELETE FROM
  95.     itens
  96. WHERE
  97.     idProduto = 1 AND idCompra = 1;
  98.    
  99.    
  100. SELECT * FROM produtos;
  101.  
  102. # --------------------------------
  103.  
  104. # Exemplo 3
  105.  
  106. # O Comprador devolve parcialmente itens.
  107.  
  108. DELIMITER //
  109. CREATE TRIGGER
  110.     tg_devolverParcial_estoque
  111. AFTER UPDATE ON
  112.     itens
  113. FOR EACH ROW
  114. BEGIN
  115.     UPDATE
  116.         produtos
  117.     SET
  118.         qtd = qtd + (OLD.qtd - NEW.qtd)
  119.     WHERE
  120.         idProduto = OLD.idProduto;
  121.     END;
  122. //
  123. DELIMITER ;
  124.  
  125. # Testando
  126.  
  127. INSERT INTO
  128.     itens (idCompra, idProduto, qtd)
  129. VALUES
  130.     (1, 1, 5);
  131.    
  132. SELECT * FROM produtos;
  133.  
  134. UPDATE
  135.     itens
  136. SET
  137.     qtd = 2
  138. WHERE
  139.     idCompra = 1 AND idProduto = 1;
  140.    
  141. SELECT * FROM produtos;
RAW Paste Data