Не, няма гаранции. Освен ако не посочите поръчка с ORDER BY
клауза, поръчката зависи изцяло от вътрешните детайли за изпълнение. т.е. каквото е най-удобно за RDBMS двигателя.
На практика редовете могат да да бъдат върнати в оригиналния им ред на вмъкване (или по-точно реда, в който редовете съществуват във физическото хранилище), но не трябва да разчитате на това. Ако пренесете приложението си към друга марка RDBMS или дори ако надстроите до по-нова версия на MySQL, която може да реализира съхранението по различен начин, редовете може да се върнат в друг ред.
Последната точка е вярна за всяка SQL-съвместима RDBMS.
Ето демонстрация на това какво имам предвид под реда, в който редовете съществуват в хранилището, спрямо реда, в който са създадени:
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 |
+----+---------+
Така че сега имаме шест реда. Съхранението в този момент съдържа празнина между редове 3 и 8, останала след изтриване на средните редове. Изтриването на редове не дефрагментира тези пропуски.
-- 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 |
+----+---------+
Забележете как MySQL е използвал повторно пространствата, отворени чрез изтриване на редове, преди да добави нови редове в края на таблицата. Също така забележете, че редове от 11 до 14 бяха вмъкнати в тези интервали в обратен ред, запълвайки от края назад.
Следователно редът, в който се съхраняват редовете, не е точно този, в който са били вмъкнати.
АКТУАЛИЗАЦИЯ:Тази демонстрация, която написах през 2009 г., беше за MyISAM. InnoDB връща редове в индексен ред, освен ако не използвате ORDER BY. Това е допълнително доказателство за точката в началото на отговора, че редът по подразбиране зависи от изпълнението. Използването на различен механизъм за съхранение означава различна реализация.