Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:08 27.04.24 
Клубове/ Компютри и Интернет / Бази данни Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема прехвърляне на топката [re: salle]
Автор Dakota (erotoman)
Публикувано09.12.09 18:10  



Така, уверих се, че и в Oracle поведението е същото като в MySQL, т.е. несправедливо обвиних последната първоначално. Но за останалото не съм съгласен.

В отговор на:

Даваш ли си сметка, че ако SQL беше написан според твоите виждания операторът ROLLBACK нямаше да има право да съществува? А и COMMIT всъщност.




Това пък защо? Тъкмо напротив - единият (COMMIT) значи всичко, а другият (ROLLBACK) - нищо. И двата оператора имат своето място и значение за мен.

В отговор на:

Аз пък (и повечето DBA които познавам) категорично не желая СУБД да си решава какво да прави.




Именно. Нали точно за това става дума, че не желая БД зад гърба ми да прави rollback до savepoint, освен ако изрично не съм й казал да го прави. А аз не съм.

В отговор на:

Ти разглеждаш многоредовата транзакция като нещо монолитно...




А какво значи атомарността, според теб? Може ли атомът да се раздели на нещо по-малко без да бъде унищожен?

Та нали точно това е смисълът изобщо на понятието транзакция - че представлява една неделима логическа операция, която е възможно на ниско ниво да е изградена от множество физически операции върху различни обекти в БД. И тук е напълно уместен класическият пример с банковия превод.

Транзакцията (логическата операция) "банков превод" се състои от две операции върху БД - намаляване на едната сметка и увеличаване на другата:

BEGIN;

UPDATE account SET money = money - 200 WHERE id=1;

UPDATE account SET money = money + 200 WHERE id=2;

COMMIT;



Какво се случва, когато първата операция не мине по някаква причина, а втората - да? Появяват се 200 лв. от нищото.

С други думи - получава се транзакция, която не е атомарна, т.е. противоречаща на един от четирите основни принципа, на които трябва да отговаря всяка транзакция.

В отговор на:

Ако си стигнал до момента в който изпращаш COMMIT това означава, че транзакцията все още е активна т.е. сървърът не е намерил причина за неявен ROLLBACK...




А защо не е намерил причина? Какво трябва да се случи, за да намери причина? Не е ли нарушаването на ограниченията, заложени върху обектите в БД достатъчна причина за това?

По тази логика за какво са ни транзакции изобщо? Дай да решаваме на парче в приложението всичко.

Не съм съгласен. Когато използвам транзакция има основателна причина за това и тя е, че искам БД да гарантира определени неща (самата тя - базата, като подлог). Така го пише и в (което предполагам е взето от книгата на Андреас Ройтер и Тео Хардър):

"Atomicity refers to the ability of the DBMS to guarantee that either all of the tasks of a transaction are performed or none of them are...

... Atomicity states that database modifications must follow an “all or nothing” rule. Each transaction is said to be “atomic” if when one part of the transaction fails, the entire transaction fails."



А това, че самата транзакция е интерактивен процес, също е от значение, но твърдо не трябва тази интерактивност да става оправдание за нарушената атомарност. Твърдо не и по подразбиране.

Ето, например, често ми се случва да пиша SQL скриптове със стотици редове чист SQL код и да го пускам на конзолата наведнъж. И те всички са една логическа операция или т.нар. транзакция. И твърдо имам нужда от атомарност, просто защото ако някоя от инструкциите се провали, следващите след нея няма да имат никакъв смисъл. Или още по-лошо - ще имат смисъл, но той ще бъде напълно погрешен. И това не важи само за тези транзакции, в които има DDL инструкции (които прочие не се поддържат транзакционно нито от Oracle, нито от MySQL), а изобщо.

Ако пък по изключение има някаква част от транзакцията, която има незадължителен характер, то аз имплицитно ще я обособя със SAVEPOINT. Но това ще е изключение, което аз умишлено съм разрешил, а няма да е поведението по подразбиране. Просто защото нещата могат да се объркат на места, на които най-малко си очаквал. И практиката го потвърждава постоянно.

"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - Бисмарк

Редактирано от Dakota на 09.12.09 18:15.



Цялата тема
ТемаАвторПубликувано
* Транзакции в MySQL 5.0 Dakota   30.11.09 15:30
. * Re: Транзакции в MySQL 5.0 wqw   01.12.09 01:36
. * Re: Транзакции в MySQL 5.0 salle   05.12.09 01:10
. * така де Dakota   07.12.09 13:42
. * Re: така де salle   07.12.09 14:41
. * Re: така де wqw   07.12.09 15:14
. * Re: така де Dakota   07.12.09 19:07
. * Re: така де Aaron   07.12.09 20:49
. * Re: така де salle   08.12.09 11:58
. * прехвърляне на топката Dakota   09.12.09 18:10
. * Re: прехвърляне на топката Aaron   09.12.09 23:48
. * Re: прехвърляне на топката wqw   10.12.09 02:13
. * Re: прехвърляне на топката salle   10.12.09 11:49
. * Re: прехвърляне на топката Dakota   10.12.09 12:14
. * Re: прехвърляне на топката salle   10.12.09 11:42
. * Re: прехвърляне на топката Dakota   10.12.09 12:13
. * Re: прехвърляне на топката bira_more   10.12.09 20:27
. * Re: прехвърляне на топката salle   12.12.09 17:39
. * Re: прехвърляне на топката Dakota   13.12.09 01:34
. * Re: прехвърляне на топката wqw   13.12.09 01:41
. * Re: прехвърляне на топката salle   13.12.09 18:13
. * Re: прехвърляне на топката NDeu   14.12.09 09:29
. * Re: прехвърляне на топката salle   14.12.09 16:57
. * окей Dakota   15.12.09 12:45
. * Re: окей wqw   15.12.09 12:52
. * Re: окей Dakota   15.12.09 14:53
. * Re: окей wqw   16.12.09 12:15
. * Re: окей wqw   16.12.09 12:17
. * Re: окей Dakota   16.12.09 13:34
. * Re: окей wqw   16.12.09 13:39
. * Re: окей Dakota   16.12.09 15:04
. * Re: окей wqw   16.12.09 15:24
. * Re: окей Dakota   16.12.09 16:23
. * Re: Транзакции в MySQL 5.0 Aaron   06.12.09 13:02
. * Re: Транзакции в MySQL 5.0 salle   07.12.09 13:10
. * Re: Транзакции в MySQL 5.0 Aaron   07.12.09 18:42
. * Re: Транзакции в MySQL 5.0 salle   08.12.09 10:33
. * Re: Транзакции в MySQL 5.0 Aaron   08.12.09 10:51
. * Re: Транзакции в MySQL 5.0 sonic86   28.12.09 21:25
. * Re: Транзакции в MySQL 5.0 Aaron   29.12.09 09:48
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.