繁体   English   中英

来自另一个表的MySQL事件插入ID

[英]MySQL Event Insert ID from another table

我想创建一个事件,当lend_date列恰好经过15天时,它将执行INSERT查询。

它将获取该行的ID和userid ,并将其插入到另一个表中。

例如:

id |  userid  |    lend_date
---+----------+----------------------
1  |    1     |  2015-09-24 15:58:48
2  |    1     |  2015-09-21 08:22:48

而现在,正是2015-10-06 08:23:41 因此,该事件应获取第二行的ID,即2 ,并将其插入到另一个表中。

我的事件查询应该是什么样的?

事件类型为RECURRING 但是我也不确定是否应该每小时或每天执行一次。 最好的建议是什么?

和使用Task Scheduler相比,这是更好的方法吗?

我要插入获取的ID的另一个表是notification_table ,它将在该表中通知用户他/她的过期日期。

notification_table如下所示:

id |  userid  |  notificationid  |   notificationdate   |
---+----------+------------------+----------------------+
1  |    1     |        1         |  2015-09-24 15:58:48 |
2  |    1     |        1         |  2015-09-21 08:22:48 | 

我在看这个查询:

INSERT INTO notification_table (id, userid, notificationid, notificationdate) 
        SELECT id, userid, 1, NOW() 
        FROM first_table
        WHERE lend_date + INTERVAL 15 DAY = NOW();

在同一句话中准确地看到单词eventdatetimedatetime会让我感到畏缩。 为什么? 一方面,很难获得一个datetime值与另一个datetime值完全匹配。 另一方面,事件通常在计划的时间之后稍稍运行,尤其是在繁忙的数据库服务器上。 他们花了一些时间才能启动。

如果您需要记录已存在15天以上的表中的id值,则获取时间最准确的方法是使用查询或视图。

 CREATE OR REPLACE VIEW fifteen 
     AS SELECT id
          FROM table
         WHERE `datetime` < NOW() - INTERVAL 15 DAY

当然,您可以编写一个事件以将ID复制到新表中。 通过在事件中使用这种查询,您将不得不麻烦一些,以确保不会多次击中相同的id值。

   INSERT INTO newtable (id)
        SELECT id
          FROM table
         WHERE `datetime` < NOW() - INTERVAL 15 DAY
           AND id NOT IN (SELECT id FROM newtable) 

您应该多久运行一次重复活动? 这完全取决于id值启用15天后需要多长时间才能将其放入新表中。 如果您的应用程序要求它少于一分钟,那么您确实应该使用视图而不是事件。 超过一分钟的允许延迟,将使您以该频率使用重复事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM