初学者mysql - 创建表的语法错误

时间:2017-03-19 16:45:54

标签: mysql sql

我对SQL很新,我发现了类似这样的问题,但我提出了建议的更改,但我仍然收到同样的错误。任何人都可以提示我正确的方向,为什么我仍然会收到这个错误?

任何建议或帮助将不胜感激。谢谢。

mysql> USE famous_scientists;
Database changed
    -> CREATE TABLE scientists (
    ->     id INT(1) NOT NULL auto_increment,
    ->     name VARCHAR(255) NOT NULL,
    ->     discovery VARCHAR(255) NOT NULL,
    ->     year_of_birth INT(4) NOT NULL,
    ->     year_of_death INT(4) NULL,
    ->     PRIMARY KEY (id)
    -> ) AUTO_INCREMENT=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
 corresponds to your MySQL server version for the right syntax to use near '
CREATE TABLE scientists (
    id INT(1) NOT NULL auto_increment,
    name V' at line 1

4 个答案:

答案 0 :(得分:1)

您的代码运行正常。请参阅SQL Fiddle

如果您有错误,则可能高于此代码。错误消息表示无法识别create。有时坏人物可能会陷入其中。

答案 1 :(得分:0)

尝试:

mysql> USE famous_scientists;
Database changed
    CREATE TABLE scientists (
         id INT NOT NULL auto_increment,
         name VARCHAR(255) NOT NULL,
         discovery VARCHAR(255) NOT NULL,
         year_of_birth INT(4) NOT NULL,
         year_of_death INT(4) NULL,
         PRIMARY KEY (id)
     ) AUTO_INCREMENT=1;

答案 2 :(得分:0)

 CREATE TABLE scientists (
       id INT NOT NULL auto_increment,
         name VARCHAR(255) NOT NULL,
         discovery VARCHAR(255) NOT NULL,
         year_of_birth INT(4) NOT NULL,
         year_of_death INT(4) NULL,
         PRIMARY KEY (id)
     )

答案 3 :(得分:0)

mysql> USE famous_scientists;
Database changed
    ->

这个^^^^箭头错了。它不应该在这里。

你应该看到这个:

mysql> USE famous_scientists;
Database changed
mysql>

事实上你并没有表明你输入或粘贴的数据发生了奇怪的事情。这不是一个真正的语法错误,它只是公然的混乱。 / p>

->箭头表示CLI认为您已经在键入或粘贴SQL语句的过程中,显然您不打算这样做。

接下来要做的是Control-C并重新开始。

错误消息本身很常见 - 任何类型的语法错误都会触发它,但是如果你准确地内化它意味着什么,那么你将为自己节省很多精神上的痛苦。它似乎很神秘,但它确实不是。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '...'

单词near之后的单引号内的内容是查询中发生错误时尚未解析的部分。

换句话说,你看到的是确切位置的开始 - 从左到右 - 查询停止向服务器发出语法意义。

重要的是,报告的特定错误绝不会晚于引用字符串的开头。它也不可能在之前,因为在查询中这个点之前的任何事情,服务器认为在语法上有效。您的查询中可能有一个错误,但它没有按照您的意图执行,但从服务器角度来看,它不是语法错误。

示例:

mysql> SELECT * * FROM t1;
ERROR 1064 (42000): ...right syntax to use near '* FROM t1' at line 1

第二个*让它感到困惑。之后的内容并不重要,因为第二个*在语法上无效。

mysql> SELECT * FROM FROM t1;
ERROR 1064 (42000): ...right syntax to use near 'FROM t1' at line 1

同样的事情......第二个FROM无效。解析停在那里,因为它没有意义。

我们想要放一张桌子,但我忘记输入DROP这个词。

mysql> TABLE t1;
ERROR 1064 (42000): ...right syntax to use near 'TABLE t1' at line 1

服务器说"等等,您无法使用关键字TABLE开始查询。"查询中的第一件事是错误的。

另请注意,我实际上没有名为t1的表,但服务器不是要检查它。遇到的第一个意想不到的事情就是停止这个过程。

这个例子和你的一样......服务器似乎在抱怨查询的开头...所以现在查看更深入的查询是完全没必要的。

所以这个错误......

...the right syntax to use near '
CREATE TABLE scientists (

...立即告诉你服务器被CREATE或者某些控制字符或者看起来像之前的空格的东西弄糊涂了。但问题不在于此。 CREATE之后尚未评估任何内容。

怎么可能?你是对的,它不是......除非在那之前有某些东西被输入......而且我们知道因为->提示而出现这种情况。它到底是什么或究竟是如何到达那里是不可能推测的。

最后一个例子,这一个往往是最令人困惑的......但是一旦你理解了上面的一切,它就有意义了。

mysql> SELECT * FROM user WHERE;
ERROR 1064 (42000): ...right syntax to use near '' at line 1
等等,什么? near ''是什么意思?

请记住关于引用部分的部分,首先是混淆服务器的第一件事吗?在这种情况下混淆服务器的是它解析了所有内容,一直到我的查询结束,并发现我的查询毫无意义。它很困惑,因为在解释我的查询时,它需要更多但却找不到更多。然而,我的查询可能是完整的,因为我没有在WHERE之后放任何东西。所以near ''表示结束后的。解析器(或者它是词法分析器,我离题)已经用完了要检查的东西,但是现在的查询是不完整的,所以错误是"接近" ......没什么。它接近在查询结束时仍未解析的任何内容。

如果您的查询确实存在任何问题,则此错误并未告诉您相关信息。它本质上根本没有被解析。

但是现在你知道如何像MySQL一样思考"面对ERROR 1064 (42000)并试图找出服务器试图告诉你的内容时。