反引号无法在Shell脚本中运行MySQL查询

3

你好,我正在尝试从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中的保留字,您不应将其用作列名。 - Jens
不知道为什么它被踩了。嘿,阿伦,你找到解决办法了吗? - learner
2个回答

4
反引号在shell中代表“命令替换”。
双引号内的反引号会被解析并执行。
因此,shell会解析以下内容:
`long`

你的字符串中包含 long 命令,但似乎运行失败了。

你需要对反引号进行转义。

\`long\`

在双引号字符串中,为了防止这种情况发生(或使用不会评估它们的单引号字符串)

'... `long` ...'

这在我的情况下不起作用。我不得不像这样使用数据库名称:CREATE TABLE reporting.details AS SELECT * FROM \\Temp-17-09-19\.details;。但是它给了我一个错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Temp-17-09-19.details' doesn't exist。 所以它将整个db.tablename视为一个表名。 - learner

0
你必须在这里尝试一下,我修改了两个地方:将'long'替换为\'long\',将PRIMARY KEY ('id')替换为PRIMARY KEY (id)。这个查询在我的shell脚本中运行良好。这里的testdatabase的名称。
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));"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接