仅在记录不存在时插入记录

时间:2013-11-22 23:01:13

标签: mysql sql

我需要创建一个插入一些记录的查询,记录必须是唯一的。如果它存在我需要记录的ID否则如果它不存在我想插入它并获得新的ID。我写了那个查询,但它不起作用。

SELECT id FROM tags WHERE slug = 'category_x'
WHERE NO EXISTS (INSERT INTO tags('name', 'slug') VALUES('Category X','category_x'));

3 个答案:

答案 0 :(得分:2)

它被称为UPSERT(即UPdate或inSERT)。

INSERT INTO tags
('name', 'slug')
VALUES('Category X','category_x')
ON DUPLICATE KEY UPDATE
'slug' = 'category_x'

MySql参考: 13.2.5.3。 INSERT ... ON DUPLICATE KEY UPDATE Syntax

答案 1 :(得分:1)

尝试类似......

IF (NOT EXISTS (SELECT id FROM tags WHERE slug = 'category_x'))
BEGIN
    INSERT INTO tags('name', 'slug') VALUES('Category X','category_x');
END
ELSE 
BEGIN
    SELECT id FROM tags WHERE slug = 'category_x'
END

但是你可以离开ELSE部分并选择id,这样查询将始终返回id,而不管插入...

答案 2 :(得分:0)

MySQL很不错REPLACE。它易于使用,并且记住它的语法与INSERT相同。 在你的情况下,只需运行以下查询。

REPLACE INTO tags('name', 'slug') VALUES('Category X','category_x')

当没有唯一约束违规时,它就像INSERT一样。如果在PK或UNIQUE键上找到重复值,则其他列将使用给定值更新。它由DELETE重复记录和INSERT新记录完成。