Pouziti autoincrementu

[cz]Emo emo na emo-cz.net
Úterý Červen 17 09:51:26 CEST 2003


A co zkusit neco jako:

Zamknout tabulku
Select Max(id)
Insert Max_ID+1;
Odemknout tabulku

Tam by snad nemuselo dochazet k popsanemu primary key violated.

Ale nezkousel jsem to.

Emo

"Honza Pazdziora" <adelton na informatics.muni.cz> píse v diskusním príspevku
news:20030616145544.GD11854 na anxur.fi.muni.cz...
> On Mon, Jun 16, 2003 at 04:40:09PM +0200, Kouba Tomas wrote:
> >
> > Mam nekolik problemu z nich jeden co me pali je pouziti pole s tzv.
> > autoincrementem (automaticke cislovani pole). Bohuzel je tato vlastnost
a
> > jeji definice pri zakladani a update tabulky velmi zavisla na druhu
> > databaze. Nevim jaka je z toho cesta: na autoincrement se vykaslat (je
tezke
> > ho necim nahradit) nebo co?
>
> Problem neni s autoincrementem jako takovym, protoze to je standardni
> prostredek nekterych databazi na transakcne ciste generovani
> primarnich klicu, coz je fajn, rozhodne je lepsi pouzit autoincrement
> nez nejakou posloupnost typu
>
> select max(id) + 1 into newid from tabulka;
> insert into tabulka values (:newid, 'Tjada', 'Dada');
> -- oops, primary key violated, protoze totez provedla
> -- paralelne bezici transakce, no dobre, zkusime
> :newid := :newid + 1;
> insert into tabulka values (:newid, 'Tjada', 'Dada');
> -- oops, zase
> :newid := :newid + 1;
> insert into tabulka values (:newid, 'Tjada', 'Dada');
> -- hura, tentokrat se povedlo, ale priste bychom mohli cyklit
> -- jeste dlouho
>
> Cili autoincrement pouzivejte, kde to jde.
>
> Problem je v tom, ze ani u tech databazi, ktere autoincrement
> podporuji, nemate standardni zpusob, jak dostat to nove pridelene
> cislo zpet do aplikace. A samozrejme, pak jsou databazove systemy,
> ktere nemaji autoincrementy, ale maji sekvence, kde je ta logika uplne
> opracena: nejdriv ziskam nove cislo ze sekvence, pak vytvarim (nebo
> nevytvarim, stat se muze cokoli) novy zaznam v tabulce.
>
> Z toho duvodu mi prijde nejjednodussi nehrat si na stoprocentni
> prenositelnost. Ma cenu vytvorit si na to metodu, ktera ten novy
> zaznam vytvori a vrati nove pridelene id, a v te metode rozlisit (nebo
> to nejak podedit, zavisi na chuti kazdeho vyvojare), nad jakym
> systemem se aktualne bezi a provest prislusne databazove kroky.
>
> Dalsi moznost je a la XP to neresit ted, napsat to tak, aby to
> vyhovovalo aktualne pouzivane databazi a tu generalizaci provest
> az za ctyri roky, az to zacne byt potreba. Ma to tu vyhodu, ze
> pokud ten projekt zkrachuje, tak se to nebude muset delat nikdy. :-)
>
> --
> ------------------------------------------------------------------------
>  Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
>  .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
> Only self-confident people can be simple.




Další informace o konferenci Test