确定表是否具有连续的主ID自动递增值

时间:2011-08-26 14:52:40

标签: php mysql sql

有没有办法确定一个表(一个非常大的表)是否具有连续/连续的自动增量主键ID?是否有SQL查询方式来确定这个?假设有人从一个非常大的表中随机删除了一些行。我需要知道这已经发生了。

e.g. 
table XYZ
id
1
2
3
4

table abc
1
2
4 <--- non contiguous, skipped 3
5

对数据完整性感到好奇。我想要一种SQL查询方法,以便保持简单,而不必编写PHP脚本来对数据库运行。

3 个答案:

答案 0 :(得分:11)

您可以比较这两个值:

SELECT (MAX(ID) - MIN(ID)) + 1, -- e.g. ID 2 - ID 1 = 1 (+1) = 2 rows
       COUNT(ID)
FROM Table

如果表格仍然是连续的,它们将是相同的。

答案 1 :(得分:4)

这个怎么样:计算行数,从最高的数字中减去最低的ID,如果这两个数字匹配,则ID是连续的。

答案 2 :(得分:3)

使用自我加入

SELECT *
FROM t t1
LEFT JOIN t t2 ON t2.ID = t1.ID + 1
WHERE t2.ID IS NULL

如果没有间隙,则只返回表中最后一个元素的一行。如果你想要聪明,你甚至可以从结果集中消除那一行,但这应该会给你一个想法。

如果您想要更多地处理差距,这项技术特别有用。如果没有,其他人建议的计数技术就更简单了。

相关问题