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

时间:2013-03-10 20:58:46

标签: mysql sql database

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

我将此查询发送到MySQL:

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

但是会发生什么是Java程序停止向表中添加新值。有没有办法在不编辑Java程序的情况下处理这个问题? 我愿意每天一次以cronjob的形式运行查询。

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

2 个答案:

答案 0 :(得分:2)

您似乎正在使用旧的MyISAM数据库引擎。

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

您可以通过将表引擎更改为InnoDB来改进它:

ALTER TABLE mytable ENGINE = innodb;

InnoDB引擎是完全事务性的,并不会在INSERTUPDATEDELETE期间锁定整个表格,因此您的问题应该消失。

答案 1 :(得分:0)

我想你需要更改你的存储引擎。使用ALTER TABLE tbl ENGINE = innodb执行此操作,但请注意differences between MyISAM and Innodb