“替换”与插入[IF]

时间:2012-02-13 20:09:53

标签: php mysql insert replace

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

我的数据库中有一张表,相当小,只有3列,但有可能增长。我有两个问题的解决方案,但不知道为什么要使用其中一个。

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

  1. 检查数据库中是否存在记录,如果不存在,则INSERT INTO数据库
  2. 使用REPLACE INTO,因为我已经有了ID。
  3. 我现在的问题是。哪一个更好用。使用2个结果中的任何一个有什么利弊。或者有更好的结果吗?

    注意,数据完全相同,因此记录不可能使用较新的值进行更新。因此REPLACE INTO将插入已存在的数据。

1 个答案:

答案 0 :(得分:10)

这里不建议使用

REPLACE INTO - 您根本不需要更换任何东西。它会DELETE后跟INSERT,并带来所有后果。例如,所有索引都必须更新,如果经常使用它,会导致不必要的工作和索引碎片。

另一方面,有ON DUPLICATE KEY UPDATE,它主要用于计数器,但是你不是用增量或任何其他值更改来更新你的行,所以你必须使用奇怪的语法,如{{1}或类似的东西。

检查数据库中是否存在记录对您来说是最佳解决方案,但是不要使用其他查询,而是让mysql为您检查并使用:

SET id=id

这样,如果您尝试插入具有重复唯一键或主键的任何行,则不会在不生成任何错误的情况下插入它。请注意可能缺少其他错误消息的副作用,但如果您确切知道插入的内容,则应该没问题。