mysql 触发器无法识别

标签 mysql triggers insert

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

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

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 ;

有什么想法吗?

我想要实现的是:在表“Produto”中插入一行后,我想根据另一个表中的另一个值更新其中一个值。

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

最佳答案

正如我在最初的评论中所说,您无法更新触发器所在表的内容(除了触发器正在操作的行之外);通常,从中进行选择也不是一个好主意。此外,正如其他人所暗示的那样,您实际上并未终止触发器定义(使用替代 $$ 分隔符)。此外,您似乎对 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 ;

编辑:删除了我不小心从初始复制粘贴中保留的最终更新;并将所有 SQL 关键字大写以提高可读性。

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

关于mysql 触发器无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350456/

相关文章:

php - SQL 查询正在运行但随机停止

mysql - 而不是空白需要特殊字符作为连字符

mysql - 在 MySQL 中创建 TRIGGER 时出现问题

php - INSERT INTO 不工作我做错了什么?

php - 将多行插入 mysql 数据库

php - IN() 函数不使用百分号返回结果

mysql - "groups"在此位置没有有效输入

php - 无法从 PHP 插入 mysql 自动增量行,但可以使用相同的语句从 phpmyadmin 手动插入

sql - TSQL 更新后触发器检查一个 IF UPDATE 中多个列的更新

git - 当提交到子模块的更改时如何在 jenkins 中触发构建?