1

这个问题已经被问过很多次了,但我还是很困惑。如果列中尚不存在值,我要做的就是运行插入语句。请注意,此列中的值不构成主键,因此replaceorupdate方法不起作用。

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 值,但无济于事。

4

3 回答 3

2

如果我没记错的话,您不能对要更新的表进行嵌套查询。您可以做的是运行选择,如果没有得到任何结果,请插入数据。

否则,您可能已经在该word列上有一个索引。使该索引唯一,您的问题将得到解决,因为如果该词已经存在,数据库将返回错误。这个词不会是你的主键,但它实际上是一个备用(唯一)键。

于 2012-09-03T21:11:14.340 回答
2

你可以使用这个:

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') ;
于 2012-09-03T21:19:07.840 回答
0

字段词应该有一个唯一的键约束。只需创建索引,您就会拥有它。

于 2012-09-03T21:16:04.020 回答