我需要创建一个插入一些记录的查询,记录必须是唯一的。如果它存在我需要记录的ID否则如果它不存在我想插入它并获得新的ID。我写了那个查询,但它不起作用。
SELECT id FROM tags WHERE slug = 'category_x'
WHERE NO EXISTS (INSERT INTO tags('name', 'slug') VALUES('Category X','category_x'));
答案 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新记录完成。