如何在MySQL中處理自增ID列的碎片?


每當我們重新編號時,可能會出現問題。需要為列宣告一個唯一的ID。

在MySQL 5.6 InnoDB版本中,我們可以透過在INSERT語句中包含ID列來重用auto_increment ID,並且可以指定我們想要的任何特定值。

情況如下:

  • 每當我們刪除具有最大編號的ID時
  • 每當我們啟動和停止MySQL伺服器時
  • 每當我們插入新記錄時

使用auto_increment變數的自增ID示例。

mysql> create table UniqueAutoId
   -> (
   -> id int auto_increment,
   -> Unique(id)
   -> );
Query OK, 0 rows affected (0.45 sec)

將記錄插入表中。

mysql> insert into UniqueAutoId values();
Query OK, 1 row affected (0.13 sec)

mysql> insert into UniqueAutoId values();
Query OK, 1 row affected (0.16 sec)

mysql> insert into UniqueAutoId values();
Query OK, 1 row affected (0.07 sec)

mysql> insert into UniqueAutoId values();
Query OK, 1 row affected (0.10 sec)

mysql> insert into UniqueAutoId values();
Query OK, 1 row affected (0.10 sec)

顯示所有記錄。

mysql> select *from UniqueAutoId;

以下是輸出。

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

為了刪除記錄,我們使用了DELETE語句。在這裡,我們刪除id=5;

mysql> DELETE from UniqueAutoId where id=5;
Query OK, 1 row affected (0.14 sec)

顯示所有記錄。

mysql> select *from UniqueAutoId;

以下是輸出。

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

讓我們再次從表中刪除一條記錄。

mysql> delete from UniqueAutoId where id=2;
Query OK, 1 row affected (0.15 sec)

再次顯示錶中的記錄。

mysql> select *from UniqueAutoId;

以下是輸出。

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

以上結果導致碎片。

更新於:2019年7月30日

298 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告