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

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

问题描述:

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

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

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

由于所报here

“INSERT ...对重复密钥更新的工作方式类似于在 来代替,当与现有的(重复)键的一行被发现,这是 实际删除(1行受影响的),然后一个新的行中的 到位(1个更多行受影响)创建,使更新的假象/更换 行“,

这样,我真的可以使用主键字段,因为最终它将随着数据不断增加,有一天会走出范围。

我知道这不是一个错误,但我真的需要更多的知识。我一直在寻找很多这方面的知识。我意识到,或者我应该保留列,并删除主键检查并自动增加或增加列的大小,目前它是int(11)。

那么你提到的答案显然是错误的。这就是manual说:

如果你指定ON DUPLICATE KEY UPDATE,行插入该 将导致一个唯一索引或主键的重复值时,MySQL 执行旧行的UPDATE 。例如,如果列被声明为UNIQUE 且值为1,以下两个 语句具有类似的效果:

它清楚地说,该行被更新,而不是替代。仅当您使用REPLACE INTO语法(这是一个mysql扩展名)时,才会替换一行。

表中实际发生的是常见的'序列差距'问题,这根本不是问题。这发生在删除表中有id = 100的行时。你可能会预期新的插入行有id = 100,但它会有101.这在实践中从来都不是问题。

在int字段中可以是stored的最大值是2147483647,并且距离该限制很远。您现在可以在表格中填充大约250倍的数据。