插入-如果不存在则插入。

4
如果表中不存在具有该域名的记录,我希望将记录插入到表中。以下 SQL 语句可以实现此目的,但是会出现错误。
由于代码后面还要进行多次更新操作,因此我需要先将记录插入到我的表中,然后再执行所有更新操作。
为什么我在这个 MySQL 查询中遇到了错误?
insert into domain (name) 
values ('domain.com.au') 
WHERE NOT EXISTS 
(
    select name 
    from domain 
    where name = 'domain.com.au'
);

两个查询分开运行时都可以正常工作,但合并后就不行了。

3个回答

6

让您的数据库为您处理重复数据。在name上使用唯一索引,如果您尝试插入重复的数据,则插入操作将失败。

CREATE UNIQUE INDEX idx_name ON domain (name)

我想在数据库中添加一条新记录,因为我稍后要进行更新操作,而更新操作需要在数据库中有一条记录。 - Kieran Andrews
你能在你的问题中详细说明吗?如果想要在没有记录时进行插入操作,而在有记录时进行更新操作,则可以使用 INSERT ... ON DUPLICATE KEY UPDATE。 - Jacob
更新了我的问题 - 我首先进行更新 - 因此,如果更新未找到域名,我想要进行插入。我需要在代码中进一步的更新之前完成这个操作。 - Kieran Andrews
是的,这就是唯一索引为您做的事情。如果不存在具有该域名的记录,则它只会允许您插入记录。 - Jacob
好的,所以它实际上每次都会执行插入操作,但由于键的重复(如果有),它会失败? - Kieran Andrews

0

您不能将WHERE子句与INSERT子句结合使用。请改用REPLACE INTO


0
你遇到了什么错误?
我猜测是在“where not exists”内部的选择不被允许。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接