这个问题已经被问过无数次了,但我还是很困惑。我只想
如果列中不存在值,则执行insert语句。注意,此列中的值不构成主键,因此replace
或update
方法不起作用。word_id (PK, auto-complete) | word | timestamp (autocomplete)
1--sinecure--25th March
2--demotic--3rd April
3--atavism--5th May
在将另一个单词添加到此表之前,我首先要检查它是否已不存在。
考虑到这一点,这个示例应该保持表不变。INSERT INTO word_table(word) VALUES "sinecure"
WHERE NOT EXISTS (SELECT word FROM word_table WHERE word LIKE "sinecure")
当然,这个表在这个查询之后没有变化,只是因为它抛出了一个错误。
这并不是我尝试过的唯一语法,但它是各种语法中最常提倡的语法
我看过的论坛/教程。我也尝试过各种方法,例如使用变量存储EXISTS语句生成的bool值,但都没有成功。
最佳答案
您可以使用:
INSERT INTO word_table (word)
SELECT 'sinecure'
FROM dual
WHERE NOT EXISTS (SELECT word FROM word_table WHERE word LIKE 'sinecure') ;
如果总是需要这种行为,而不是偶尔需要,那么按照其他人的建议,在
word
列中添加一个唯一的约束。然后可以使用简单的插入,如果单词重复,插入将引发错误:INSERT INTO word_table (word)
VALUES ('sinecure') ;
或忽略错误的
INSERT IGNORE
:INSERT IGNORE INTO word_table (word)
VALUES ('sinecure') ;