我有一个将数据收集到mysql表中的应用程序。该表没有唯一的id列,因此我无法通过id引用特定的行。
我想编写一个转储应用程序,它每天都会转储添加到表中的新行,以便将它们上传到别处。我可以通过添加一个唯一的id字段并存储转储的最后一个id来实现,但我不想为表添加一个id列。
所以我认为我在每个转储中存储表中的行数,并在下次转储表时使用该数字作为偏移量(select * from table limit verylargenumber offset x)。当然,它只有在保证在表的末尾插入新行时才有效,因此所有新行都将在偏移之后。
我认为我可以依靠它。我是对的吗?
答案 0 :(得分:4)
不是不是这样。数据库将移动内容以优化并更快地进行查询。您必须在查询中添加order by子句以确保任何类型的顺序。您一定要考虑在表中添加唯一ID。
答案 1 :(得分:1)
不,你不是。没有关于引擎返回行的顺序的保证。无论如何,没有唯一ID的表通常不是一个诸神之神。在这种情况下,你肯定有足够的理由使用它。
答案 2 :(得分:1)
与文件系统类似,除非对表进行优化或碎片整理,否则删除的数据将释放将插入新数据的“插槽”。它并不总是附加到表的末尾。
所以说你有3行:A,B,C
如果删除B,那么您的表格基本上看起来像A,[自由空间],C
因此,如果您在表格中插入D,它现在看起来像:A,D,C
最好的办法是使用一个独特的自动递增键。这也将加快查询速度。