【发布时间】:2014-07-16 12:57:56
【问题描述】:
我有一个表,其中有一行 id 这是我的主键。这是一个有约 25 万行的表。通常,id 应该是一个序号。现在我想知道,数字序列中是否缺少一个数字。
示例:该表包含ids
1, 2, 4, 6, 7, 8, 9, 10
这意味着,在从1 到10 的数字序列中,缺少数字3 和5。
如果 MySQL 查询只返回缺少的ids,会怎样?有没有办法增加一个计数器并比较 id 是否存在?
【问题讨论】:
-
当然,只需将
COUNT(*)与MAX(id)进行比较;这是假设您没有主-主复制。 -
@juergend 该表是一种 OLAP 表。所以我想知道缺少的
ids 来检查是否所有的“父项”都在被分析。 -
@Jack 不会返回丢失的
ids,但我喜欢这种方法。又好又容易! -
因此,您依靠 auto_increment 来提供参照完整性,而实际上并未使用外键,并且您依靠 auto_increment 是顺序的概念(提示:其目的不是顺序的)。 tl;dr - 根据定义,您的架构是错误的。
-
@N.B.你是对的:我的问题没有意义,因为原始项目不是连续的(因为项目可能已按原始顺序被删除)。谢谢你的提示。我已经在想为什么
COUNT(*) <> MAX(id).