2012-01-23 48 views

回答

4
INSERT IGNORE INTO table(name) VALUES('abc') 

这会忽略值,如果它已经存在。就像pjotr说的那样,这将需要名称为唯一索引。 Source

+0

+1不错回答,我不知道IGNORE :) –

1

一种方式做到这一点是与IF测试它:

IF (select count(*) from table where name = 'abc') = 0 
THEN 
    INSERT INTO table('name') VALUES("abc") 
2

可以选择使用REPLACE(syntax,或相当于INSERT ON DUPLICATE KEY UPDATE)。如果有更多的列并且您想要更新给定密钥的其他字段,则更合适。

或IGNORE修饰符(INSERT syntax)以及'name'列的唯一索引。在这种情况下,插入操作会违反唯一索引而被忽略,但不会抛出错误。如果您不想更改任何值并只保留记录(如果它已存在),则更合适。

0

我会强制列作为UNIQUE并在代码端捕获异常,如果您对该字段有唯一性约束。否则,我倾向于同意其他答案。

0

我有一些代码...希望它会帮助你..

mysql_query("INSERT INTO authors (author) VALUES ('$rec_fic_author') 
    WHERE NOT EXISTS (SELECT * FROM authors WHERE author='$rec_fic_author')") 
or die("cannot insert author"); 

这里笔者表

authorID (pk) 
author $rec_fic_author is _POST variable 
+0

语法错误。 MySQL'INSERT ... VALUES()'不接受WHERE子句。 – pilcrow

+0

@ pilcrow- WHERE子句它不接受?请确保你给出了正确的字段名称...检查大写字母小写字母.. – Misri

+0

第一个WHERE被拒绝。 ([平台上的错误或错误识别的标识符](http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html)不会导致* syntax *错误无论如何。)你的'INSERT ... VALUES(...)WHERE ...'不是有效的MySQL查询。 – pilcrow

3

尝试的名字:

insert into table('name') 
select 'abc' 
where not exists (select 1 from table where name='abc')