Ne, neexistují žádné záruky. Pokud neurčíte objednávku pomocí ORDER BY
klauzule, objednávka zcela závisí na podrobnostech interní implementace. Tj. cokoliv, co je pro RDBMS engine nejpohodlnější.
V praxi řádky mohou být vráceny v původním pořadí vložení (nebo přesněji v pořadí, ve kterém řádky existují ve fyzickém úložišti), ale neměli byste na tom záviset. Pokud svou aplikaci přenesete na jinou značku RDBMS, nebo i když upgradujete na novější verzi MySQL, která může implementovat úložiště odlišně, řádky se mohou vrátit v jiném pořadí.
Poslední bod platí pro všechny RDBMS kompatibilní s SQL.
Zde je ukázka toho, co myslím pořadím, ve kterém řádky existují v úložišti, oproti pořadí, v jakém byly vytvořeny:
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 |
+----+---------+
Takže teď máme šest řádků. Úložiště v tomto bodě obsahuje mezeru mezi řádky 3 a 8, která zůstala po vymazání prostředních řádků. Odstraněním řádků nedojde k defragmentaci těchto mezer.
-- 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 |
+----+---------+
Všimněte si, jak MySQL znovu použilo prostory otevřené smazáním řádků, než přidá nové řádky na konec tabulky. Všimněte si také, že řádky 11 až 14 byly vloženy do těchto prostorů v opačném pořadí a vyplňovaly se od konce dozadu.
Proto pořadí, ve kterém jsou řádky uloženy, není přesně pořadí, ve kterém byly vloženy.
AKTUALIZACE:Tato demonstrace, kterou jsem napsal v roce 2009, byla pro MyISAM. InnoDB vrací řádky v indexovém pořadí, pokud nepoužijete ORDER BY. To je další důkaz bodu na začátku odpovědi, že výchozí pořadí závisí na implementaci. Použití jiného úložiště znamená jinou implementaci.