Problem 21. *Massive Shopping - относно позицията на commit
Имам един въпрос относно позицията на commit-а и по-скоро за неговата позиция, докато писах този код: http://pastebin.com/BNgFxRx2 (ред 30)
Защо не се позволява следния синтаксис (пародия на псевдокод):
begin transaction
if (succeeded)
-- insert something
else rollback
commit
идеята е, че не коммитвам след CRUD операциите, а след като свърши if-a. След като промених кода на това (пародия на псевдокод):
begin transaction
if (succeeded)
-- insert something
commit
else rollback
То всичко проработи. Идеята ми беше, че изпълнението на кода винаги ще мине през if-a и ако не ролбекне да комитне, но не в самия if, а след като мине през него(със сигурност ще мине през тази част на кода, ако не роллбекне).
Та въпроса ми е, защо тези две логически идентични операции не са позволени.
Здравейте,
Примера на колежката ясно показва, че двете операции НЕ са еднакви логически. Също така действията на ROLLBACK и COMMIT си противоречат относно дали трябва да се запази една промяна или не (COMMIT-a запазва всички промени, правени по базата, а ROLLBACK-a напротив - връща всички промени обратно). В този смисъл не би трябвало в един случай да използваме и двете операции, защото се получава двусмислие.
Поздрави! :)