【问题标题】:INSERT IGNORE Fails with auto_increment插入忽略失败并显示 auto_increment
【发布时间】:2018-11-14 20:30:57
【问题描述】:

我的目标是仅在不存在相同值时执行 SQL 插入。

这是我的桌子 1:

id(auto_increment)
version(string)

我的查询如下所示:

INSERT IGNORE INTO table1 (version) VALUES ('12345');

问题是忽略语句不起作用,因为每一行都不同,因为 id 列(auto_increment)。

这里有人有避免重复保存相同值的解决方案吗?

解决方案:

INSERT INTO table1 (version)
SELECT * FROM (SELECT '12345') AS tmp
WHERE NOT EXISTS (
    SELECT version FROM table1 WHERE version = '12345'
) LIMIT 1;

【问题讨论】:

    标签: php sql insert auto-increment insert-into


    【解决方案1】:

    您的问题与自动递增的列无关。

    您需要对 version 的唯一约束/索引:

    alter table table1 constraint unq_table1_version unique (version);
    

    我也不推荐 insert ignore 用于此目的。它可能会忽略其他错误。相反,请使用on duplicate key update:

    insert into table1 (version) 
        values ('12345')
        on duplicate key update version = values(version);  -- this is a no-op
    

    【讨论】:

    • 感谢您的回答!我已经找到了另一种解决问题的方法!我添加了解决方案:)
    • @letsTry420 。 . .您的解决方案不是多线程安全的。也就是说,当它们几乎同时插入时,重复项仍然可以出现在表中。让数据库确保数据完整性要好得多。
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2014-02-19
    • 2015-02-02
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多