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

7b7e2122e0cf92a28a5ef91956341307.png

潇湘沐

错误#1064意味着MySQL无法理解您的命令。要解决这个问题:读取错误消息。它告诉你在你的指挥下MySQL被搞糊涂了。检查你的命令。如果使用编程语言创建命令,请使用echo, console.log(),或其等效于显示整条命令这样你就能看到了。看看手册。通过与MySQL的比较预期在那个时候问题往往是显而易见的。检查保留的单词。如果错误发生在对象标识符上,请检查它不是保留字(如果是,请确保它的引号正确)。啊!#1064是什么?平均?错误消息可能看就像gobbledygook一样,但是它们(通常)信息非常丰富,并且提供了足够的细节来确定出了什么问题。通过准确地理解MySQL告诉您的内容,您可以武装自己来解决将来的任何这类问题。与许多程序一样,MySQL错误是根据类型已经发生的问题。错误#1064是语法错误。你所说的“语法”是什么?是巫术吗?虽然“语法”是许多程序员只在计算机中遇到的一个词,但实际上它是从更广泛的语言学中借用来的。它指的是句子结构:即语法规则或者,换句话说,定义什么构成有效句子在语言里。例如,下面的英语句子包含一个语法错误(因为不定冠词“a”必须总是在名词前面):此句子包含语法错误a。这和MySQL有什么关系?每当有人向计算机发出命令时,它必须做的第一件事之一就是“解析”该命令,以便理解它。“语法错误”意味着解析器无法理解询问的内容,因为它不构成语言中的有效命令:换句话说,该命令违反了编程语言的语法。.重要的是要注意的是,计算机必须理解命令,然后才能对其进行任何操作。由于语法错误,MySQL不知道后面是什么,因此放弃了。甚至在查看数据库之前因此,架构或表内容与此无关。我该怎么解决呢?显然,需要确定命令是如何违反MySQL语法的。这听起来很难理解,但是MySQL正在努力帮助我们。我们要做的就是…保留备注当然,这是一个简单的例子。然而,通过遵循上述两个步骤(即观察命令中的确切位置解析器发现语法被违反,并与手册中的当时的期望是什么?),几乎所有语法错误都可以很容易地识别出来。我说“几乎所有”,因为有一小类问题不太容易发现-解析器认为所遇到的语言元素意味着一件事,而您打算它意味着另一件事。以下列例子为例:UPDATE my_table SET where='foo'同样,解析器也不会遇到WHERE在这一点上,所以会引发一个类似的语法错误-但您并没有打算这样做。where要成为SQL关键字:您本来打算让它标识用于更新的列!然而,如下文所述模式对象名:如果标识符包含特殊字符或保留字,则必只要你提到它,就引用它。(例外:限定名中句点后面的保留字必须是标识符,因此不需要引用。)保留字列在第9.3节,“关键词和保留词”.[ deletia ]标识符引号字符是回勾符(“`”):mysql> SELECT * FROM `select` WHERE `select`.id > 100;如果ANSI_QUOTES启用SQL模式时,还允许在双引号中引用标识符: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不仅告诉我们一点儿没错其中解析器遇到语法错误,但也提出了修复它的建议。例如,请考虑以下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 1MySQL告诉我们一切看起来都很好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,所以我将转到该版本的手动条目UPDATE命令..页面上的第一件事是命令的语法(每个命令都是这样):UPDATE [LOW_PRIORITY] [IGNORE] table_reference

    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

    [WHERE where_condition]

    [ORDER BY ...]

    [LIMIT row_count]手册解释了如何在排版和句法公约,但就我们的目的而言,只要认识到:包含在方括号内的子句就足够了[和]是可选的;竖直的|指明备选方案;和省略号...表示为了简洁而省略,或者表示前面的条款可以重复。我们已经知道,解析器相信命令中的所有内容在WHERE关键字,或者换句话说,直到并包含表引用。从语法上看,我们看到table_reference必须后面跟着SET关键字:而在我们的命令中,它实际上后面是WHERE关键词。这就解释了为什么解析器报告当时遇到了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值