Що таке транзакція з базою даних?


114

Чи може хтось надати просте (але не простіше, ніж можливо) пояснення транзакції як застосованої до обчислень (навіть якщо вона скопійована з Вікіпедії)?

Відповіді:


239

Угода - це одиниця роботи, яку ви хочете вважати "цілим". Це повинно або відбутися повністю, або взагалі.

Класичний приклад - переказ грошей з одного банківського рахунку на інший. Для цього вам потрібно спочатку зняти суму з вихідного рахунку, а потім внести її на цільовий рахунок. Операція повинна пройти успішно в повному обсязі. Якщо ви зупинитесь на півдорозі, гроші будуть втрачені, і це дуже погано.

У сучасних базах даних трансакції також виконують деякі інші речі - наприклад, гарантувати, що ви не можете отримати доступ до даних, які інша людина написала на півдорозі. Але основна ідея та ж - транзакції існують для того, щоб, незалежно від того, що трапиться, дані, з якими ви працюєте, будуть у правильному стані . Вони гарантують, що НЕ буде ситуації, коли гроші знімаються з одного рахунку, але не здаються на інший.


Дякую за дуже простий приклад
Nomadme

приємного пояснення!
Yan Myo Aung

81

Транзакція - це спосіб представлення зміни держави. Операції в ідеалі мають чотири властивості, зазвичай відомі як кислота:

  • Атомний (якщо зміна здійснена, це відбувається одним махом; ніколи не можна побачити "половину зміни")
  • Послідовна (зміна може відбутися лише в тому випадку, якщо новий стан системи буде дійсним; будь-яка спроба вчинити недійсну зміну не вдасться, залишивши систему в попередньому дійсному стані)
  • Ізольована (ніхто більше не бачить жодної частини транзакції, поки вона не буде здійснена)
  • Довговічний (як тільки зміни відбулися - якщо система каже, що транзакція була здійснена, клієнту не потрібно турбуватися про "змивання" системи, щоб зміни були "прилипають")

Докладніше див. У статті Вікіпедії ACID .

Хоча це зазвичай застосовується до баз даних, це не обов'язково. (Зокрема, див. Транзакційну пам'ять програмного забезпечення .)


46

Ось просте пояснення. Вам потрібно перерахувати 100 баксів з акаунта А на рахунок B. Ви можете:

accountA -= 100;
accountB += 100;

або

accountB += 100;
accountA -= 100;

Якщо між першою та другою операцією в парі щось піде не так - у вас є проблеми - або 100 баксів зникли, або вони з'явилися з нізвідки.

Транзакція - це механізм, який дозволяє позначити групу операцій і виконати їх таким чином, що або всі вони виконують (фіксують), або стан системи буде таким, як ніби вони взагалі не почали виконуватись (відкат).

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

або переведе 100 баксів, або залишить обидва рахунки в початковому стані.


31

"Серія операцій із маніпулювання даними, які повинні або повністю завершити, або повністю вийти з ладу, залишаючи базу даних у послідовному стані"


2
Не тільки база даних. Ми можемо поширити цю концепцію на інші компоненти - наприклад, сервіс у черзі чи стан зовнішніх систем. Отже, "Серія заяв про маніпулювання даними, які повинні або повністю завершитись, або повністю вийти з ладу, залишаючи систему в послідовному стані"
Michał Chaniewski

10

Транзакція - це послідовність однієї або декількох операцій SQL, які трактуються як одиниця.

Зокрема, кожна транзакція, як видається, працює ізольовано, і, крім того, якщо система виходить з ладу, кожна транзакція або виконується в повному обсязі, або не всі.

Поняття транзакцій мотивоване двома абсолютно незалежними проблемами. Один пов'язаний з одночасним доступом до бази даних декількома клієнтами, а другий - із системою, стійкою до системних збоїв.

Транзакція підтримує те, що відомо як властивості ACID:

  • A: Атомність;
  • С: Консистенція;
  • I: Ізоляція;
  • Д: Міцність.

4

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID = A Tomicity, C onsistency, I solation, D ubility

Коли ви хочете, щоб кілька транзакційних ресурсів були задіяні в одній транзакції, вам потрібно буде використовувати щось на зразок рішення двофазної фіксації . XA досить широко підтримується.


1

Я б припустив, що визначення поняття "обробка транзакцій" було б кориснішим, оскільки воно охоплює транзакції як поняття в галузі інформатики.

З Вікіпедії:

В інформатиці обробка транзакцій - це обробка інформації, яка поділяється на окремі, неподільні операції, що називаються транзакціями. Кожна транзакція повинна бути успішною або провалюватися як повна одиниця; він не може залишатися в проміжному стані.

http://en.wikipedia.org/wiki/Transaction_processing#Implementations


1

На додаток до вищезазначених відповідей, слід зазначити, що принаймні теоретично не існує жодних обмежень щодо того, які саме ресурси залучаються до трансакції.

Здебільшого це просто база даних або декілька різних баз даних, але також можливо, що принтер бере участь у транзакції, і це може призвести до того, що ця транзакція вийде з ладу, скажімо, у випадку застрягання паперу.


1

Транзакція може бути визначена як сукупність завдань, які розглядаються як мінімальний блок обробки. Кожен мінімальний блок обробки не можна розділити далі.

Основна операція транзакції - читання та запис.

Усі транзакції повинні містити чотири властивості, які зазвичай відомі як властивості ACID з метою забезпечення точності, повноти та цілісності даних.


0

Я думаю, що транзакція - це атомна дія з точки зору СУБД.

це означає, що його не можна відокремити. так, при переході може бути кілька вказівок щодо виконання системи. але вони пов'язуються разом, щоб виконати єдине основне завдання.

наприклад. вам потрібно пройти через міст (розглянемо це як перехід), а для цього, скажімо, потрібно 100 кроків. загалом ці кроки не можна відокремити. коли ви зробили половину з них, для вас є лише два варіанти: продовжуйте закінчувати їх усі і повертайтеся до початкової точки. це так само, як результат транзакції: успіх (здійснено) і провал (відкат)


0

Транзакція - це нероздільна одиниця обробки даних. Усі транзакції повинні мати властивості ACID:

тобто: Атомність, послідовність, ізоляція та довговічна транзакція - це все або нічого, але не є посередництвом (це означає, що якщо ви перераховуєте гроші з одного рахунку на інший рахунок, один рахунок повинен втратити стільки, а інший повинен отримати цю суму, але якщо ви перераховуєте гроші з одного рахунку, а інший рахунок ще порожній, що не буде трансакцією)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.