Pouziti autoincrementu

Michal Dobes dobes na tesnet.cz
Středa Červen 18 12:16:39 CEST 2003


Petr Vileta napsal(a):
> No tak konkretne u MySQL to delam takhle:
> LOCK TABLE moje_tabulka WRITE, jina_tabulka WRITE;
> SELECT MAX(nejake_ciselne_pole)+1 FROM moje_tabulka;
> ...
> INSERT INTO moje_tabulka SET nejake_hodnoty;
> INSERT INTO jina_tabulka SET nejake_hodnoty;
> UNLOCK TABLES;
> Tim mam zarucene, ze behem zjistovani ID mi nikdo jiny do tablek nic
> nezapise, ale muze cist. Takze pokud jiny thread chce nacist data pro
> zobrazeni, nic u nebrani a pokud chce neco zapsat, tak proste ceka, dokud ja
> neskoncim se zapisem a neUNLOCKnu.

Sice MySQL neznam, ale mam mlhavy pocit, ze tohle nemusi dopadnout
dobre?
Pokud dve pripojeni soucasne spusti tuto sekvenci, tak se muze stat,
ze ten SELECT projde obema se stejnou hodnotou, ten o trosku rychlejsi
pak INSERTNE, druhy je pozastaven na zamku a az prvni UNLOCKNE,
tak prvni zkusi INSERT se stejnym ID, coz by melo vyvolat u nej chybu
a musi opakovat tu sekvenci (drsnaci pouziji REPLACE, aby chyba
nenastala :-)?

	Majkl




Další informace o konferenci Databases