jeste k ciselnikum se since/until
Karel Zak
zakkr na zf.jcu.cz
Pondělí Červenec 28 08:12:37 CEST 2003
Zdar,
mam si reseni toho problemu s ciselniky kde mela byt hlidana
unikatnost v ramci nejakeho casoveho intervalu. Jak psal puvodni
tazatel vypada to, ze asi jedinym resenim je pouzit LOCK na kontrolu
te unikatnosti a nasledny insert. Myslim, ze je to spravne reseni a
nemusi znamenat uzke hrdlo. On neni lock jako lock :-) Doporucuji
precist manual a hlavne se podivat na:
LOCK <tab> IN ROW SHARE MODE;
Nevim proc mne to napadlo az ted, ale toto reseni je napriklad
pouzivane v triggerech starajicich se o referencni intefritu (FK) kde
se resi naprosto podobny problem. Tedy je treba prekontrolovat
tabulku s primarnim klicem a nasledne provest insert/update v tabulce
s FK - zaroven je nutne zajistit, aby PK nebyl odstranen dokud vse
nebude commitnute. Je to tedy dostatecne vyzkousene reseni :-) Takze:
BEGIN;
LOCK ciselnik IN ROW SHARE MODE;
SELECT 1 FROM ciselnik WHERE ..kotrola since/until.. FOR UPDATE;
INSERT INTO ciselnik ....;
COMMIT;
Ten INSERT pochopitelne pokud select nic nevrati.
Je treba pouzit jak FOR UPDATE tak ROW SHARE MODE, vice viz. docs.
Karel
--
Karel Zak <zakkr na zf.jcu.cz>
http://home.zf.jcu.cz/~zakkr/
Další informace o konferenci Test