MySQL同时对同一个表执行2个查询

新值将整天添加到
MySQL数据库中.此表中有超过800万行.因为有很多旧值,所以我想在不停止Java程序插入值的情况下清理它们.

我将此查询发送到MySQL:

DELETE FROM `tablename`
WHERE `from` <= (date_add(now(), interval -20 DAY))

但是,Java程序会停止向表中添加新值.有没有办法在不编辑Java程序的情况下处理这个问题?
我愿意每天一次将查询作为cronjob运行.

我也尝试使用参数LOW_PRIORITY,但它没有任何区别.

最佳答案 您似乎正在使用旧的MyISAM数据库引擎.

不幸的是,MyISAM使用表级锁定.插入,更新或删除行时,将保留对该表的所有其他更改,直到该请求完成.在您的情况下,长时间运行DELETE会阻止任何INSERT进入该表.

您可以通过将表引擎更改为InnoDB来改进它,如下所示:

ALTER TABLE mytable ENGINE = innodb;

InnoDB引擎是完全事务性的,并且在INSERT,UPDATE或DELETE期间不会锁定整个表,因此您的问题应该消失.

点赞