MySQL ID PRIMARY KEY AUTO_INCREMENT没有按顺序排列

时间:2013-01-13 19:20:11

标签: mysql

我无法让我的数据库保持井井有条我希望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 |
+----+------------+----------+---------+----------------+-----------+------------+-----------+---------+

1 个答案:

答案 0 :(得分:2)

请注意,如果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的情况下进行排序的列没有任何可区分的内容。