2016-01-11 22 views
0

我正在尝试编写一个数据库截断脚本,它将在两个日期之间截断数据库中的表。这是一个在测试设置中运行的维护脚本,用于快速清理事件。在两个日期之间截断表(使用MySQL和bash脚本)

该脚本是用bash编写的,并调用MySQL。如前所述,这是一个用于测试目的的快速循环。

我收到一个错误。我怀疑它可能是围绕日期的单引号/抽搐。任何指导将不胜感激。

mysql -umaintainer -pfoo -Nse 'show tables' TestDatabase | while read table; do mysql -umaintainer -pfoo -Nse "SET FOREIGN_KEY_CHECKS = 0 ; truncate table $table where date BETWEEN '2015-01-01 00:00:00' AND '2015-03-31 23:59:59'" TestDatabase; done 

错误是:

位于第1行

ERROR 1064(42000):你在你的SQL语法错误; 查看与您的MySQL服务器版本对应的 右语法的手册,以便在'where date BETWEEN'2015-01-01 00:00:00'和 '2015-03-31 23:59:59''之间使用在线1

回答

2

truncate table不需要where子句。这是全部或没有。这就是为什么它很快。

你可以这样做:

delete t from $table t 
    where date BETWEEN '2015-01-01 00:00:00' AND '2015-03-31 23:59:59'; 

如果你需要一个快速的方法来删除大量旧行,那么你应该考虑分区。数据库删除分区比删除相同行更快。

+0

好的......很高兴知道。谢谢! – Xofo

相关问题