我有一个网页表,主键作为 URL 的哈希值,还有一个 auto_increment ID 列,它也是一个唯一键。
我有点困惑的是为什么连续插入不会将 ID 字段增加 1。当我第一次创建表并执行一次插入时,第一个 id 是 1。第二次插入生成的 id 为 5,并且第三个是8。
我在表上有一个触发器,它在插入时计算网页 URL 的哈希值。不确定这是否相关。
有间隙不是问题,但我想了解为什么连续插入不会生成步长为 1 的 ID。
thanks!
关于为什么会发生这种情况的几个建议:
See 自动增量增量 http://dev.mysql.com/doc/refman/5.1/en/replication-options-master.html#sysvar_auto_increment_increment。这控制在 INSERT 期间每次请求新值时的增量。
另外,如果您在 MySQL 5.1 中使用 InnoDB 表,它们优化自动增量分配 http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html以便它锁定表的持续时间较短。这对于并发性很有好处,但如果行的 INSERT 与另一个约束(例如辅助 UNIQUE 列或外键)冲突,它也可能“丢失”自动增量值。在这些情况下,分配的 auto-inc 值不会被推回到队列中,因为我们假设另一个并发线程可能已经分配了下一个 auto-inc 值。
当然,也会发生回滚,在这种情况下,可能会分配自动增量值,但会被丢弃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)