如何解决MySQL语法错误1064? [重复]

问题描述 投票:0回答:1

背景

mysql --host localhost -u root -p < mysql.sql

症状

user@mysql:~/mqtt2sql$ mysql --host localhost -u root -p < mysql.sql
Enter password: 
ERROR 1064 (42000) at line 94: 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 'IF NOT EXISTS `mqtt_history_view` AS
SELECT
    h.id,
    h.ts AS 'ts',
    m.ts' at line 1

mysql.sql
摘录

可以在此处找到 sql 脚本的完整列表: https://github.com/curzon01/mqtt2sql/blob/master/mysql.sql

错误信息表明sql脚本第94行:

.sql 脚本的分叉版本返回相同的结果。

问题

诊断/排除错误的下一步是什么?希望有经验的人能够清楚地看出语法错误。谢谢你

mysql syntax syntax-error
1个回答
2
投票

我会尽力回答你的确切问题:

诊断/排除错误的下一步是什么?

查看错误中给出的上下文:

第 94 行出现错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'IF NOT EXISTS

mqtt_history_view
AS

附近使用的正确语法

该错误准确地告诉您解析器在哪里混淆了。它发现了一些以

IF NOT EXISTS...
开头的单词,但并没有预料到这些单词。这就是你的 SQL 错误的地方。

CREATE VIEW IF NOT EXISTS ...
ok ok...    ^ error starts here

下一步是查找 CREATE VIEW 语句的参考文档:https://dev.mysql.com/doc/refman/8.0/en/create-view.html

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]

语法的某些部分是可选的,用方括号表示。但请注意,

IF NOT EXISTS
没有出现在该语法的任何部分中。 MySQL 的 SQL 解析器无法识别它。

您可以使用

CREATE OR REPLACE...
这可能会实现您想要的。

专业提示: 将参考文档放在手边。根据需要经常使用它。我从 2001 年开始使用 MySQL,每当我对某些我不经常使用而无法记住的特定语法或功能有疑问时,我仍然每天都会在文档中查找几次。

© www.soinside.com 2019 - 2024. All rights reserved.