MySQL插入不存在/如果不存在

Posted

技术标签:

【中文标题】MySQL插入不存在/如果不存在【英文标题】:MySQL insert where not exists / if not exists 【发布时间】:2012-11-19 23:00:46 【问题描述】:

我尝试了以下查询:

INSERT INTO `surfed_site` (user, site)
VALUES ('123', '456')
WHERE NOT EXISTS (SELECT site FROM `surfed_site` WHERE site=456)

但我不断收到 mysql 错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“WHERE NOT EXISTS (SELECT site FROM surfed_site WHERE site=456)”附近使用正确的语法

我不知道我做错了什么,有人可以指导我吗?

【问题讨论】:

这能回答你的问题吗? How to 'insert if not exists' in MySQL? 【参考方案1】:

INSERT statements support two1 syntaxes: one that uses VALUES, and one that uses a query.不能组合,只有查询语法支持WHERE子句。所以:

INSERT INTO `surfed_site` (user, site)
SELECT '123', '456' FROM (SELECT 1) t
WHERE NOT EXISTS (SELECT site FROM `surfed_site` WHERE site=456)

    其实三种语法;你也可以使用SET。如果您只插入一条记录,则这条记录在功能上等同于 VALUES,但可以说更具可读性。

【讨论】:

这似乎对我不起作用,我收到错误消息 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“WHERE NOT EXISTS (SELECT site FROM surfed_site WHERE site=456)”附近使用正确的语法 @LiamGordon:哦,对不起。我已经编辑了我的答案,以便希望给出一个固定版本——未经测试。 (抱歉,如果没有其他问题,我应该表明我没有测试我发布的内容。)

以上是关于MySQL插入不存在/如果不存在的主要内容,如果未能解决你的问题,请参考以下文章

Mysql插入数据:不存在则插入,存在则跳过或更新

如果不存在,mysql插入不起作用创建重复键

MySQL INSERT插入条件判断:如果不存在则插入

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

mysql 条件插入 - 如果不存在插入

MySql 表插入,如果不存在,否则更新