[英]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();
在同一句话中准确地看到单词event , datetime
和datetime
会让我感到畏缩。 为什么? 一方面,很难获得一个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.