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.