Mysql SQL";在不存在的地方插入“;语法错误

Mysql SQL";在不存在的地方插入“;语法错误,mysql,sql,node.js,Mysql,Sql,Node.js,我有一个愚蠢的问题,MySQL服务器对这个命令有问题: INSERT INTO ingridients (title,text) VALUES(?,`MISSING INFO`) WHERE NOT EXISTS (SELECT id FROM ingridients WHERE title=?); 我收到以下错误: Error: You have an error in your SQL syntax; check the manual that corresponds to your

我有一个愚蠢的问题,MySQL服务器对这个命令有问题:

INSERT INTO ingridients (title,text) 
VALUES(?,`MISSING INFO`) 
WHERE NOT EXISTS 
(SELECT id FROM ingridients WHERE title=?);
我收到以下错误:

Error: 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 NOT EXISTS (SELECT id FROM ingridients WHERE title=?)' at line 1

我实际上并不经常使用SQL,所以我找不到解决这个问题的方法。有人能帮忙吗?

你可以这样做:

INSERT INTO ingridients (title,text) 
select ?,`MISSING INFO`
FROM ingridients
WHERE NOT EXISTS 
(SELECT id FROM ingridients WHERE title=?);

使用子查询检查是否存在:

INSERT INTO ingredients (title, text) 
    SELECT x.title, x.text
    FROM (SELECT ? as title, 'MISSING INFO' as text) x
    WHERE NOT EXISTS (SELECT 1 FROM ingredients i WHERE i.title = x.title);
实际上,如果您不想重复标题,正确的方法是让数据库使用唯一索引或约束验证数据完整性:

create unique index unq_ingredients_title on title(ingredients);

insert into ingredients (title, txt)
    values (?, 'MISSING INFO')
    on duplicate key update title = values(title);

INSERT通常不支持WHERE子句(尽管MySQL无论如何都不是典型的)。您是否尝试过检查与您的MySQL版本相对应的手册,看看它是否确实有效?您没有包含有关您正在使用的MySQL版本的信息,因此我无法提供特定链接,但您最喜欢的搜索引擎将能够使用MySQL文档作为搜索短语。如果您使用
WHERE title=?
您不应该改为
更新
吗?@tcadidot0:WHERE note EXISTS,表示
UPDATE
不适用。您不能
更新不存在的行。看来我使用的是8.0版,正在阅读INSERT的参考手册。我似乎找不到它后面有WHERE子句,所以我想您是对的,这不应该起作用。这又给我留下了一个问题,那就是只有当一张唱片不在的时候才插入它。嗯,这有点奇怪。如果是,则意味着只通过从插入中排除
id
,将
插入两列值。这意味着价值观将是;假设表中有
id、title、text
列,那么插入的内容将是
NULL,?缺少多少行的信息?