[linux] A znova Re: Multiuzivatelsky SQL server

Jozef C. Chocholacek Jozef.Chocholacek na inet.cz
Středa Říjen 13 09:18:19 CEST 1999


Miroslav Oravec wrote:
> > > - ak ja zamknem celu tabulku na zapis, je v tej dobe pre ineho
> > > pristupna  k citaniu? (Dufam, ze ano)
> A odpoved:
> > LOCK TABLES tbl_name [AS alias] {READ | [LOW_PRIORITY] WRITE}
> >             [, tbl_name {READ | [LOW_PRIORITY] WRITE} ...]
> > ...
> > UNLOCK TABLES
> Vysledok:
> Ak som to dobre pochopil:
> Pri zamknuti Lock READ je mozne tabulku citat, pri zamknuti Lock WRITE
> ten, co ju takto zamkol, ju moze citat a zapisovat, OSTATNI su v keli,
> teda nemozu nic, teda ani citat, pokym ju ten, co zamkol, zase
> neodomkne.
> A som tam, kde som bol....(v prd....).
> Alebo sa mylim? Mam asi 50 uzivatelov.(naraz).

  Nemylis. Lenze toto spravanie vyplyva z potreby datovej integrity.
Proste ak niekto prave zapisuje do tabulky (uz zacal, ale este
neskoncil), tak data v nej su v nedefinovanom stave, takze akekolvek
citanie (SELECT) by nedalo relevantny vysledok.

> Staci uz tu raz spomenuta finta:
> select pole from xxx;
> ... editace..
> lock tables xxx write ;
> update xxx set pole=nova_hodnota;
> unlock tables;

  Toto nie je bohvieco... sice to urobi to, co chces, ale vysledok je
opat nedefinovany. Pretoze co ak po tvojom SELECT ale pred LOCK niekto
stihne zmenit hodnotu prislusneho pola? T.j. konto v banke, je na nom
3000Sk, pobocka 1 pripisuje vklad 2000Sk, ale do toho vpadne pobocka 2
s vkladom 10000:

Konto:        Pobocka1:               Pobocka2:
3000SK        select -> K=3000
                                      select -> K=3000
              K = K + 2000            K = K + 10000
13000SK                               update K
5000SK        update K

// okolo update si predstav lock a unlock

  A si v keli - tych 10000Sk sa vobec nepripisalo.

> Je to dost rychle, aby to tych dalsich 49, co by chceli trebars len
> citat, nezdrzovalo ?
> Teoria je jedna vec, prax druha...

  To je pravda, ale ten priklad je z praxe. Musis robit v transakciach
a kazda transakcia, ktora moze zapisovat (t.j. obsahuje insert,update,
delete), si musi na zaciatku vyziadat WRITE LOCK.

> Vdaka za kazdu dobru radu a prakticku skusenost.

  Asi som ta nepotesil, ale dobre navrhnut databazu nie je sranda (to
urcite vies), a pre multiuzivatelske a multitaskove prostredie uz
vobec. Zalezi hodne aj na tom, co ti SQL server dovoli, takze najlepsi
postup je navrhnut databazu, navrhnut transakcie a potom podla toho,
co vsetko potrebujem, vyberat SQL server.

>                                         Miroslav Oravec
>                                           mior na psg.sk

J.Ch.
--------------------------------------------------------------------
Ing. Jozef Chocholacek              mailto:Jozef.Chocholacek na inet.cz
INET a.s., BRNO                     http://www.utcru.sk/~chochol/
++420 5 41242414 (kl.31)            ICQ UIN: 4073954
--------------------------------------------------------------------



Další informace o konferenci linux