我正在尝试在数据库中插入一行,同时避免重复:
INSERT INTO signature_categories
(category)
SELECT ( 'test' )
FROM signature_categories
WHERE NOT EXISTS (SELECT category
FROM signature_categories
WHERE category = 'test')
为什么在这里两次插入记录“ test”?
答案 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);