如何防止 MySQL 表 AUTO_INCREMENT 字段中的空白?

sup*_*che 4 mysql

例如,我有一个用户注册表:

CREATE TABLE IF NOT EXISTS test_user (  
   user_id int(10) unsigned NOT NULL AUTO_INCREMENT,  
   user_name varchar(50) NOT NULL,  
   PRIMARY KEY (user_id),  
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

我希望user_id字段 ID 号是连续的,没有间隙。

失败的交易会占用一些ID号,有什么办法可以解决吗?

Ste*_*oke 6

在您的情况下,自动增量列将始终为新用户提供最高的可用 ID。

然而,在单个步骤中重新使用失败事务中丢失的数字是不可能的,因为主键可能已在其他需要更新的表中使用。

没有与缺少数字相关的性能问题,并且这种情况很常见。如果失败的事务比完成的事务多,这只会是一个问题,但是我建议您为主键设置更大的大小。