SQL语句插入记录两次

时间:2019-06-03 19:07:01

标签: sql

我正在尝试在数据库中插入一行,同时避免重复:

INSERT INTO signature_categories 
            (category) 
SELECT ( 'test' ) 
FROM   signature_categories 
WHERE  NOT EXISTS (SELECT category 
                   FROM   signature_categories 
                   WHERE  category = 'test') 

为什么在这里两次插入记录“ test”?

1 个答案:

答案 0 :(得分:3)

因为您在signature_categories中有两行,但没有一行包含'test'NOT EXISTS在表格的前INSERT版上进行评估。

如果只想插入一行,则取决于数据库。

典型方法是:

INSERT INTO signature_categories (category) 
    SELECT x.category
    FROM  (SELECT 'test' as category) x 
    WHERE  NOT EXISTS (SELECT 1 
                       FROM signature_categories sc
                       WHERE sc.category = x.category
                      ) ;

更好的方法是让更新失败并让数据库强制数据完整性:

ALTER TABLE signature_categories ADD CONSTRAINT unq_signature_categories_category
    UNIQUE (category);