我的数据库表看起来像这张照片。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中。我想解决这个问题
发布于 2011-06-18 04:22:23
MySQL auto_increment列在内部维护一个数字,并将始终递增该数字,即使在删除之后也是如此。如果需要填充空格,则必须在PHP中自己处理,而不是在表定义中使用auto_increment关键字。
如果您要维护外键关系,回滚以填充空行it可能会导致各种困难,而且确实不建议这样做。
可以使用SQL语句重置auto_increment,但不建议这样做,因为这将导致重复的键错误。
-- Doing this will cause problems!
ALTER table AUTO_INCREMENT=12345;编辑要强制执行注释中所述的外键关系,应在表定义中添加:
FOREIGN KEY (friendid) REFERENCES registration_table (id) ON DELETE SET NULL;填写正确的表名和列名。现在,当用户从注册中删除时,他们的好友关联就会失效。如果您需要与不同的用户重新关联,则必须使用PHP处理。mysql_insert_id()不再有帮助。
如果您需要在删除后找到数据库中编号最高的id,以便与好友关联,请使用以下方法。
SELECT MAX(id) FROM registration_table;发布于 2011-06-18 04:22:30
当您使用自动增量id列时,将分配给下一个条目的值不会因为删除条目而减少。这不是自动增量列的用途。数据库引擎将始终在新插入时递增该数字,而从不在删除时递减该数字。
发布于 2011-06-18 04:23:10
自动增量是作为表的一部分进行跟踪的序列键。删除行时不会返回。
https://stackoverflow.com/questions/6391333
复制相似问题