gpt4 book ai didi

mysql - 如何修复 MySQL 错误 #1064?

转载 作者:行者123 更新时间:2023-12-01 17:47:59 25 4
gpt4 key购买 nike

向 MySQL 发出命令时,出现错误 #1064“语法错误”。

  • 这是什么意思?
  • 我该如何解决?
  • 最佳答案

    TL;DR

    Error #1064 means that MySQL can't understand your command. To fix it:

    • Read the error message. It tells you exactly where in your command MySQL got confused.

    • Examine your command. If you use a programming language to create your command, use echo, console.log(), or its equivalent to show the entire command so you can see it.

    • Check the manual. By comparing against what MySQL expected at that point, the problem is often obvious.

    • Check for reserved words. If the error occurred on an object identifier, check that it isn't a reserved word (and, if it is, ensure that it's properly quoted).


  • 啊啊啊!! #1064是什么意思?

    错误消息可能看起来像 gobbledygook,但它们(通常)提供了令人难以置信的信息,并提供了足够的详细信息来查明问题所在。通过准确理解 MySQL 告诉您的内容,您可以武装自己在 future 解决此类问题。

    与许多程序一样,MySQL 错误根据发生的问题类型进行编码。 Error #1064是语法错误。
  • 你说的这个“语法”是什么?是巫术吗?

    虽然“语法”是许多程序员只在计算机上下文中遇到的词,但它实际上是从更广泛的语言学中借来的。它指的是句子结构:即语法规则;或者,换句话说,定义语言中有效句子的构成规则。

    例如,以下英语句子包含语法错误(因为不定冠词“a”必须始终位于名词之前):

    This sentence contains syntax error a.

  • 这和 MySQL 有什么关系?

    每当有人向计算机发出命令时,它必须做的第一件事就是“解析”该命令以便理解它。 “语法错误”意味着解析器无法理解所询问的内容,因为它不构成语言中的有效命令:换句话说,该命令违反了编程语言的语法 .

    需要注意的是,计算机必须先理解该命令,然后才能对其进行任何操作。因为存在语法错误,MySQL 不知道后面是什么,因此在查看数据库之前就放弃了,因此模式或表内容不相关。
  • 我该如何解决?

    显然,需要确定该命令如何违反 MySQL 的语法。这听起来可能非常难以理解,但 MySQL 正在努力帮助我们。我们需要做的就是……
  • 阅读留言!

    MySQL 不仅会准确地告诉我们解析器在哪里遇到语法错误,而且还会提出修复它的建议。例如,考虑以下 SQL 命令:

    UPDATE my_table WHERE id=101 SET name='foo'

    该命令产生以下错误消息:

    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 'WHERE id=101 SET name='foo'' at line 1



    MySQL 告诉我们,在 WHERE 这个词之前,一切似乎都很好。 ,但后来遇到了问题。也就是说,没想到会遇到WHERE那时。

    消息说 ...near '' at line...只是意味着意外遇到命令结束:也就是说,在命令结束之前应该出现其他内容。
  • 检查命令的实际文本!

    程序员经常使用编程语言创建 SQL 命令。例如,一个 php 程序可能有这样的(错误)行:

    $result = $mysqli->query("UPDATE " . $tablename ."SET name='foo' WHERE id=101");

    如果你把这个写成两行

    $query = "UPDATE " . $tablename ."SET name='foo' WHERE id=101"
    $result = $mysqli->query($query);

    那么你可以添加echo $query;var_dump($query)看到查询实际上说

    UPDATE userSET name='foo' WHERE id=101

    通常,您会立即看到错误并能够修复它。
  • 服从命令!

    MySQL 还建议我们“检查与我们的 MySQL 版本相对应的手册以了解要使用的正确语法”。让我们这样做。

    我使用的是 MySQL v5.6,所以我会求助于 that version's manual entry for an UPDATE command .页面上的第一件事是命令的语法(对于每个命令都是如此):

    UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

    该手册解释了如何在 Typographical and Syntax Conventions 下解释此语法。 ,但就我们的目的而言,认识到以下内容就足够了: 方括号中包含的子句 []是可选的;竖条|指出替代方案;和省略号 ...表示为简洁起见省略,或者可以重复前面的条款。

    我们已经知道解析器在 WHERE 之前相信我们命令中的所有内容都没有问题。关键字,或者换句话说,直到并包括表引用。查看语法,我们看到 table_reference 后面必须跟 SET关键字:而在我们的命令中,它实际上跟随着 WHERE关键字。这解释了为什么解析器报告在那时遇到了问题。

  • 预订须知

    当然,这只是一个简单的例子。但是,通过遵循上面概述的两个步骤(即,准确地观察解析器在命令中发现违反语法的位置,并与手册中对该点预期内容的描述进行比较),几乎可以轻松识别每个语法错误。

    我说“几乎所有”,因为有一小部分问题不太容易发现——这就是解析器认为遇到的语言元素意味着一件事而你打算它意味着另一件事的地方。以下面的例子为例:

    UPDATE my_table SET where='foo'

    同样,解析器不希望遇到 WHERE在这一点上,因此会引发类似的语法错误——但你并没有打算这样做 where成为 SQL 关键字:您本来打算用它来标识要更新的列!但是,如 Schema Object Names 下所述:

    If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it. (Exception: A reserved word that follows a period in a qualified name must be an identifier, so it need not be quoted.) Reserved words are listed at Section 9.3, “Keywords and Reserved Words”.

    [ deletia ]

    The identifier quote character is the backtick (“`”):

    mysql> SELECT * FROM `select` WHERE `select`.id > 100;

    If the ANSI_QUOTES SQL mode is enabled, it is also permissible to quote identifiers within double quotation marks:

    mysql> CREATE TABLE "test" (col INT);
    ERROR 1064: You have an error in your SQL syntax...
    mysql> SET sql_mode='ANSI_QUOTES';
    mysql> CREATE TABLE "test" (col INT);
    Query OK, 0 rows affected (0.00 sec)

    关于mysql - 如何修复 MySQL 错误 #1064?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23515347/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com