Portál AbcLinuxu, 12. listopadu 2025 13:22
"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
) a dostanete se do stavu, kdy to uzivatel musi zadat znovu... Co je vyhodnejsi ale zavisi na logice vasi aplikace a neexistuje zadna obecna rada, co je lepsi!
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.