以下行是否会删除昨天发生的表中的每个事件?
delete from events where date(event_date) < CURDATE() - INTERVAL 1 DAY;
如果没有,我该如何删除昨天发生的事件?
答案 0 :(得分:4)
不,您的查询会删除比昨天更早的所有事件。要仅删除昨天发生的事件
delete from events
where date(event_date) = CURDATE() - INTERVAL 1 DAY;
答案 1 :(得分:1)
出于优化目的,最好在列上使用比较而不是函数。如果event_date
没有时间组件:
delete from events
where event_date = date_sub(CURDATE(), 'INTERVAL 1 DAY');
如果它确实有时间竞争力:
delete from events
where event_date >= date_sub(CURDATE(), 'INTERVAL 1 DAY') and
event_date < CURDATE();
特别是,这允许MySQL使用WHERE
子句的索引,这可以使查询更有效。