mysql - 截断两个日期之间的表(使用 MySQL 和 bash 脚本)

标签 mysql sql bash scripting

我正在尝试编写一个数据库截断脚本,该脚本将截断两个日期之间数据库中的表。这是一个在测试设置中运行的维护脚本,用于快速清理内容。

该脚本是用 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/

相关文章:

java - 其中哪一个最好用,为什么?

python - 测试命令行实用程序

bash - 如何提取具有公共(public)字段的行

php - 从数据库插入选择框列

java - 是否应该将 FK 设置为另一个表的索引?

mysql - Windows 上的小写文件系统 MySQL

linux - 使用 AWK 并将结果设置为 bash 变量/数组?

mysql - 将电子邮件标题插入 mysql 字段引号和斜杠问题

mysql - 从两个表中选择,如果不存在则插入到一个表中

mysql - 查找最新记录 : left outer join vs. 降序排序