如何每隔几秒自动刷新/重新运行一个查询?

Dan*_*ett 2 mysql mysql-workbench

我有一个针对没有 GUI 的数据库运行的脚本。这个简单的查询让我看到它的进展:

select
    *,
    (select count(*) from domains) as count,
    (select 456976-count(*) from domains) as remaining
from domains
order by domain desc
limit 0, 1;
Run Code Online (Sandbox Code Playgroud)

使用 MySQL Workbench,如何每隔几秒自动刷新/重新运行此查询?

我试过谷歌搜索,但没有想出任何相关的东西。

旁白:幻数 456,976 是 26^4;它与脚本有关。

Dav*_*ett 6

您没有说明您使用的是什么操作系统,但在 Linux/OSX 和其他类 Unix 系统下,您可以使用带有非常标准watch实用程序的 mysql 命令行工具来执行此操作。就像是:

watch -n 10 'mysql --database=dbname --user=username --password=$(cat /path/to/file/with/mysql/password) --execute="select *, (select count(*) from domains) as count, (select 456976-count(*) from domains) as remaining from domains order by domain desc limit 0, 1;"'
Run Code Online (Sandbox Code Playgroud)

打破它:

  • watch -n 10 '<stuff>'<stuff>每 10 秒运行一次并回显进入stdout控制台窗口的任何内容,要运行的命令周围的单引号告诉您的 shell 在发出命令之前不要运行任何通配符通配符或其他替换watch(我们希望这种情况发生当watch运行命令)
  • mysql --database=dbname --user=username --password=password 使用给定的身份验证详细信息针对给定的数据库运行命令行工具
  • 使用命令替换($(cat /path/to/file/with/mysql/password))读取密码,而不是直接给它的命令行上停止你的密码被呈现给任何人看的输出topps(这就是为什么我们使用单引号:没有他们,这种替代会之前完成watch是在控制中,因此真正的密码将在watch运行结果命令时出现在进程列表中)
  • --execute=<stuff>告诉命令行工具运行<stuff>然后立即退出(否则它会登录并等待您输入命令/查询/语句)。
  • 剩下的只是你的SELECT陈述。每次watch运行该mysql命令时,它都会输出结果watch并将它们绘制在您的屏幕上。

更多详情: