好的,我已经开始在mysql中编写我的第一个触发器了,它没有出错,但它也不起作用......
DELIMITER $$
DROP TRIGGER `cc`.`update_expires_date_trig`$$
CREATE TRIGGER `update_expires_date_trig` BEFORE INSERT ON `credit_test_acc`
FOR EACH ROW BEGIN
UPDATE credit_test_acc SET date_expires_acc = DATE_ADD(CURDATE(), INTERVAL 6 MONTH) WHERE type_acc = 'init'
END;
$$
DELIMITER ;
我有两个问题:
无法在存储的函数/触发器中更新表'credit_test_acc',因为它已被调用此存储函数/触发器的语句使用。
定义的触发器是否会更新JUST插入的行或数据库中的每一行?
答案 0 :(得分:1)
据我所知,它必须像这样重写才能按预期工作:
DELIMITER $$
DROP TRIGGER `cc`.`update_expires_date_trig`$$
CREATE TRIGGER `update_expires_date_trig` BEFORE INSERT ON `credit_test_acc`
FOR EACH ROW BEGIN
SET NEW.date_expires_acc = DATE_ADD(CURDATE(), INTERVAL 6 MONTH)
END;
$$
DELIMITER ;
其中NEW表示即将插入表中的行。你没有解释'type_acc'在这里扮演什么角色(我可以想到不止一种方式可以解释),所以我把它留了出来。如果它是我认为的那样,你可以像这样应用它:
IF NEW.type_acc = 'init' THEN # do whatever you want here
答案 1 :(得分:0)
触发器无法更改触发它的表格 直接或间接。
您只能通过BEFORE
更改SET new.field = newvalue
触发器中的值
这只能影响触发触发器的“当前”行(可以这么说)。