あなたが正しいです。アプリケーションからMySQLテーブルを1行ずつ読み取るときに、テーブルが常に上から下に、完全な順序で次々に読み取られると想定するのは安全ではありません。テーブルが一意のIDで並べ替えられていて、一度に1行ずつ(C ++またはその他の方法で)読み込んだ場合、毎回正確に一意のIDの順序で各行が取得されると考えるのは安全ではありません。
どのRDBMSでも、その保証はありません。誰もその仮定に頼るべきではありません。
行には、リレーショナルテーブルに固有の順序またはデフォルトの順序がありません(読み取り:持つべきではありません)。テーブル(関係)は、定義上、順序付けされていないセットまたは行です。
この印象を与えるのは、ほとんどのシステムが次のようなクエリの結果を返すように求められたときです。
SELECT columns
FROM table
ディスクからすべての行を取得し、ファイル全体を読み取ります。そのため、ファイルに保存された順序またはクラスター化されたキーの順序(MySQLのInnoDBテーブルなど)で行を(通常は)返します。したがって、毎回同じ順序で結果を返します。
FROM
句に複数のテーブルがある場合、またはWHERE
条件がある場合は、まったく異なる状況になります。テーブル全体が読み取られるのではなく、異なるインデックスが使用される可能性があるため、システムはテーブルファイルを読み取らず、インデックスファイルのみを読み取る場合があります。または、表のごく一部を読んでください。
パーティション化されたテーブルや分散データベースがある場合も、話は異なります。
結論として、ORDER BY
毎回同じ順序を保証したい場合は、クエリに参加する必要があります。