这个问题已经被问过无数次了,但我还是很困惑。我只想
如果列中不存在值,则执行insert语句。注意,此列中的值不构成主键,因此replaceupdate方法不起作用。
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') ;

10-06 05:42
查看更多