Mysql触发器和事件在一起?

时间:2013-12-23 10:35:15

标签: mysql triggers crontab rdbms

我有一个前插入触发器:

    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天的间隔,以便我的产品表中名为product.new的一个标志(bool列)设置为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;//

非常感谢任何答案..

1 个答案:

答案 0 :(得分:2)

虽然文档说:

13.1.11. CREATE EVENT Syntax

  

...

     

您可以将事件创建为存储例程的一部分,但是可以创建事件   不能由其他事件创建。

我认为它已经过时,因为我们阅读了以下内容:

E.1. Restrictions on Stored Programs

  

...

     

事件计划程序限制

     
      
  • ...
  •   
  • 存储的例程,触发器或其他事件可能无法创建,更改或删除事件。事件也可能无法创建,更改或删除存储的例程或触发器。 (Bug #16409Bug #18896)。
  •   
  • ...
  •