我可以使用一个使用不同表参数的触发器吗?

时间:2018-11-21 17:43:04

标签: mysql database triggers database-trigger

我正在使用 MySql 创建一个简单的应用程序,并且我需要使用触发器。 我认为该触发器会在每次有人具有特定的民事状态更新时更新车辆表。

我不确定触发器的语法,但没有找到任何能解释使用来自差异表的多个实数的东西。

这是我的触发器:

CREATE TRIGGER tr_widow AFTER UPDATE
ON person
FOR EACH ROW
SET v.id_person = p.id_spouse 
FROM person p 
JOIN person p2 ON p.id_spouse = p2.id_person 
JOIN vehicle v ON v.id_person = p.id_person 
WHERE p2.civil_state = 5

返回“未知的系统变量“ id_person”” 错误。

1 个答案:

答案 0 :(得分:1)

我们使用UPDATE语句(而不是SET子句)来更新表中的值。我更改了下面的触发器(修复了所有语法错误)。但是从逻辑上讲,您仍然需要准确定义要实现的目标。

在触发器中,我们可以访问NEWOLD的值来实现逻辑。

DELIMITER $$  -- Define the Delimiter to something else other than ;
CREATE TRIGGER tr_widow AFTER UPDATE
ON person
FOR EACH ROW

  BEGIN  -- Trigger statement body starts with BEGIN clause

    UPDATE vehicle v 
    JOIN person p ON v.id_person = p.id_person 
    JOIN pessoa p2 ON p.id_spouse = p2.id_person 
    SET v.id_person = p.id_spouse 
    WHERE p2.civil_state = 5;

  END $$  -- END the Trigger statement
DELIMITER ;  -- redefine the Delimiter to ;