MySQL的' INSERT ... ON DUPLICATE KEY UPDATE主键限制

时间:2016-11-30 06:27:32

标签: mysql database

我有一个数据库表,我正在使用INSERT ... ON DUPLICATE KEY UPDATE,其中唯一检查已应用于非主键字段。

最初我没有注意到,但随着数据库的增长并且有近500k的记录,我注意到主键值太高了。

目前我在表中有507 811条记录,但现在最高的主键是:4 841 123,这比它应该的高。

引用here

  

" INSERT ... ON DUPLICATE KEY UPDATE的工作方式与REPLACE类似   当找到具有现有(重复)密钥的行时,它就是   实际上删除了(1行受影响),然后在其中创建了一个新行   放置(另外一行受影响),给出了更新/替换的错觉   一行。",

所以我应该真正使用主键字段,因为随着数据的不断增加,它最终会在一天内出现。

我知道这不是一个错误,但我真的需要更多的知识。我一直在搜索这个问题。我意识到,要么我应该保留列并删除主键并从中自动增加或增加列的大小,目前它是int(11)。

1 个答案:

答案 0 :(得分:1)

你提到的答案是完全错误的。这就是manual所说的:

  

如果指定ON DUPLICATE KEY UPDATE,则插入一行   会在UNIQUE索引或PRIMARY KEY,MySQL中导致重复值   执行旧行的更新。例如,如果列a是   声明为UNIQUE并包含值1,以下两个   陈述有类似的效果:

它清楚地表明该行已更新而未被替换。只有在使用REPLACE INTO语法(即mysql扩展名)时才会替换行。

在您的表格中实际发生的是序列中常见的差距'问题根本不是问题。当您删除表中id = 100的行时会发生这种情况。您可能期望带有新插入的新行具有id = 100但它将具有101.这在实践中从来不是问题。

int字段中可以为stored的最大值为2147483647,距离达到该限制还有很长的路要走。您可以在该表中填充大约250倍的数据。