Php 自动递增5个数字关闭?

Php 自动递增5个数字关闭?,php,database,Php,Database,我正在为一个项目使用一个数据库,在这个项目中我插入了一些东西,并且我有一个自动增量。但是,自动递增ID随机开始计数错误 例如,表中的最后一个ID为227。当我插入另一行时,它应该自动将其分配为228,但它会跳到232。如何解决此问题?自动递增并不意味着使用表中下一个最高的数字 自动递增数字不连续的原因有几个 自动增量步长不能为1 前面的行可能已被删除 插入表中的事务可能已回滚 记录可能已更新自动增量列 自动增量开始索引可能已被DDL修改更改 然而,可能还有其他一些情况会导致这种情况 要回答“我如

我正在为一个项目使用一个数据库,在这个项目中我插入了一些东西,并且我有一个自动增量。但是,自动递增ID随机开始计数错误


例如,表中的最后一个ID为227。当我插入另一行时,它应该自动将其分配为228,但它会跳到232。如何解决此问题?

自动递增并不意味着使用表中下一个最高的数字

自动递增数字不连续的原因有几个

  • 自动增量步长不能为1
  • 前面的行可能已被删除
  • 插入表中的事务可能已回滚
  • 记录可能已更新自动增量列
  • 自动增量开始索引可能已被DDL修改更改
  • 然而,可能还有其他一些情况会导致这种情况


    要回答“我如何解决这个问题?”,不用麻烦了,ID应该是唯一的,其他什么都没有,让ID连续通常没什么用处(除非你在分页时假设它们是连续的,这是一个错误的假设)。

    自动递增并不意味着使用表中下一个最高的数字

    自动递增数字不连续的原因有几个

  • 自动增量步长不能为1
  • 前面的行可能已被删除
  • 插入表中的事务可能已回滚
  • 记录可能已更新自动增量列
  • 自动增量开始索引可能已被DDL修改更改
  • 然而,可能还有其他一些情况会导致这种情况


    要回答“如何解决此问题?”,不用麻烦了,ID应该是唯一的,其他什么都没有,让ID连续通常没有多大用处(除非您在进行分页时假设它们是连续的,这是一个错误的假设)。

    DB服务器可以提前收集自动增量编号。DB有时会得到5(或10或100),并用下一个+5(或10或100)更新下一个要分配的数字的长期存储,而不是只得到要求的数字。下一次分配下一个时,它会将其存储在内存中,速度会快得多,特别是因为它不必存储下一个来分配给磁盘

    时间表:

    • 询问下一个号码
    • 内存中没有一个,因此:
      • 转到磁盘以获取下一个(称为a)
      • 使用+100更新磁盘
      • 给询问者打电话
      • 将+1存储在内存中,作为下一个要发出的值
    • 询问下一个号码
    • 将其设为+1,并将+2存储在内存中
    ……等等

    但是,如果DB服务器在给出所有数字之前就停止了,那么当它重新启动时,它将查找下一个数字,并找到+100,这就是差距。自动编号通常保证以不断增加的值的形式给出,并且应该始终是唯一的(但要注意当达到最大值时会发生什么)。它们通常是连续的,但并不总是连续的


    (Oracle对序列也这样做。我使用它已经有一段时间了,但是对于序列,您可以指定缓存大小。保证顺序分配的唯一方法是缓存大小为零,这会更慢。)

    数据库服务器可以提前收集自动增量编号。DB有时会得到5(或10或100),并用下一个+5(或10或100)更新下一个要分配的数字的长期存储,而不是只得到要求的数字。下一次分配下一个时,它会将其存储在内存中,速度会快得多,特别是因为它不必存储下一个来分配给磁盘

    时间表:

    • 询问下一个号码
    • 内存中没有一个,因此:
      • 转到磁盘以获取下一个(称为a)
      • 使用+100更新磁盘
      • 给询问者打电话
      • 将+1存储在内存中,作为下一个要发出的值
    • 询问下一个号码
    • 将其设为+1,并将+2存储在内存中
    ……等等

    但是,如果DB服务器在给出所有数字之前就停止了,那么当它重新启动时,它将查找下一个数字,并找到+100,这就是差距。自动编号通常保证以不断增加的值的形式给出,并且应该始终是唯一的(但要注意当达到最大值时会发生什么)。它们通常是连续的,但并不总是连续的


    (Oracle对序列也这样做。我使用它已经有一段时间了,但是对于序列,您可以指定缓存大小。保证顺序分配的唯一方法是缓存大小为零,这会更慢。)

    除非您删除了第228行到第231行(或尝试插入它们,但由于约束、触发器或其他回滚而失败)
    ALTER TABLE TABLE\u name AUTO\u INCREMENT=1
    在phpmyadmin上尝试此操作,继续您的表、选项卡操作,并查看AUTO\u INCREMENT value。此外,您确实需要指定您正在使用的数据库类型。MySQL、SQL Server、PostgreSQL?每个数据库都有不同的命令。除非您删除了第228行到第231行(或尝试插入它们,但由于约束、触发器或其他回滚而失败)
    ALTER TABLE TABLE\u name AUTO\u INCREMENT=1
    在phpmyadmin上尝试此操作,继续您的表、选项卡操作,并查看AUTO\u INCREMENT value。此外,您确实需要指定正在使用的数据库类型。MySQL?SQL Server?PostgreSQL?每个数据库都有不同的命令。