Posted By: snake (keeping on the sunny side) on 'CZdatabases'
Title:     Re: Paralelni system
Date:      Wed Oct 31 09:03:50 2001

> 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.

Search the boards