Tidak, tidak ada jaminan. Kecuali Anda menentukan pesanan menggunakan ORDER BY
klausa, urutannya sepenuhnya tergantung pada detail implementasi internal. Yaitu. apa pun yang paling nyaman untuk mesin RDBMS.
Dalam praktiknya, baris mungkin dikembalikan dalam urutan penyisipan aslinya (atau lebih tepatnya urutan baris yang ada dalam penyimpanan fisik), tetapi Anda tidak boleh bergantung pada ini. Jika Anda mem-port aplikasi ke merek RDBMS lain, atau bahkan jika Anda mengupgrade ke versi MySQL yang lebih baru yang mungkin mengimplementasikan penyimpanan secara berbeda, baris dapat kembali dalam urutan lain.
Poin terakhir ini berlaku untuk semua RDBMS yang sesuai dengan SQL.
Berikut adalah demonstrasi tentang apa yang saya maksud dengan urutan baris yang ada dalam penyimpanan, versus urutan pembuatannya:
CREATE TABLE foo (id SERIAL PRIMARY KEY, bar CHAR(10));
-- create rows with id 1 through 10
INSERT INTO foo (bar) VALUES
('testing'), ('testing'), ('testing'), ('testing'), ('testing'),
('testing'), ('testing'), ('testing'), ('testing'), ('testing');
DELETE FROM foo WHERE id BETWEEN 4 AND 7;
+----+---------+
| id | bar |
+----+---------+
| 1 | testing |
| 2 | testing |
| 3 | testing |
| 8 | testing |
| 9 | testing |
| 10 | testing |
+----+---------+
Jadi sekarang kita memiliki enam baris. Penyimpanan pada titik ini berisi celah antara baris 3 dan 8, yang tersisa setelah menghapus baris tengah. Menghapus baris tidak mendefrag celah ini.
-- create rows with id 11 through 20
INSERT INTO foo (bar) VALUES
('testing'), ('testing'), ('testing'), ('testing'), ('testing'),
('testing'), ('testing'), ('testing'), ('testing'), ('testing');
SELECT * FROM foo;
+----+---------+
| id | bar |
+----+---------+
| 1 | testing |
| 2 | testing |
| 3 | testing |
| 14 | testing |
| 13 | testing |
| 12 | testing |
| 11 | testing |
| 8 | testing |
| 9 | testing |
| 10 | testing |
| 15 | testing |
| 16 | testing |
| 17 | testing |
| 18 | testing |
| 19 | testing |
| 20 | testing |
+----+---------+
Perhatikan bagaimana MySQL telah menggunakan kembali ruang yang dibuka dengan menghapus baris, sebelum menambahkan baris baru ke akhir tabel. Perhatikan juga bahwa baris 11 hingga 14 disisipkan di ruang ini dalam urutan terbalik, mengisi dari ujung ke belakang.
Oleh karena itu, urutan penyimpanan baris tidak persis seperti urutan penyisipannya.
UPDATE:Demonstrasi ini saya tulis pada tahun 2009 adalah untuk MyISAM. InnoDB mengembalikan baris dalam urutan indeks kecuali Anda menggunakan ORDER BY. Ini adalah bukti lebih lanjut dari poin di awal jawaban bahwa urutan default tergantung pada implementasinya. Menggunakan mesin penyimpanan yang berbeda berarti penerapan yang berbeda.