【问题标题】:CREATE TABLE - Works in MySQL but not in BashCREATE TABLE - 适用于 MySQL 但不适用于 Bash
【发布时间】:2017-12-05 03:00:16
【问题描述】:

我正在编写一个连接到mysqlbash 脚本并创建一个数据库,如下所示:

mysql -u root -e "CREATE DATABASE test;"

我看到数据库是使用以下命令创建的:

mysql -u root -e "SHOW databases;"

哪些输出:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+

现在我希望USE 这个新创建的数据库和CREATE TABLE,因此我运行以下代码:

mysql -u root -e "USE test;"
mysql -u root -e "SELECT DATABASE();"
mysql -u root -e "CREATE TABLE information (id bigint NOT NULL AUTO_INCREMENT, name varchar(128), value_one int(255), value_two int(255), value_three int(255), value_four int(255), value_five bigint, value_six bigint);"

为了让我查看选择了哪个数据库,SELECT DATABASE(); 语句返回:

+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+

CREATE TABLE 语句给了我这个错误:

ERROR 1046 (3D000) at line 1: No database selected

或者,我尝试将它们连接在一起:

mysql -u root -e "USE test; CREATE TABLE information (...);"

根本没有出口。我仍然遇到同样的错误。

鉴于mysql 支持直接在命令中连接数据库:

mysql test -u root -e "CREATE TABLE information (...);"

或者按照这个response

mysql --database=test -u root -e "CREATE TABLE information (...);"

它们也不适合我。

有人知道我为什么不能创建表吗?

感谢任何帮助。


更新

根据@Genuine 的回答,它实际上在mysql 中有效,但我无法通过bash 运行查询。这是mysql 从终端看到的样子:

我已经阅读了大量有关如何将 bash 脚本连接到相应数据库的信息,我重申这应该可以:

mysql -u root -e "USE test; CREATE TABLE information (...);"

但它没有并且仍然拍摄ERROR 1046 (3D000)

我的bash 语法有问题吗?

还值得一提的是@Genuine 指出了正确的语法:

USE test; SELECT DATABASE();

现在显示:

+------------+
| DATABASE() |
+------------+
| test       |
+------------+

注意:上面的脚本sn-ps是按顺序写的,也就是说我先CREATE DATABASE test;,然后USE test;,最后CREATE TABLE information (...);。我最近的连接是通过 root@127.0.0.1 进行的,我基本上是利用 Sequel Pro 来帮助我首先测试我的查询。

【问题讨论】:

    标签: mysql sql database bash create-table


    【解决方案1】:

    select database(); 只能显示当前使用的数据库。在shell中,每一个都是单独的语句,它们不在一个会话中,所以不能这样使用sql。
    如果你想展示你想要的,你可以使用像use test;select database()这样的sql

    并且mysql -u root -e "USE test; CREATE TABLE information (...);"可以在我的数据库中工作,也许你应该先检查你的sql。

    【讨论】:

    • 你是对的,mysql 确实正确执行了USE test; SELECT DATABASE();,但是,USE test; CREATE TABLE information (...) 仍然给我同样的错误。
    • 对如何调试有什么建议吗? @正版
    • 你可以在mysql中执行你的create table来检查你的sql是否正确。它在我的 mysql 中正确执行,所以它应该可以工作。
    • 它在mysql 中工作,但我无法让它在bash @Genuine 中工作
    • 是的@Genuine 我用shell的图像更新了我的问题@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2017-01-12
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多