我有一个关于自动递增的问题,这是我的表,我首先拥有它,它可以顺利地递增 id*
id* name
1 name1
2 name2
3 name3
4 name4
5 name5
6 name6
但是当我删除一条记录并插入一条新记录时,id从7开始。
id* name
1 name1
2 name2
3 name3
5 name5
6 name6
7 name7
这就是我想做的:
id* name
1 name1
2 name2
3 name3
4 name7
5 name5
6 name6
我想要一个解决方案,其中每个数字都被填写,所以如果我删除一行,下一个自动增量数字将是我删除的数字,而不是下一个更高的数字。
首先,这完全是fine才能有这些差距。那里没问题。只是你的强迫症迫使你认为这些数字必须遵循某种模式——但事实并非如此。
-
auto_increment
不是 PHP 功能,而是 MySQL 功能
-
auto_increment
确保每一行都有一个unique数字。它不处理连续数字
-
auto_increment
在并发环境中安全工作 - 这意味着有很多用户连接到 MySQL 并执行操作,并且所有用户都必须能够处理数据库并且不能获得相同的 id 来识别行。这是通过一个相当复杂的过程完成的,这就是为什么auto_increment
收益率差距
-
auto_increment
被使用InnoDB
用于磁盘上记录的物理组织 - 它使用以下功能auto_increment
并且那个生成的数字比前一个大(这就是它的作用,比前一个大,而不是连续的)。使用它,构建 B 树并将记录按顺序写入硬盘驱动器。篡改auto_increment
makes InnoDB
重新平衡树。这意味着如果你搞乱了它,它会遍历记录并重新创建索引 - 这是你不想要的。曾经
当你想一想时,你会从连续数字中得到什么?其实没什么,只不过你的大脑可能会因为存在某种想象的秩序而受到更少的伤害。
对于连续数字,请使用触发器来创建它们。auto_increment
有一份工作,而且只有一份工作——生产unique数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)