2013-12-23 54 views
1

我有一个插入前触发器:Mysql触发器和事件一起?

DELIMITER // 
    DROP TRIGGER IF EXISTS product_before_insert // 
    CREATE TRIGGER product_before_insert 
    BEFORE INSERT ON product 
    FOR EACH ROW 
    BEGIN 
     IF NEW.created_on='0000-00-00 00:00:00' THEN 
     SET NEW.created_on = NOW(); 
     SET NEW.modified_on = NOW(); 
     SET NEW.expires_on = ADDDATE(NOW(), INTERVAL 15 DAY);  
    END IF; 
    END;// 

现在好了,我想借此New.created_on为TIMESTAMP,并添加有15天的间隔,这样在我的产品表中的一个标志(一个布尔值列)命名的产品。新设置为false是默认true.eg:

 new boolean NOT NULL DEFAULT 1 #table name:product 

所以可以我不喜欢:

DELIMITER // 
    DROP TRIGGER IF EXISTS product_before_insert // 
    CREATE TRIGGER product_before_insert 
    BEFORE INSERT ON product 
    FOR EACH ROW 
    BEGIN 
     IF NEW.created_on='0000-00-00 00:00:00' THEN 
     SET NEW.created_on = NOW(); 
     SET NEW.modified_on = NOW(); 
     SET NEW.expires_on = ADDDATE(NOW(), INTERVAL 15 DAY); 

     CREATE EVENT newflagsetter 
     ON SCHEDULE AT NEW.created_on + INTERVAL 15 DAY 
     DO 
     UPDATE product SET new=0; 

    END IF; 
    END;// 

非常感谢任何答案..

回答

2

虽然文件说:

13.1.11. CREATE EVENT Syntax

...

您可以创建一个事件作为存储程序的一部分,但事件 不能由其他事件来创建。

我认为这是过时的,因为我们阅读以下内容:

E.1. Restrictions on Stored Programs

...

事件调度限制

  • ...
  • 事件可能不会被存储的例程,触发器或其他事件创建,更改或丢弃。事件也可能不会创建,更改或删除存储的例程或触发器。 (Bug #16409,Bug #18896)。
  • ...
+0

那好吧..它是一个活动的限制。现在我该怎么做。我可以在我的控制器(我现在在php-codeigniter中)中做到这一点,但这也需要我创建一个事件驱动函数,我的意思是如果从创建日起过去15天,那么会触发一个自动函数将该标志设置为FALSE。任何数据库内的想法?谢谢你的回答很好.. – edam