[MYSQL] auto-incremental id's foute boel?

Pagina: 1
Acties:

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
het veiligste/beste lijkt me om je id's zelf te genereren door bv een timestamp oid te nemen,
dan weet je altijd zeker onder welke id een row wordt toegevoegd en dat het een unique is.

echter,
je kan er ook voor kiezen om gewoon je id's te laten auto-incrementen door mysql.

nou vraag ik me af in hoeverre dat fout gaat in de volgende situatie:
stel je stopt een nieuwe entry in je db maar wil tegelijker tijd ook weten wat de id daarvan is geworden.

dan kan je natuurlijk meteen na je insert statement een max(id) opvragen en dan weet je wat het hoogste/laatst toegevoegde id is en dat zal dan ook die id zijn van die row die je net hebt toegevoegd (je kan dit ook doen voordat je een nieuwe insert doet en er dan 1 bij optellen).

anyway, dit gaat goed, maar als je een systeem hebt waar vele duizende users tegelijk in die db aan het harken zijn dan kan het wel eens gebeuren dat er zoveel inserts zijn dat tegen de tijd dat je de max(id) opvraagt er alweer inserts tussen door zijn geweest en dus de id die je terug krijgt niet de id is van de row die je verwacht...snappie?

nou zou je de db kunnen locken en zo forceren dat niemand iets kan toevoegen zolang jij nog bezig bent die id te achter halen.
nadeel lijkt me dan weer dat als je dan juist op zo'n druk systeem zit de heleboel ontzettend traag word door al die locks, niet?

punt is,
de auto increment functie zit er niet voor niets in,
maar is het dan mischien een soort van vaak gemaakte fout om hem voor id's te gebruiken?

wat is de beste oplossing,
ik neem aan zelf je id's genereren, niet?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT


  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 27-03 19:32
Hier hebben ze de functie mysql_insert_id voor uitgevonden.

www.php.net/mysql_insert_id (mysql_insert_id -- Get the id generated from the previous INSERT operation )

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op zaterdag 16 februari 2002 18:57 schreef TheRookie het volgende:
mysql_insert_id :)
precies in PHP is hier standaard een functie voor. Ik denk dat de MySQL library standaard de auto_numeric waarde teruggeeft bij een update.
Bovendien gaat jouw oplossing ook niet werken wanneer je bv 2 webservers en 1 db server hebt.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Op zaterdag 16 februari 2002 18:59 schreef Orphix het volgende:
[..]
precies in PHP is hier standaard een functie voor. Ik denk dat de MySQL library standaard de auto_numeric waarde teruggeeft bij een update.
Bovendien gaat jouw oplossing ook niet werken wanneer je bv 2 webservers en 1 db server hebt.
dezelfde functie is in mysql aanwezig.

AFAIK pakt bijv. php de insert id van de vorige insert (gekoppeld aan een link identifier) dat zou dus ook met 2 webservers en 1 db werken. Want je mag ervan uitgaan dat elke webserver een eigen link identifier heeft...

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
een heel lang verhaal voor een heel kort antwoord :)
tnx,

enne bestaat dan ook wel voor java?

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

als je met java sql queries uit kan voeren ben niet thuis in java moet dit toch ook lukken ?
Pagina: 1