【问题标题】:insert - where not exists插入 - 不存在的地方
【发布时间】:2011-08-01 08:02:29
【问题描述】:

如果该域名不存在记录,我想将记录插入表中。以下 SQL 应该可以实现这一点,但出现错误。

我想先更新的原因是因为我稍后会在代码中进行多次更新,并且在进行所有更新之前首先需要表中的记录。

为什么我在这个 mySQL 查询中遇到错误?

insert into domain (name) 
values ('domain.com.au') 
WHERE NOT EXISTS 
(
    select name 
    from domain 
    where name = 'domain.com.au'
);

拆分时两个查询都可以正常工作,但一起时则不行。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    CREATE UNIQUE INDEX idx_name ON domain (name)
    

    【讨论】:

    • 我想在数据库中添加一条新记录,因为我稍后要更新,它需要数据库中的一条记录来进行更新。
    • 您能否在问题中详细说明一下?如果您想在没有记录时执行 INSERT 并在有记录时执行 UPDATE,请使用 INSERT ... ON DUPLICATE KEY UPDATE。
    • 更新了我的问题——我先做更新——所以如果更新没有找到域名,我想做一个插入。我需要在代码中的其他更新之前完成此操作。
    • 是的,这就是唯一索引为您做的事情。只有在不存在具有该域名的记录时,它才会让您插入记录。
    • 好的,所以它实际上每次都会插入,但由于密钥的重复(如果有的话)而失败?
    【解决方案2】:

    您不能将WHEREINSERT 子句结合使用。请改用REPLACE INTO

    【讨论】:

      【解决方案3】:

      你遇到了什么错误?

      我的猜测是不允许在“不存在的地方”内进行选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2018-10-12
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 2015-06-16
        相关资源
        最近更新 更多