Toon posts:

[MYSQL] is Autonummering een goed idee ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik (MYSQ/PHP-ontwikkelaar) sprak een collega programmeur (Delphi-ontwikkelaar) omdat ik autonummering binnen MYSQL wilde resetten. Ik merkte dat mijn EMS MySQL manager dit niet kon, en na een search kwam ik erachter dat dit wel kan in PHPMyAdmin.

Nu kwamen we op het onderwerp "hoe werkbaar en functioneel is autoincrement"..
Zijn er hier ook mensen die de autoincrement niet gebruiken en zelf de laatste id verhogen met 1 en deze inserten ??

Kan het zijn dat de autoincrement ook meer fout-onderhevig is bij het inserten ?

(stel, er willen 2 personen gelijktijdig een insert doen waarna je de id gebruikt voor een volgende insert id)

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 22-05 16:14

--MeAngry--

aka Qonstrukt

Verwijderd schreef op 25 augustus 2004 @ 11:42:
Ik (MYSQ/PHP-ontwikkelaar) sprak een collega programmeur (Delphi-ontwikkelaar) omdat ik autonummering binnen MYSQL wilde resetten. Ik merkte dat mijn EMS MySQL manager dit niet kon, en na een search kwam ik erachter dat dit wel kan in PHPMyAdmin.

Nu kwamen we op het onderwerp "hoe werkbaar en functioneel is autoincrement"..
Zijn er hier ook mensen die de autoincrement niet gebruiken en zelf de laatste id verhogen met 1 en deze inserten ??

Kan het zijn dat de autoincrement ook meer fout-onderhevig is bij het inserten ?

(stel, er willen 2 personen gelijktijdig een insert doen waarna je de id gebruikt voor een volgende insert id)
Dit laatste kun je opvangen met de functie mysql_insert_id() waarmee je het laatste id op kunt vragen van de kolom met auto_increment.
Verder gebruik ik zelf altijd auto_increment omdat ik nogal vergeetachtig ben en dus wil voorkomen dat ik een optelling vergeet in m'n script. O-)

Tesla Model Y RWD (2024)


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Vraag 1: waarom wil je die autonummering resetten? Autonummering is gewoon een mechanisme zodat je unieke id's hebt in je tabel.
Het kan niet voorkomen dat 2 personen een zelfde id inserten als je auto-incr. gebruikt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ja..maar stel dat 2 personen op zo'n beetje dezelfde tijd inserten, kan het dan niet zjin dat de latest id 2x wordt gebruikt ? (kan de verkeerde id niet bij de verkeerde persoon aankomen ??

Verwijderd

Topicstarter
whoami schreef op 25 augustus 2004 @ 11:48:
Vraag 1: waarom wil je die autonummering resetten? Autonummering is gewoon een mechanisme zodat je unieke id's hebt in je tabel.
Het kan niet voorkomen dat 2 personen een zelfde id inserten als je auto-incr. gebruikt.
ik wilde deze resetten omdat hij om de 1 of andere onverklaarbare reden begon bij 456.107 ...

[ Voor 64% gewijzigd door Verwijderd op 25-08-2004 11:50 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op 25 augustus 2004 @ 11:48:
ja..maar stel dat 2 personen op zo'n beetje dezelfde tijd inserten, kan het dan niet zjin dat de latest id 2x wordt gebruikt ? (kan de verkeerde id niet bij de verkeerde persoon aankomen ??
Dit probleem tussen meerdere threads wordt wellicht beter door je DBMS zelf geregeld dan dat je het zelf makkelijk kan doen.

[ Voor 3% gewijzigd door Voutloos op 25-08-2004 11:50 ]

{signature}


Verwijderd

Topicstarter
dus er zijn geen bekende problemen bij autonummering of redenen waarom ik het niet zou moeten gebruiken..

  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 29-04 11:55
Als eerste, wat doet het er toe welk nummer je krijgt bij een autonummering? Als het goed is hoef je dat nummer zelf nooit te zien/gebruiken, en is het alleen "in je database" van belang.
Ten tweede zijn die autonummeringen er juist voor om te voorkomen dat een id 2x gebruikt wordt, en is het dus niet mogelijk om 2x hetzelfde te krijgen.

Verwijderd

Topicstarter
vond het wel zo netjes..en was ook benieuwd waar dat rare nummer vandaan kwam...

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Je hebt misschien al eens een aantal records in die tabel gezet, en ze daarna verwijderd.

https://fgheysels.github.io/


Verwijderd

Topicstarter
maar niet zovee
whoami schreef op 25 augustus 2004 @ 11:59:
Je hebt misschien al eens een aantal records in die tabel gezet, en ze daarna verwijderd.
ehm..niet zoveel B)

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Verwijderd schreef op 25 augustus 2004 @ 11:49:
[...]


ik wilde deze resetten omdat hij om de 1 of andere onverklaarbare reden begon bij 456.107 ...
Dat is waarschijnlijk het aantal records wat in de tabel zat toen de structuur opgeslagen is als een sql-commando... Oftewel dat nummer staat waarschijnlijk bij het CREATE TABLE statement wat je gebruikt.

seweso's blog


Verwijderd

Topicstarter
nu heb ik een stuk code uit een class, waar de mysql_insert_id niet werkt...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                        $query[0] = "INSERT INTO relatie (nm_titelatuur,nm_voornamen,nm_voorletters,nm_tussenvoegsel,nm_achternaam,nm_achternaam_extra,nm_meisjesnaam) VALUES ('".$_POST['nm_titelatuur']."','".$_POST['nm_voornamen']."','".$_POST['nm_voorletters']."','".$_POST['nm_tussenvoegsel']."','".$_POST['nm_achternaam']."','".$_POST['nm_achternaam_extra']."','".$_POST['nm_meisjesnaam']."')"; 
                        $query[1] = "INSERT INTO adres(rel_id,straatnaam,huisnummer,postbus,postcode,plaatsnaam,landcode) VALUES (".mysql_insert_id().",'".$_POST['adr_straatnaam']."','".$_POST['adr_huisnr']."','".$_POST['adr_postbus']."','".$_POST['adr_postcode']."','".$_POST['adr_woonplaats']."',".$_POST['adr_land'].")";
                        
                        //$query = "INSERT INTO $this->dbTable (\n".
                        //substr($fields, 0, -3) .
                        //") VALUES (\n".
                        //substr($values, 0, -3) . ")";

                    }
                } else {
                    $query = false;
                }

                // run the query
                //die($query); // <-- for debugging
                if($query)
                //echo "dude" ;
                
                    $sql = $this->query($query[0], __FILE__, __LINE__);
                    $sql = $this->query($query[1], __FILE__, __LINE__);


hoe kan het dat hier de mysql_insert_id niet werkt ?

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22-05 21:28

MBV

omdat mysql_insert_id() het laatste ingevoegde nummer geeft. Om van autonummering gebruik te maken, moet je dat veld 'niet invullen'. Dus INSERT INTO adres(straatnaam, ....) VALUES ('" .$blaat.......);
kijk anders ook even op www.php.net/mysql_insert_id

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Omdat je mysql_insert_id() uitvoert nog voor je het sql-insert command daarvoor hebt uitgevoert.

seweso's blog


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Dit zal al beter werken:
PHP:
1
2
3
4
5
6
7
$query[0] = "INSERT INTO relatie (nm_titelatuur,nm_voornamen,nm_voorletters,nm_tussenvoegsel,nm_achternaam,nm_achternaam_extra,nm_meisjesnaam) VALUES ('".$_POST['nm_titelatuur']."','".$_POST['nm_voornamen']."','".$_POST['nm_voorletters']."','".$_POST['nm_tussenvoegsel']."','".$_POST['nm_achternaam']."','".$_POST['nm_achternaam_extra']."','".$_POST['nm_meisjesnaam']."')"; 

$sql = $this->query($query[0], __FILE__, __LINE__);

$query[1] = "INSERT INTO adres(rel_id,straatnaam,huisnummer,postbus,postcode,plaatsnaam,landcode) VALUES (".mysql_insert_id().",'".$_POST['adr_straatnaam']."','".$_POST['adr_huisnr']."','".$_POST['adr_postbus']."','".$_POST['adr_postcode']."','".$_POST['adr_woonplaats']."',".$_POST['adr_land'].")";

$sql = $this->query($query[1], __FILE__, __LINE__);

seweso's blog


Verwijderd

Topicstarter
maar wat ik eigenlijk wil is die sql-statements niet verplaatsen naar de if($query) .. kan het ook op een andere manier ?

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Zover ik kan zien heb je een niet al te mooi programma-verloop, herschrijf dit en hou daarbij (en in het vervolg) rekening met de manier waarop mysql_insert_id() werkt.

seweso's blog

Pagina: 1