Posted By: Libb (Libor) on 'CZdatabases'
Title: Re: Paralelni system
Date: Wed Oct 31 10:13:50 2001
Bohuzel to je v realnem nasazeni a ja z jistych duvodu nemuzu pouzit identitu
:-(
> > Pokud napisu priblizne tohle
> > INSERT INTO table VALUES (id, x) (SELECT MAX(ID)+1 as id, x FROM table)
> > proste chci rucne identitu - hrozi mi, ze mi tam nkdo vpadne a nastane
> > kolize
> > nebo to SQL server udela "atomicky"? Pokud bych napsal
> > SELECT MAX(ID) + 1 as x FROM table
> > INSERT INTO TABLE VALUES (ID,x) %ID%,x
> > %ID% by byl vysledek predchoziho selectu, tak je to urcite spatne - to jen
> > pro ilustraci, ze nejsem uplne blbej :-)
>
> Zalezi na typu databaze a take zalezi na urovni seralizovatelnosti, jakou
> vyzadujes. Vetsina databazi (nevim o zadne, co "ne") dela pri jednom prikazu
>
> defaultne "begin" a na konci "commit", pokud nemas transakce zapnute rucne
> (pres vic SQL prikazu). Na druhou stranu nejsem presvedceny o tom, ze by
> vetsina databazi mela defaultne nastavenou tu nejvyssi serializovatelnost
> transakci, tj. nejvetsi bezpecnost, ale take nejnizsi vykon. Opak je
> pravdou... Ale nejsem db odbornik:-), at se ozvou jini...
>
> Myslim, ze nejjednodussi na zjisteni, zda to ten Tvuj server dela tak nebo
> onak bude, kdyz si spustis dve konzole, na obe napises explicitni begin,
> vykonas je v kolidujicim poradi a uvidis, jake budou vracet vysledky. Pak
> muzes pripadne v manualu koumat, jak to spravit.
>
> snake
>
> P.S. Pokud to nebyl jen priklad, ale potrebujes to nahore v realite, pak
> databaze nabizeji sekvencni cisla, ktere Ti tohle zajisti automaticky.
Libb