好吧,我有一个问题,不是真正的问题。
我的数据库中有一张表,相当小,只有3列,但有可能增长。我有两个问题的解决方案,但不知道为什么要使用其中一个。
我有一段数据,可能已经存在,也可能不存在于数据库中。解决这个问题的两种方法。我有唯一的ID,所以很容易检查。
INSERT INTO
数据库REPLACE INTO
,因为我已经有了ID。我现在的问题是。哪一个更好用。使用2个结果中的任何一个有什么利弊。或者有更好的结果吗?
注意,数据完全相同,因此记录不可能使用较新的值进行更新。因此REPLACE INTO
将插入已存在的数据。
答案 0 :(得分:10)
REPLACE INTO
- 您根本不需要更换任何东西。它会DELETE
后跟INSERT
,并带来所有后果。例如,所有索引都必须更新,如果经常使用它,会导致不必要的工作和索引碎片。
另一方面,有ON DUPLICATE KEY UPDATE
,它主要用于计数器,但是你不是用增量或任何其他值更改来更新你的行,所以你必须使用奇怪的语法,如{{1}或类似的东西。
检查数据库中是否存在记录对您来说是最佳解决方案,但是不要使用其他查询,而是让mysql为您检查并使用:
SET id=id
这样,如果您尝试插入具有重复唯一键或主键的任何行,则不会在不生成任何错误的情况下插入它。请注意可能缺少其他错误消息的副作用,但如果您确切知道插入的内容,则应该没问题。