【问题标题】:MySQL - Insert where not exists [duplicate]MySQL - 在不存在的地方插入 [重复]
【发布时间】: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."')");

非常感谢!

【问题讨论】:

  • 我敢说以前有人问过这个问题。
  • 我阅读了它们,但它不适用于我的查询。

标签: php mysql sql


【解决方案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 上有唯一的密钥吗?如果是这样,那么插入应该会失败并且不会返回错误。
【解决方案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然后插入其他什么都不做”的东西。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2013-03-15
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2019-01-11
    • 2013-12-22
    相关资源
    最近更新 更多