【问题标题】:mysqldump with --where clause is not working带有--where子句的mysqldump不起作用
【发布时间】:2014-10-08 16:18:24
【问题描述】:
 mysqldump -t -u root -p  mytestdb mytable --where=datetime LIKE '2014-09%'

这就是我正在做的事情,它会返回:

mysqldump: Couldn't find table: "LIKE"

我正在尝试返回列 datetimelike 2014-09 的所有行,意思是“所有九月行”。

【问题讨论】:

    标签: mysql sql mysqldump


    【解决方案1】:

    您可能需要使用引号:

    mysqldump -t -u root -p  mytestdb mytable --where="datetime LIKE '2014-09%'"
    

    【讨论】:

    • 这里的原因是 shell 默认会中断空格上的参数,因此它将其解释为三个不相关的参数。引号将它们组合在一起。
    • 谢谢。必须使用双引号,然后使用单引号,例如 mysqldump -t -u root -p mytestdb mytable --where="datetime LIKE '2014-09%'"
    • 您能否也添加答案的来源?
    • @NikhilWagh 你是什么意思?我不记得我第一次使用 shell 是什么时候,而引号是我必须了解的早期陷阱之一,嗯,我不知道,三十年前。
    【解决方案2】:

    使用 LIKE 选择日期不是一个好主意。我在一个项目中看到了这种方法。这会导致巨大的 DBMS 负载和缓慢的系统操作,因为此表列没有使用索引。

    如果您需要选择日期范围,请使用:

    where datetime between '2014-09-01' and '2014-09-30 23:59:59'
    

    【讨论】:

    • 只要您不首先使用通配符,就会使用索引,因此 '2019-09%' 将使用索引,因为它不首先包含通配符,但 '%2014-09%' 不会
    • 转换为字符串可能会阻止使用索引。有些人还确认最好不要使用like进行日期比较:stackoverflow.com/questions/1629050/…
    猜你喜欢
    • 2015-11-28
    • 2014-08-29
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2014-01-26
    相关资源
    最近更新 更多