mysql触发器无法识别

时间:2016-05-20 15:33:26

标签: mysql triggers insert

我试图创建一个After Insert触发器但是当我运行它时,它没有给出任何错误,但我的SQL服务器似乎忽略了它。

当我在创建触发器后检查表时,触发器部分保持为空。这是代码:

delimiter $$

    CREATE TRIGGER t_calcula_preco AFTER INSERT ON produto

    begin

    declare id = last_insert_id();

    declare tipo_id;

    declare iva;

    declare valor_iva;

    declare preco_sem_iva;

    -- guardamos o ID do tipo de jogo
    select new.prod_tdj_id into tipo_id from produto where new.prod_id = id;

    -- guardamos o ID do iva
    select tdj_iva_id into iva from tipo_de_jogo where tdj_id = tipo_id;

    -- guardamos o valor do IVA
    select valor into valor_iva from iva where iva_id = iva;

    -- guardamos o valor do preco sem iva
    select new.prod_preco into preco_sem_iva from produto where new.prod_id = id;

    -- agora calculamos o preco com iva

     update produto set prod_preco = (preco_sem_iva + (preco_sem_iva * valor_iva / 100));
    end ;

    delimiter ;

任何想法?

我想要实现的是:在我将一行插入表格后#34; Produto"我想根据另一个表中的另一个值更新其中一个值。

编辑:
我尝试多次运行代码,它似乎甚至创建触发器,否则它会给我一个错误" Trigger已经存在"

1 个答案:

答案 0 :(得分:0)

正如我在最初的评论中所说,你不能更新你的触发器所在的表的内容(除了触发器正在操作的行);从中选择它通常不是一个好主意。此外,正如其他人暗示的那样,您实际上并未终止触发器定义(使用替换$$分隔符)。另外,您在使用NEW时似乎有些困惑。

DELIMITER $$

CREATE TRIGGER t_calcula_preco AFTER INSERT ON produto

BEGIN

   DECLARE iva;
   DECLARE valor_iva;

   -- guardamos o ID do iva
   SELECT tdj_iva_id INTO iva 
   FROM tipo_de_jogo 
   WHERE tdj_id = NEW.prod_tdj_id
   ;

   -- guardamos o valor do IVA
   SELECT valor INTO valor_iva 
   FROM iva 
   WHERE iva_id = iva
   ;

   -- agora calculamos o preco com iva
   SET NEW.prod_preco := (NEW.prod_preco + (NEW.prod_preco * valor_iva / 100))
   ;

END$$

DELIMITER ;

编辑:删除了我从初始复制粘贴中不小心留下的最终UPDATE;以及所有SQL关键字的上层可读性。

注意:iva和valor_iva的声明中应包含数据类型。