创建触发器以从外部值生成到期日期

时间:2017-08-06 20:05:45

标签: mysql sql triggers

我有一个触发器,应根据您选择的订阅类型计算订阅的到期日期

DROP TRIGGER IF EXISTS `trigger_expiration_date`;
CREATE DEFINER=`root`@`localhost` 
TRIGGER `trigger_expiration_date` 
BEFORE 
INSERT ON `contracts` 
FOR EACH ROW update contracts c 
inner join contract_types ct on c.id_contract_type = ct.id_contract_type 
set c.expiration_date = date_add(c.date_of_purchase, INTERVAL ct.nr_months MONTH)

每当我运行上面的代码时它都被批准了,但是一旦我插入任何东西,我就被告知我无法插入因为触发器已被调用

1 个答案:

答案 0 :(得分:0)

实际上,您无法在触发器运行的同一个表上执行类似的更新。

而是使用grid别名来引用正在插入的记录。来自documentation

  

在触发器主体中,您可以使用别名newOLD来引用主题表(与触发器关联的表)中的列。 NEW在更新或删除之前引用现有行的列。 OLD.col_name指的是要插入的新行的列或更新后的现有行。

在你的情况下,你可以这样做:

NEW.col_name