1

我有一个将数据收集到 mysql 表中的应用程序。该表没有唯一的 id 列,因此我无法通过 id 引用特定行。

我想编写一个转储应用程序,它每天都会转储添加到表中的新行以将它们上传到其他地方。我可以通过添加一个唯一的 id 字段并存储转储的最后一个 id 来做到这一点,但我不想为此添加一个 id 列到表中。

所以我想我在每次转储时存储表中的行数,并在下次转储表时使用该数字作为偏移量(select * from table limitverylargenumber offset x)。当然,它只有在保证新行总是插入到表的末尾时才有效,因此所有新行都将在偏移量之后。

我想我可以依靠它。我对吗?

4

3 回答 3

4

不,事实并非如此。数据库将移动内容以优化并使查询更快。您必须在查询中添加 order by 子句以确保任何排序。你绝对应该考虑为你的表添加一个唯一的 id。

于 2009-08-11T16:13:56.270 回答
1

不,你不是。引擎返回行的顺序无法确定。无论如何,没有唯一 ID 的表通常不是一个好主意。在这种情况下,您绝对有足够的理由使用一个。

于 2009-08-11T16:15:22.820 回答
1

与文件系统类似,除非对表进行优化或碎片整理,否则删除的数据将腾出一个“槽”来插入新数据。它并不总是附加到表的末尾。

所以说你有3行:A,B,C

如果你删除 B,那么你的表基本上看起来像 A、[可用空间]、C

因此,如果您将 D 插入表中,它现在看起来像:A、D、C

您最好的选择是使用唯一的自动递增键。这也将加快查询速度。

于 2009-08-11T16:18:39.473 回答