MYSQL 表中的行顺序是否固定,以便查询始终按该顺序返回它们?

发布于 2024-07-30 19:11:59 字数 348 浏览 6 评论 0原文

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

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

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

我想我可以信赖这一点。 我对吗?

I have an application which collects data into a mysql table. The table has no unique id column, so I can't reference a specific row by id.

I want to write a dump application which every day dumps the new rows added to the table to upload them elsewhere. I could do it by adding a unique id field and storing the last id dumped, but I don't want to add an id column just for that to the table.

So I thought I store the number of rows in the table at every dump and use that number as an offset next time the table is dumped (select * from table limit verylargenumber offset x). Of course, it works only if there is a guarantee new rows always inserted at the end of the table, so all new rows will be after the offset.

I assume I can rely on that. Am I right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

霓裳挽歌倾城醉 2024-08-06 19:11:59

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

No, you aren't. There is no surety as to the order in which the engine will return the rows. A table without a unique ID is generally not such a godo idea anyways. In this case, you definitely have reason enough to use one.

灯下孤影 2024-08-06 19:11:59

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

No this isn't the case. The database will move stuff around to optimize and make queries faster. You would have to add an order by clause to your query to ensure any sort of order. You should definitely consider adding a unique id to your table.

颜漓半夏 2024-08-06 19:11:59

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

假设您有 3 行:A、B、C

如果您删除 B,那么您的表本质上将类似于 A、[可用空间]、C

因此,如果您将 D 插入表中,它现在将类似于:A、D , C

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

Similar to a file system, unless the table is optimized or defragmented, deleted data will free up a "slot" where new data will be inserted. It isn't always appended to the end of the table.

So say you have 3 rows: A, B, C

If you delete B, then your table will essentially look like A, [free space], C

So if you insert D into your table, it will now look like: A, D, C

Your best bet is to use a unique auto incrementing key. This will also speed up queries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文