MySQL:如果行不在表中,则添加具有特定值的行

时间:2010-12-01 00:47:55

标签: mysql mysqli

我有一个表设置,其中包含一个名为test的UNIQUE列。我希望只有在test表中没有行时才会在列test中插入一行。我知道我可以执行INSERT查询,如果它已经存在会抛出一个错误(并且不会真正造成任何伤害AFAIK),但有没有办法只使用MySQL正确地执行此操作?我很确定它可以通过功能来完成,但我以前从未使用过这些功能,而且我认为这是一种更简单的方法。

感谢您的帮助,我很感激!

4 个答案:

答案 0 :(得分:4)

听起来像是INSERT IGNORE的工作:

  

如果使用IGNORE关键字,则会出错   执行INSERT时发生的情况   声明被视为警告   代替。例如,没有IGNORE,   一个复制现有的行   UNIQUE索引或PRIMARY KEY值   该表导致重复键错误   声明中止。同   IGNORE,行仍未插入,   但没有发出错误。

答案 1 :(得分:2)

这样的事情应该有效

INSERT INTO TABLE(column1,column2)
SELECT value1, value2
WHERE 1 NOT IN (SELECT 1 FROM TABLE WHERE test='test')

答案 2 :(得分:1)

您可以使用IGNORE关键字,如下所示:

INSERT IGNORE INTO table_name (test) VALUES('my_value');

来自MySQL documentation

  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

如果您想更新现有行而不是完全忽略重复更新,请查看ON DUPLICATE KEY UPDATE syntax

答案 3 :(得分:0)

INSERT IGNORE(v,b,g)价值观(1.2.3) 如果你按键(主要或唯一),你将无所事事,但你应该知道你的钥匙。 或者正如约翰所说的,带有预先包含的数据