backtick无法在shell脚本中运行mysql查询

backtick无法在shell脚本中运行mysql查询,mysql,linux,shell,sh,Mysql,Linux,Shell,Sh,嗨,我正在尝试从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) DEF

嗨,我正在尝试从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”上遇到错误。back tick在shell脚本中不起作用。请提供任何帮助。

backtick是shell中的
命令替换

它们在双引号字符串中求值

所以贝壳看到了

`long`
在字符串中,尝试运行命令
long
,可能会失败

你需要摆脱这种逆势

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


反勾号是shell中的
命令替换

它们在双引号字符串中求值

所以贝壳看到了

`long`
在字符串中,尝试运行命令
long
,可能会失败

你需要摆脱这种逆势

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


你必须在这里尝试一下,我已经修改了两个东西
'long'
替换为
'long\'
主键('id')
替换为
主键(id)
这个查询在我的shell脚本中工作。这里
测试
数据库的名称

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));"

你必须在这里尝试一下,我已经修改了两个东西
'long'
替换为
'long\'
主键('id')
替换为
主键(id)
这个查询在我的shell脚本中工作。这里
测试
数据库的名称

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));"

只要是mysql中的保留字,就不应该将其用作列名。不知道为什么会被否决。嘿,阿伦,你找到解决方案了吗?只要是mysql中的保留字,你就不应该把它用作列名。不知道为什么它会被否决。嘿,阿伦,你找到解决办法了吗?这在我的情况下不起作用。我必须将它与数据库名称一起使用,比如
createtablereporting.details作为SELECT*FROM\`Temp-17-09-19\`.details。但它给了我错误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表“Temp-17-09-19.details”不存在。所以它将整个db.tablename视为一个tablename。这在我的情况下不起作用。我必须将它与数据库名称一起使用,比如
createtablereporting.details作为SELECT*FROM\`Temp-17-09-19\`.details。但它给了我错误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表“Temp-17-09-19.details”不存在。因此,它将整个db.tablename视为一个表名。