【问题标题】:Mysql Trigger and Event together?Mysql触发器和事件一起?
【发布时间】:2013-12-23 20:44:23
【问题描述】:

我有一个插入前触发器:

    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 的一个标志(一个布尔列)设置为 false,默认情况下为 true。例如:

       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;//

非常感谢您的任何回答..

【问题讨论】:

    标签: mysql triggers crontab rdbms


    【解决方案1】:

    虽然文档说:

    13.1.11. CREATE EVENT Syntax

    ...

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

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

    E.1. Restrictions on Stored Programs

    ...

    事件调度程序限制

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

    【讨论】:

    • 那么......这是一个事件限制。现在我该怎么做。我可以在我的控制器中做到这一点(我现在在 php-codeigniter 上),但这也需要我创建一个事件驱动的函数,我的意思是如果从创建之日起 15 天过去,那么会触发一个自动函数来将该标志设置为 FALSE。任何数据库内的想法?谢谢..你的回答很棒..
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2018-01-08
    • 2021-09-07
    • 2018-10-07
    • 2020-09-24
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多