我正在尝试编写一个数据库截断脚本,该脚本将截断两个日期之间数据库中的表。这是一个在测试设置中运行的维护脚本,用于快速清理内容。
该脚本是用 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
错误是:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where date BETWEEN '2015-01-01 00:00:00' AND '2015-03-31 23:59:59'' at line 1
最佳答案
truncate table
不采用 where
子句。要么全有,要么全无。这就是它速度快的原因。
你可以这样做:
delete t from $table t
where date BETWEEN '2015-01-01 00:00:00' AND '2015-03-31 23:59:59';
如果您需要一种快速方法来删除大量旧行,那么您应该考虑分区。数据库删除分区的速度比删除相同行的速度快得多。
关于mysql - 截断两个日期之间的表(使用 MySQL 和 bash 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34730716/