有没有办法确定一个表(一个非常大的表)是否具有连续/连续的自动增量主键ID?是否有SQL查询方式来确定这个?假设有人从一个非常大的表中随机删除了一些行。我需要知道这已经发生了。
e.g.
table XYZ
id
1
2
3
4
table abc
1
2
4 <--- non contiguous, skipped 3
5
对数据完整性感到好奇。我想要一种SQL查询方法,以便保持简单,而不必编写PHP脚本来对数据库运行。
答案 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
如果没有间隙,则只返回表中最后一个元素的一行。如果你想要聪明,你甚至可以从结果集中消除那一行,但这应该会给你一个想法。
如果您想要更多地处理差距,这项技术特别有用。如果没有,其他人建议的计数技术就更简单了。