php - "REPLACE INTO"与 INSERT [IF]

标签 php mysql insert replace

好吧,我有一个问题,不是真正的问题。

我的数据库中有一个表,相当小,只有 3 列,但有增长的潜力。我的问题有两种解决方案,但不确定为什么要使用其中一种。

我有一段数据,它可能已经存在也可能不存在于数据库中。解决这个问题的两种方法。我有唯一的ID,所以很容易检查。

  1. 检查记录是否存在于数据库中,如果不存在,则INSERT INTO数据库
  2. 使用 REPLACE INTO,因为我已经有了 ID。

我现在的问题是。哪个更好用。使用这两个结果中的任何一个的优缺点是什么。还是有更好的结果?

请注意,数据完全相同,因此记录不可能更新为更新的值。因此 REPLACE INTO 将插入已经存在的数据。

最佳答案

REPLACE INTO 不推荐在这里 - 你真的不需要替换任何东西。它先执行 DELETE,然后执行 INSERT,并产生所有后果。例如,所有索引都必须更新,如果您经常使用它,这会导致不必要的工作和索引碎片。

另一方面,ON DUPLICATE KEY UPDATE,主要用于计数器,但您不会使用增量或任何其他值更改来更新行,因此您将不得不使用 weird像 SET id=id 或类似的语法。

检查记录是否存在于数据库中对你来说是最好的解决方案,但不要使用另一个查询让 mysql 为你检查并使用:

`INSERT IGNORE INTO ...`

这样,如果您尝试插入任何具有重复的唯一键或主键的行,它就不会被插入而不会产生任何错误。请注意可能遗漏其他错误消息的副作用,但如果您确切知道插入的内容应该没问题。

关于php - "REPLACE INTO"与 INSERT [IF],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267294/

相关文章:

php - 一般错误 : could not call class constructor'

mysql - 在MySQL中的一个查询中计算一个表的所有类别总数的有效方法?

javascript - HTML 在插入网页时显示为纯文本

sql - 是否有从结果集构建插入语句的 Oracle SQL 工具?

php - 车辆财务计算php

php - 无法使用 GET 访问 PHP 站点

mysql - 来自子查询的两列(mysql)

php - 如何解决与使用 php 将条目插入 mysql 相关的问题?

javascript - 在 PHP 代码中调用 HTML 代码

MYSQL双条件计数