首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动递增的"id“列出现问题

问自动递增的"id“列出现问题
EN

Stack Overflow用户
提问于 2011-06-18 04:19:28
回答 6查看 2.1K关注 0票数 5

我的数据库表看起来像这张照片。http://prntscr.com/22z1n

最近我创建了delete.php页面。它的工作正常,但当我删除21个用户,下一个注册用户得到24个id而不是21。

是否可以将新注册的用户信息放到第一个空行?(在这种情况下,第21行)

在我的注册表中,新注册的用户可以填写现有用户的名称,并在注册后与他们成为好友。对于这种友情,我有另一个表,它将新注册用户的id与现有用户的id关联起来。

为此,我在注册过程中使用mysql_insert_id来获取新用户的id。但是在nex注册过程中删除了第21行后,mysql_insert_id给了我编号21。但存储在第24行。并放入新用户的关联表21中。我想解决这个问题

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-18 04:22:23

MySQL auto_increment列在内部维护一个数字,并将始终递增该数字,即使在删除之后也是如此。如果需要填充空格,则必须在PHP中自己处理,而不是在表定义中使用auto_increment关键字。

如果您要维护外键关系,回滚以填充空行it可能会导致各种困难,而且确实不建议这样做。

可以使用SQL语句重置auto_increment,但不建议这样做,因为这将导致重复的键错误。

代码语言:javascript
复制
-- Doing this will cause problems!
ALTER table AUTO_INCREMENT=12345;

编辑要强制执行注释中所述的外键关系,应在表定义中添加:

代码语言:javascript
复制
FOREIGN KEY (friendid) REFERENCES registration_table (id) ON DELETE SET NULL;

填写正确的表名和列名。现在,当用户从注册中删除时,他们的好友关联就会失效。如果您需要与不同的用户重新关联,则必须使用PHP处理。mysql_insert_id()不再有帮助。

如果您需要在删除后找到数据库中编号最高的id,以便与好友关联,请使用以下方法。

代码语言:javascript
复制
SELECT MAX(id) FROM registration_table;
票数 2
EN

Stack Overflow用户

发布于 2011-06-18 04:22:30

当您使用自动增量id列时,将分配给下一个条目的值不会因为删除条目而减少。这不是自动增量列的用途。数据库引擎将始终在新插入时递增该数字,而从不在删除时递减该数字。

票数 3
EN

Stack Overflow用户

发布于 2011-06-18 04:23:10

自动增量是作为表的一部分进行跟踪的序列键。删除行时不会返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6391333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档