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 - 在不存在的地方插入 [重复]的主要内容,如果未能解决你的问题,请参考以下文章