【问题标题】:Can I cancel an INSERT statement if one of the fields is duplicate如果其中一个字段重复,我可以取消 INSERT 语句吗
【发布时间】:2022-11-18 17:15:27
【问题描述】:

想象我有这两个 INSERT 语句,第一个是昨天,第二个是今天:

INSERT INTO table(id, field1, field2, field3) VALUES (1, "John", "Doe", "12345")

INSERT INTO table(id, field1, field2, field3) VALUES (1, "Mary", "May", "12345")

如果“field3”上的任何记录中已经有相等的值,有没有办法让这个 INSERT 语句不插入记录?这意味着不会插入第二条记录。

我已经搜索过这个但只发现他们使用主键作为比较的情况。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

你可以使用独特的

ALTER TABLE table ADD UNIQUE (field3);

UNIQUE 约束确保列中的所有值都不同。

UNIQUE 和 PRIMARY KEY 约束都为一列或一组列的唯一性提供了保证。

PRIMARY KEY 约束自动具有 UNIQUE 约束。

【讨论】:

    【解决方案2】:

    您可以使用带有 NOT EXISTS 的 INSERT 来实现此目的 例如:

    INSERT INTO table (id, field1, field2, field3)
    SELECT * FROM (SELECT 1  as id, 'John' as field1, 'Doe' as field2, '12345' as field3) AS tmp
    WHERE NOT EXISTS (
        SELECT id FROM table WHERE field3 = '12345'
    );
    
    INSERT INTO table (id, field1, field2, field3)
    SELECT * FROM (SELECT 1  as id, 'Mary' as field1, 'May' as field2, '12345' as field3) AS tmp
    WHERE NOT EXISTS (
        SELECT id FROM table WHERE field3 = '12345'
    );
    

    【讨论】:

    • 代码不满足“如果“field3”上的任何记录中已经存在相等值则不插入记录”的要求
    • @P.Salmon 无论您想匹配什么字段,只需添加 where 子句,如 SELECT id FROM table WHERE field3 = '1235'
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2023-01-19
    • 2022-11-02
    • 2020-05-24
    • 2021-10-30
    • 1970-01-01
    • 2017-09-17
    • 2021-09-10
    相关资源
    最近更新 更多