【问题标题】:backtick is not working to run mysql queries in shell script反引号无法在 shell 脚本中运行 mysql 查询
【发布时间】:2016-09-08 11:02:02
【问题描述】:

您好,我正在尝试从 shell 脚本运行 MySQL 查询。

mysql -u root -p'1234' -e "CREATE TABLE $DB.aa_vv_cc
(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
lat varchar(255) DEFAULT NULL,
`long` varchar(255) DEFAULT NULL,
 status int(11) NOT NULL DEFAULT '1',
 created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY ('id')
);"

我在“long”上遇到错误。shell 脚本中的反勾号不起作用。任何帮助将不胜感激。

【问题讨论】:

  • 由于 Long 是 mysql 中的保留字,因此不应将其用作列名。
  • 不知道为什么它被否决了。嘿阿伦,你找到解决方案了吗?

标签: mysql linux shell sh


【解决方案1】:

反引号在 shell 中是 Command Substitution

并且它们在双引号字符串中进行评估。

所以shell看到了

`long`

在您的字符串中并尝试运行命令 long 并且可能会失败。

你需要避开反引号

\`long\`

在双引号字符串中以防止这种情况(或使用不计算它们的单引号字符串)

'... `long` ...'

【讨论】:

  • 这在我的情况下不起作用。我必须将它与数据库名称一起使用,例如CREATE TABLE reporting.details AS SELECT * FROM \`Temp-17-09-19\`.details;。但它给了我错误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'Temp-17-09-19.details'不存在。所以它正在考虑将整个 db.tablename 作为一个表名。
【解决方案2】:

你必须在这里试试这个我已经修改了两个东西'long'替换为\'long\'PRIMARY KEY ('id')替换为PRIMARY KEY (id)这个查询在我的shell脚本中工作。这里test是@的名称987654326@.

mysql -u root  -p'1234' -e "USE test;CREATE TABLE $DB.aa_vv_cc (id int(10) unsigned NOT NULL AUTO_INCREMENT,city varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,lat varchar(255) DEFAULT NULL,\`long\`varchar(255) DEFAULT NULL, status int(11) NOT NULL DEFAULT '1', created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp NOT NULL DEFAULT '0000-00-0000:00:00',PRIMARY KEY (id));"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2017-09-09
    • 2019-02-17
    • 2023-03-14
    • 1970-01-01
    • 2023-03-04
    • 2011-04-25
    相关资源
    最近更新 更多