INSERT INTO table('name') VALUES("abc") IF NOT EXISTS name='abc'
如果名称列中不存在abc,则插入它。我如何编写该查询?如何创建“插入如果不存在”的MySQL插入查询?
INSERT INTO table('name') VALUES("abc") IF NOT EXISTS name='abc'
如果名称列中不存在abc,则插入它。我如何编写该查询?如何创建“插入如果不存在”的MySQL插入查询?
INSERT IGNORE INTO table(name) VALUES('abc')
这会忽略值,如果它已经存在。就像pjotr说的那样,这将需要名称为唯一索引。 Source
一种方式做到这一点是与IF
测试它:
IF (select count(*) from table where name = 'abc') = 0
THEN
INSERT INTO table('name') VALUES("abc")
可以选择使用REPLACE(syntax,或相当于INSERT ON DUPLICATE KEY UPDATE)。如果有更多的列并且您想要更新给定密钥的其他字段,则更合适。
或IGNORE修饰符(INSERT syntax)以及'name'列的唯一索引。在这种情况下,插入操作会违反唯一索引而被忽略,但不会抛出错误。如果您不想更改任何值并只保留记录(如果它已存在),则更合适。
我会强制列作为UNIQUE并在代码端捕获异常,如果您对该字段有唯一性约束。否则,我倾向于同意其他答案。
我有一些代码...希望它会帮助你..
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
语法错误。 MySQL'INSERT ... VALUES()'不接受WHERE子句。 – pilcrow
@ pilcrow- WHERE子句它不接受?请确保你给出了正确的字段名称...检查大写字母小写字母.. – Misri
第一个WHERE被拒绝。 ([平台上的错误或错误识别的标识符](http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html)不会导致* syntax *错误无论如何。)你的'INSERT ... VALUES(...)WHERE ...'不是有效的MySQL查询。 – pilcrow
尝试的名字:
insert into table('name')
select 'abc'
where not exists (select 1 from table where name='abc')
+1不错回答,我不知道IGNORE :) –