MySQL - 在不存在的地方插入 [重复]

Posted

技术标签:

【中文标题】MySQL - 在不存在的地方插入 [重复]【英文标题】:MySQL - Insert where not exists [duplicate] 【发布时间】:2012-10-18 23:53:47 【问题描述】:

可能重复:How to ‘insert if not exists’ in mysql?

我有一些插入,我只希望它们在没有相同信息的情况下实际插入。

我只希望插入使用 WHERE NOT EXISTS 运行,有人可以帮我将它添加到我的查询中吗?

查询:

$db->Query("INSERT INTO `surfed` (site) VALUES('".$id."')");

非常感谢!

【问题讨论】:

我敢说以前有人问过这个问题。 我阅读了它们,但它不适用于我的查询。 【参考方案1】:

使用IGNORE关键字

INSERT IGNORE INTO surfed (user, site) VALUES('".$data['id']."', '".$id."')

如果您对 user-site 组合有唯一键约束,那么它通常会在重复项上生成错误并中止插入。在插入语句中使用ignore 将忽略错误并且不插入任何内容。

如果您使用 IGNORE 关键字,则在执行 INSERT 语句时发生的错误将被视为警告。 ... 使用 IGNORE,仍然没有插入该行,但不会发出错误。

查看here了解更多信息

SQLFiddle example

【讨论】:

那么通过使用您提供的代码,它只会在它不存在并且不会产生任何错误的情况下提交到数据库? 是的。如果您对user-site 组合有唯一键约束。 这似乎不起作用,我已将 INSERT 删除给用户,因为我只想提交网站。所以现在它现在看起来像: $db->Query("INSERT IGNORE INTO surfed (site) VALUES('".$id."')"); + $db->Query("INSERT IGNORE INTO surfed (site) VALUES('".$sit['id']."')");基本上很多人会查看很多不同的网站,但我只想将某个网站提交一次到网站栏。 您在site 上有唯一的密钥吗?如果是这样,那么插入应该会失败并且不会返回错误。 见this SQLFiddle【参考方案2】:

首先你的两列需要是一个组合键,然后你可以使用 juergen d 概述的INSERT IGNORE 或使用

ON DUPLICATE KEY UPDATE user=user

在此处查看类似问题: INSERT ... ON DUPLICATE KEY (do nothing)

对于只有站点栏的修改问题,确保站点栏是唯一键或主键,然后使用

$db->Query("INSERT INTO `surfed` (site) VALUES('".$id."') ON DUPLICATE KEY UPDATE site=site");

【讨论】:

您好,感谢您的回复,但我已经删除了用户栏,我只想提交网站。如果该网站已经提交,那么我不希望它再次提交。你能告诉我怎么做吗?【参考方案3】:

你应该可以使用 mysql_num_rows。如果返回值 0,则表中没有任何内容与您要插入的内容相匹配。 (不存在的地方)。 所以做一些类似“如果mysql_num_rows = 0然后插入其他什么都不做”的东西。

【讨论】:

以上是关于MySQL - 在不存在的地方插入 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 在不存在的地方插入

在不存在的地方插入值

Oracle-在不存在的地方插入select max

如果不存在,mysql插入不起作用创建重复键

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

如果不存在Mysql,则插入[重复]