Toon posts:

[MySQL] Hoe gaat de select query om met auto id's?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel met een auto_increment veld voor de id's. Als ik, nadat ik de tabel net aangemaakt heb, een lijst met records achter elkaar toevoeg, dan krijgen deze records in de volgorde van toevoeging allemaal een id. Dit id begint dan bij 1 en loopt zo op.
Nu komt het verschijnsel: wanneer ik een nieuwe lijst records achter elkaar toevoeg (ook nadat ik alle records uit de tabel eerst verwijderd heb) dan loopt de telling gewoon door waar die gebleven was, maar dan worden die records bij een normale, kale select omgekeerd weergegeven. Ik krijg dan een lijst van id's bijvoorbeeld als volgt: 1, 2, 3, 4, 5, 9, 8, 7, 6. De laatste vier zijn dan de vier nieuwe records.
Ligt dit aan MySQL? Of gaat er bij de aansturende software iets verkeer?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Nou wil ik graag van je weten, wat de volgorde van primary keys uitmaakt :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

en als je de resultaten dan eerst sorteert?

order by id desc

of

order by id asc

afhankelijk van de gewenste volgorde.

..so be wary of any man who keeps a pig farm..


Verwijderd

Topicstarter
Dat maakt op zich helemaal niets uit. Ik doe gewoon een select gesorteerd op id. Waar het mij om gaat, is dat ik zeker wil weten of dit aan MySQL ligt en niet aan een stukje software van mijzelf die dat hele process van te inserten records uitvoert. Als dat zo is, dan maak ik dus eerst een fout (ik insert de records verkeerd) en vervolgens ga ik zelf dat verderop weer verbeteren door te sorteren, terwijl dat in eerste instantie eigenlijk niet eens nodig zou zijn. Beetje inefficient.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Als jij geen ORDER BY clausule opgeeft is er niet gedefinieerd in welke volgorde de records worden teruggegeven. De DB software doet dan gewoon wat hem het makkelijkste uitkomt. Heb je je records in een bepaalde volgorde nodig? dan altijd aangeven in welke volgorde, en niet hopen dat het wel in die volgorde eruit zal komen. Daarnaast is dat sorteren helemaal niet zo inefficient, zeker als je sorteerd op een key veld.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • sverzijl
  • Registratie: Januari 2001
  • Laatst online: 12:53
Op donderdag 25 juli 2002 14:32 schreef Heronymus het volgende:
Dat maakt op zich helemaal niets uit. Ik doe gewoon een select gesorteerd op id. Waar het mij om gaat, is dat ik zeker wil weten of dit aan MySQL ligt en niet aan een stukje software van mijzelf die dat hele process van te inserten records uitvoert. Als dat zo is, dan maak ik dus eerst een fout (ik insert de records verkeerd) en vervolgens ga ik zelf dat verderop weer verbeteren door te sorteren, terwijl dat in eerste instantie eigenlijk niet eens nodig zou zijn. Beetje inefficient.
Je mag er bij geen enkel RDBMS vanuit gaan dat de volgorde waarmee records worden opgevraagd verband houdt met de volgorde waarmee records worden geinsert. (heeft te maken met de manier van allocatie/deallocatie van records bij deletes/updates/inserts). Altijd een order by uitvoeren als je er zeker van wilt zijn dat je de opgevraagde records in een bepaalde volgorde wilt zien.

[edit] te laat :)

Verwijderd

Topicstarter
Het is gewoon vreemd, dat een normale indexering die eerst als volgt wordt geselecteerd: 1, 2, 3, 4, 5, 6
opeens bij een toevoeging van drie nieuwe records (die id 7, 8 en 9 zullen krijgen) de selectie dan als volgt wordt: 1, 2, 3, 4, 5, 6, 9, 8, 7. Dus de toevoeging wordt omgedraaid.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op donderdag 25 juli 2002 15:54 schreef Heronymus het volgende:
Het is gewoon vreemd, dat een normale indexering die eerst als volgt wordt geselecteerd: 1, 2, 3, 4, 5, 6
opeens bij een toevoeging van drie nieuwe records (die id 7, 8 en 9 zullen krijgen) de selectie dan als volgt wordt: 1, 2, 3, 4, 5, 6, 9, 8, 7. Dus de toevoeging wordt omgedraaid.
Misschien kwam er op eens een stuk geheugen vrij nadat je nr 7 erin hebt gestopt waardoor 8 en 9 ervoor komen. Weet jij veel. Ik zou me er niet zo druk over maken, zolang ze er maar inkomen. Gewoon een ORDER BY en je bent er altijd zeker van dat het werkt.

Maar vaak heb je ook geen reden om een ORDER BY op je auto_increment veld te doen, immers het dient alleen als unieke identificatie. Het heeft verder geen betekenis. Als je bijvoorbeeld op tijd van invoegen wilt sorteren moet je een timestamp toevoegen en daarop sorteren ipv op je id.

Verwijderd

Topicstarter
Dat is nog beter natuurlijk. Daar heb je helemaal gelijk in. Dan weet je zeker dat je de chronologische volgorde te pakken hebt. Maar het probleem is, dat ik een aanpassing moet maken in een ontzettend grote applicatie en ik geen zin heb om alles opnieuw te programmeren. Op de manier die jullie nu aangeven werkt het perfect. Bedankt.
Pagina: 1