Toon posts:

[MySQL] auto_increment

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik vroeg me af of de functie autoincrement altijd 1 optelt bij het hoogste id,
als er ids vrijkomen die zich chronologisch eerder voordoen dan het laatste id, gaat mysql dan soms ook een eerdere id toewijzen?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

mysql houdt een tellertje bij en verhoogd die bij elk nieuw record, maar verlaagd deze niet als er een entry verwijderd wordt.

Let wel op, als je handmatig een hogere waarde in je autoincrementveld invult zet mysql de volgende autoincrement waarde op die hogere waarde +1

[ Voor 38% gewijzigd door ACM op 13-06-2003 15:18 ]


Verwijderd

Topicstarter
ok,
maar als er records verwijder zijn ik ik zoek dan het hoogste id dan zal ik toch het laatst toegevoegde record vinden?
want ik laat alles bepalen door de auto_increment en geef nooit zelf een waarde in voor het id

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 20-08 15:43
Dan vindt hij altijd het laatst toegevoegde record. :).

Skat! Skat! Skat!


  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 21-08 13:52
Vlak na een laatste insert kan je iig dit doen om laatst geinserte ID te krijgen van een autoincrement:
code:
1
SELECT LAST_INSERT_ID();


En je kan ook de eerst volgende insert verkrijgen via de table status:
code:
1
SHOW TABLE STATUS

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

MySql heeft de gewoonte om steeds een hogere ID te geven, maar garandeert het niet.
In praktijk gaat MySql 3.x foutmeldingen geven als 'ie aan het eind van zijn ID-bereik komt.

Het getuigt echter van ongelofelijk slecht programmeerwerk als je op dit gedrag vertrouwt, aangezien het wellicht anders is in latere versies van MySql.

Localhost, sweet localhost


Verwijderd

Topicstarter
idd
misschien toch beter zelf een veldje bijhouden om de volgorde bij te houden

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Waarom wil je die volgorde bijhouden waarop records gecreeërd zijn?

Als je het dan toch echt wilt doen, dan zorg je beter voor een datetime column waarin je bijhoudt op welk tijdstip een record aangemaakt is.

https://fgheysels.github.io/


  • Johnny
  • Registratie: December 2001
  • Laatst online: 21:11

Johnny

ondergewaardeerde internetguru

kvdveer schreef op 13 juni 2003 @ 17:33:
MySql heeft de gewoonte om steeds een hogere ID te geven, maar garandeert het niet.
In praktijk gaat MySql 3.x foutmeldingen geven als 'ie aan het eind van zijn ID-bereik komt.

Het getuigt echter van ongelofelijk slecht programmeerwerk als je op dit gedrag vertrouwt, aangezien het wellicht anders is in latere versies van MySql.
Waar ligt het maximum dan? Ik geef zo'n veld altijd een INT(11) UNSIGNED, dat gaat tot 18446744073709551615, ik ben nog nooit tegen het einde aangelopen.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Johnny schreef op 13 June 2003 @ 21:06:
[...]


Waar ligt het maximum dan? Ik geef zo'n veld altijd een INT(11) UNSIGNED, dat gaat tot 18446744073709551615, ik ben nog nooit tegen het einde aangelopen.
van tinyint ligt de limiet op 128, en die heb ik al wel eens gehaald.
Als jij een script in elkaar wilt prutsen dat vertrouwt op dit gedrag - ga je gang. Ik ben in dat geval blij dat ik geen collega van je ben. Misschien gaat MySql in versie 4.5 wel over naar willekeurig gekozen keys omdat dat efficienter is en veiliger of iets dergelijks. Jouw script werkt dan om de een of andere manier niet meer. Zeker als het script wat groter is is het een ramp om het probleem te localiseren en op te lossen.
Over het algemeen is het dom/onverstandig/onproffesioneel om te vertrouwen op ongedocumenteerd gedrag.

Localhost, sweet localhost


  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 21-08 13:52
kvdveer schreef op 13 June 2003 @ 21:22:
van tinyint ligt de limiet op 128, en die heb ik al wel eens gehaald.
Als jij een script in elkaar wilt prutsen dat vertrouwt op dit gedrag - ga je gang. Ik ben in dat geval blij dat ik geen collega van je ben. Misschien gaat MySql in versie 4.5 wel over naar willekeurig gekozen keys omdat dat efficienter is en veiliger of iets dergelijks. Jouw script werkt dan om de een of andere manier niet meer. Zeker als het script wat groter is is het een ramp om het probleem te localiseren en op te lossen.
Over het algemeen is het dom/onverstandig/onproffesioneel om te vertrouwen op ongedocumenteerd gedrag.
Het gebruik van een tinyint als autoincrement is dan ook gewoon je eigen schuld dat je daar problemen mee krijgt: er staat duidelijk in de documentatie dat een signed tinyint als maximum +127 heeft. MySQL weigert dan nieuwe records te inserten en je krijgt dus prima foutafhandeling terug. Lijkt me duidelijk dat je dus in je eigen code altijd moet afvangen of een record al geinsert is voordat je de volgende stap doet. Doe je dat niet is het ook gewoon je eigen schuld.

En waarom is auto increment opeens ongedocumenteerd gedrag? Dit lijkt me toch duidelijk genoeg bij de user-comments.

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Banpei schreef op 14 June 2003 @ 09:27:
[...]

En waarom is auto increment opeens ongedocumenteerd gedrag? Dit lijkt me toch duidelijk genoeg bij de user-comments.
Usercomments zijn geen documentatie, net als GOT dat niet is.
In de documentatie staat niet dat auto_increment altijd een hogere ID oplevert dan de vorige keer. Als je script hierop vertrouwt, kun je bij toekomstige versies bedrogen uitkomen.
De kans dat het in toekomstige versies verandert is vrij klein, maar wel aanwezig. Het getuigt van slecht programmeren als je de key gebruikt om op te sorteren of iets dergelijks.

Localhost, sweet localhost

Pagina: 1