C'est correct et par conception :si vous ne demandez pas de tri, le serveur ne s'occupe pas du tri (le tri peut être une opération coûteuse), et il renverra les lignes dans l'ordre qu'il juge approprié. Sans ordre demandé, la façon dont les enregistrements sont triés peut même différer d'une requête à l'autre (bien que ce ne soit pas trop probable).
L'ordre n'est certainement pas aléatoire - c'est juste la manière dont les lignes sortent de la requête, et comme vous le voyez, même des modifications mineures peuvent modifier ce désordre de manière significative. Cet ordre "indéfini" dépend de l'implémentation, est imprévisible et ne doit pas être invoqué.
Si vous voulez que les éléments soient ordonnés, utilisez le ORDER BY
clause (c'est son but) - par ex.
SELECT name FROM difficulties ORDER BY name ASC;
Cela renverra toujours le résultat trié par nom, dans l'ordre croissant. Ou, si vous voulez qu'ils soient classés par clé primaire, en dernier lieu, utilisez :
SELECT name FROM difficulties ORDER BY id DESC;
Vous pouvez même trier par fonction - si vous voulez ordre aléatoire, faites ceci (avertissement :performances horribles avec des tables volumineuses) :
SELECT name FROM difficulties ORDER BY RAND();
Pour plus de détails voir ce tutoriel et la documentation .