2009-05-04 44 views
0

好了,我已经开始写我在mysql中第一个触发器,它不给一个错误,但它不工作,要么...第一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 ; 

我有2个问题:因为它已经被用于通过调用这个存储函数/触发声明

  1. 无法更新在存储函数/触发器表“credit_test_acc”。

  2. 定义的触发器是否会更新JUST插入的行或数据库中的每行?

回答

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 ; 

凡新指的是有关行要插入到表。你没有给出任何解释,说明'type_acc'在这里可能扮演什么角色(我可以想到它可以被解释的多种方式),所以我把它抛弃了。如果这是我的想法,可以这样应用:

IF NEW.type_acc = 'init' THEN # do whatever you want here 
0

触发器无法更改触发它的表。
直接或间接。

您只能更改BEFORE触发器中的值SET new.field = newvalue
这只能影响拉动触发器的“当前”行(可以这么说)。