MySQL 如何处理自增ID列的片段化
每当我们重新编号时,可能会出现问题。有必要为列声明唯一的ID。
在MySQL 5.6 InnoDB版本中,我们可以通过在INSERT语句中包含ID列,并给出任何我们想要的特定值来重用自动增量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
以上结果导致了片段化。
阅读更多:MySQL 教程
极客教程