Loading...
kracheff avatar kracheff 11 Точки

Databases Basics - Transactions - общ въпрос

Колеги,

Бихте ли коментирали защо в базите данни е необходимо да има Rollback и Commit? Не е ли по-лесно да се направи проверката преди да се изпълни съответната DML команда?

Пример от упражненията - теглене на пари от банковата сметка. Стартираме транзакция, която ъпдейтва баланса в сметката. Проверяваме дали има наличност. Ако няма, правим rollback, ако има, commit. Не е ли по-логично да е обратния процес - първо проверяваме дали има наличност и чак тогава изпълняваме ъпдейта.

Или пък примера в презентацията - инсърт-ваме проект на служителя и чак тогава гледаме, дали не са станали 3 проектите. Ако да, rollback, else commit. Вместо например ПЪРВО да проверим служителя колко проекта има и ако не са му много, чак тогава да му инсеърт-нем нов. 

Не е ли по-лесно проверката да се прави преди манипулацията на данните? Или може би обяснението е в това, че операциите се записват в системни таблици като например deleted & inserted?

Ще съм благодарен за малко повече обяснение по темата.

Тагове:
0
Module: C# DB 14/10/2016 16:50:01
msmilkoff avatar msmilkoff 338 Точки

Транзакциите са нужни за да се гарантира атомарност, т.е. да не се изпълнява частично дадена заявка, а ако нещо не мине - цялата база да се върне към предишното състояние на консистентност. Например, при трансфер на пари от сметка А към сметка Б, се състоят две операции - теглене от А и "наливане" в Б. Ако правиш някаква предварителна проверка, може да мине при А и да не мине при Б. Това пък от своя страна, ако е обвързано с тригери например, може да резултира в промени по още 15 таблици, където не си правил изрични проверки. Един ROLLBACK гарантира, че ако нещо се обърка в една операция, то и двете няма да бъдат изпълнени, което предотвратява създаване или изгубване на пари.

   Ако си спомняш от лекцията, имаше пример, че транзакциите са подобни на checkpoint-ите в игрите, та и аз измилих една      (не толкова добра) метафора, свързана с въпроса ти laugh
Представи си следния сценарии: играш някаква игра и си на 1% кръв, след което някой те гръмне.
 Кое има повече логика?
 - да умреш и да се върнеш на последния сейв или
 - да направиш проверка: ако си на 1% кръв и някой реши да те гръмне - да не те гърми.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.