4

我无法让我的数据库保持井井有条 我希望设置为 an 的 ID 字段INT PRIMARY KEY AUTO_INCREMENT保持数字顺序。当我删除数据库中的所有条目时,问题就来了。在删除条目之前,一切都按预期顺序排列,在删除而不是按数字顺序从较小的整数开始后,它将始终按降序排列。有人可以解释是什么原因造成的。

+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+
| id | employeeID | date     | timeIn  | jobDescription | equipType | unitNumber | unitHours | timeOut |
+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+
|  1 |          2 | 01/13/13 | 1:19 pm | Test1          | Dozer     | 1D         |        98 | 1:20 pm |
|  2 |          2 | 01/13/13 | 1:20 pm | Test2          | Dozer     | 1D         |        98 | 1:20 pm |
+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+

删除所有行后:

+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+
| id | employeeID | date     | timeIn  | jobDescription | equipType | unitNumber | unitHours | timeOut |
+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+
|  4 |          2 | 01/13/13 | 1:22 pm | Test2          | Dozer     | 1D         |        98 | 1:22 pm |
|  3 |          2 | 01/13/13 | 1:22 pm | Test1          | Dozer     | 1D         |        98 | 1:22 pm |
+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+
4

1 回答 1

3

请记住,如果ORDER BY您的查询中没有子句SELECT,则顺序实际上是不确定的,您不能也不应该依赖它处于任何特定顺序。

我在这里看到的是Test2用 插入的id=4,假设您首先插入了该Test1行,那么您auto_increment的工作正常。

如果你只是做了类似的事情SELECT * FROM thistable,不要指望行被排序id ASC。添加一个ORDER BY明确的子句。

SELECT * FROM thistable ORDER BY id ASC

由于这两个新行之间的所有其他列具有相同的值,因此 MySQL 选择在没有显式的情况下排序的任何列ORDER BY都没有任何区别。

于 2013-01-13T19:24:47.330 回答