Portál AbcLinuxu, 14. května 2025 05:30
"Nikde jsem ale nevycetl jak to provest automaticky."Možná se jen hloupě ptám, ale pokud jste 1) odvolal transakci kvůli konfliktu při zápisu nebo commitu a 2) jste autorem dotyčné aplikace, tak snad není problém naprogramovat "try again" (a případně ověřit, zda není třeba interaktivní zásah == změnila se důležitá data, která by způsobila, že transakce by již neměla smysl tak, jak ji chcete provést)? Tohle je až příliš individuální dotaz, než aby Vám na něj mohl zodpovědět kdokoli jiný, než Vy sám.
A ta otazka znela, je tento nazopr spravny? A ten poddotaz byl, jak to delate Vy ostatni?Ano. Presne podle teorie. Na tomhle neni moc co vymyslet a zadnou ameriku neobjevite. Bud zamykate a riskujete deadlocky nebo nezamykate, ale musite hlidat konzistenci (no, musite
for (i=1,10,i++) { BEGIN SET TRANSACTION SERIALIZABLE SELECT INTO ... UPDATE ... try { COMMIT } catch { continue; } break; }
UPDATE t SET c = c +/- konstanta
a pak zadne zamky nepotrebujete. Pokud nutne potrebuji data do lokalnich promennych, pak musim uz pouzit radkovy zamek
BEGIN SELECT .... FROM FOR UPDATE; .... UPDATE ... COMMIT
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.