我有一个触发器,应根据您选择的订阅类型计算订阅的到期日期
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)
每当我运行上面的代码时它都被批准了,但是一旦我插入任何东西,我就被告知我无法插入因为触发器已被调用
答案 0 :(得分:0)
实际上,您无法在触发器运行的同一个表上执行类似的更新。
而是使用grid
别名来引用正在插入的记录。来自documentation:
在触发器主体中,您可以使用别名
new
和OLD
来引用主题表(与触发器关联的表)中的列。NEW
在更新或删除之前引用现有行的列。OLD.col_name
指的是要插入的新行的列或更新后的现有行。
在你的情况下,你可以这样做:
NEW.col_name