【问题标题】:How to pass a variable from a shell script to a mysql script如何将变量从 shell 脚本传递到 mysql 脚本
【发布时间】:2016-10-29 20:13:29
【问题描述】:

我有一堆使用 name1 作为数据库名称并用我的数据填充该数据库的 mysql 脚本。但是,我希望能够选择数据库的名称,而不是在我的 sql 脚本中的任何地方都将其命名为 name1

我已经有一个包装器 shell 脚本,它接受我的数据文件的路径,现在我希望它也接受数据库的名称。

在我的 shell 脚本中,我指定:

DATABASE_NAME=$2

我的 mysql 脚本顶部有什么方法可以使用 $DATABASE_NAME 吗?所以在 mysql 脚本中,它将是:

USE DATABASE_NAME;

而不是我现在拥有的:

USE name1;

【问题讨论】:

  • 您在脚本中同时使用多少个数据库?如果为 1,则清理一次脚本。
  • 我只使用了 1 个数据库,名为 name1。但我有近 10 个引用它的 mysql 脚本。另外,“清理脚本一次”是什么意思?
  • 我只是看不出人们到处都在用mydb.select blah from mydb.table1 ... 的意义
  • Ctrl-H 查找和替换。噗,mydb. 变为空白
  • 将您的脚本添加到您的问题中。

标签: mysql linux bash shell variables


【解决方案1】:

您可以使用mysql -e 来执行您的代码:

mysql -e "USE ${DATABASENAME}; Some sql"

这样任何替换都有效。

您可以选择将临时 sql 文件或管道代码写入您的 mysql,您只需在解析该文件时替换 ${DATABASENAME}。 (-e 选项是最透明和最简单的)

【讨论】:

  • 好的,如果我这样做,我可能会有类似mysql -e "USE ${DATABASENAME}; DataLoad.sql" 的内容。在 DataLoad.sql 文件中,如何引用相同的数据库名称? (对于 SELECT COUNT(*) FROM name1.Load 之类的东西,我希望将 name1 替换为 DATABASENAME)
  • @Jain USE 命令设置默认数据库。因此,只需将数据库名称留在 SQL 之外,例如SELECT COUNT(*) FROM Load.
  • 您可以使用source filename.sql从文件中加载SQL。
  • @Barmar 我试过了,但是对于我的一些 sql 脚本,它说如果我没有 name1.Load,则该表不存在。我同意你的逻辑,但也许 mysql 没有
  • 不,它总是一样的。不知道为什么它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多