如何处理MySQL中自动递增ID列的碎片?

每当我们重新编号时,就有可能出现问题。需要为列声明唯一的ID。

在MySQL 5.6 InnoDB版本中,我们可以通过在INSERT语句中包含ID列来重用auto_increment ID,并可以提供所需的任何特定值。

情况如下-

  • 每当我们删除编号最高的ID

  • 每当我们启动和停止MySQL服务器时

  • 每当我们插入新记录时

使用auto_increment变量的ID自动递增示例。

create table UniqueAutoId
   -> (
   -> id int auto_increment,
   -> Unique(id)
   -> );

将记录插入表中。

insert into UniqueAutoId values();

insert into UniqueAutoId values();

insert into UniqueAutoId values();

insert into UniqueAutoId values();

insert into UniqueAutoId values();

显示所有记录。

select *from UniqueAutoId;

以下是输出。

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
5 rows in set (0.00 sec)

要删除记录,我们使用了DELETE语句。在这里,我们删除id = 5;

DELETE from UniqueAutoId where id=5;

显示所有记录。

select *from UniqueAutoId;

以下是输出。

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

让我们再次从表中删除一条记录。

delete from UniqueAutoId where id=2;

再次,显示表中的记录。

select *from UniqueAutoId;

以下是输出。

+----+
| id |
+----+
|  1 |
|  3 |
|  4 |
+----+
3 rows in set (0.00 sec

以上导致碎片。