我正在创建创建数据库,表并将数据插入到创建的表中的mysql脚本...但是我需要使用ubuntu terminal..i成功创建数据库和表,但我的INSERT sql语句不会在表中插入任何内容...
echo "CREATE DATABASE "mydatabase"" | mysql -uroot -pPASSWORD; \
echo "DROP TABLE IF EXISTS "servers";" | mysql -uroot -pPASSWORD mydatabase; \
echo "CREATE TABLE "servers" ( \
"id" int(2) NOT NULL AUTO_INCREMENT, \
"server" varchar(64) NOT NULL, \
"ip" int(10) unsigned NOT NULL, \
"panel" int(4) NOT NULL, \
PRIMARY KEY ("id") \
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;" | mysql -uroot -pPASSWORD mydatabase; \
echo "LOCK TABLES "servers" WRITE;" | mysql -uroot -pPASSWORD mydatabase; \
上面的代码工作并创建数据库和表,下一个命令不会从终端插入表中,我找不到任何错误...那么为什么不插入表?
echo "INSERT INTO servers (id, server, ip, panel) VALUES (1, \''+rows[0].server+'\', \'INET_ATON('+rows[0].ip+')\', '+rows[0].panel+');" | mysql -uroot -pPASSWORD mydatabase; \
echo "UNLOCK TABLES;" | mysql -uroot -pPASSWORD mydatabase;
答案 0 :(得分:1)
您应该在没有echo "INSERT…"
的情况下尝试| mysql
,看看它输出的内容。
通常是您在问题中写的:
echo "INSERT INTO servers (id, server, ip, panel) VALUES (1, \''+rows[0].server+'\', \'INET_ATON('+rows[0].ip+')\', '+rows[0].panel+');" | mysql -uroot -pPASSWORD mydatabase; \
没有| mysql
输出:
INSERT INTO servers (id, server, ip, panel) VALUES (1, \''+rows[0].server+'\', \'INET_ATON('+rows[0].ip+')\', '+rows[0].panel+');
您现在可以尝试在大脑中对此进行评估,或者将其复制并粘贴到MySQL以查看发生的情况。我个人现在能够在我的大脑中解释它,它产生"语法错误附近''' + rows [0] .server +' \&#39 ;'"
我不知道rows
来自哪里,但bash中的rows[0].ip
不是合法语法,你在混合语言吗?它不会工作。
旁注,你应该在这里使用文档而不是大量的反斜杠,它会更具可读性:
cat <<EOF | mysql …
CREATE TABLE "servers" (
"id" int(2) NOT NULL AUTO_INCREMENT,
"server" varchar(64) NOT NULL,
"ip" int(10) unsigned NOT NULL,
"panel" int(4) NOT NULL,
PRIMARY KEY ("id")
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
EOF