Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция

Вранзакция β€” это Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π”), ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π±Π°Π·Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ трСбования ACID, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚ΠΎΠΌ числС финансовых Π΄Π°Π½Π½Ρ‹Ρ… =) ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡ… ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚.

Π― расскаТу ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция. Как Π΅Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ. И ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ β€” Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. И Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ написании запросов ΠΊ Π±Π°Π·Π΅ Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ осознанноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ происходит Ρ‚Π°ΠΌ, ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ этот ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ послС Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция

Вранзакция β€” это Π°Ρ€Ρ…ΠΈΠ² для запросов ΠΊ Π±Π°Π·Π΅. Он Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ваши Π΄Π°Π½Π½Ρ‹Π΅ благодаря ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «всё, ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ».

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³Ρƒ 10 Ρ„Π°ΠΉΠ»ΠΈΠΊΠΎΠ² Π² мСссСндТСрС. КакиС Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

ΠšΠΈΠ½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΈΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡ… Π² Π°Ρ€Ρ…ΠΈΠ² ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ².

Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ особой Π½Π΅Ρ‚. Но Ρ‡Ρ‚ΠΎ, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ? Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ оборвСтся Π½Π° сСрСдинС, сСрвСр ΡƒΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π±ΡƒΡ‚ ΠΈΠ»ΠΈ просто выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ваш Π΄Ρ€ΡƒΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ 9 Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ. НСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… состояний. Или ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» всё, ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½ΠΈΡ‡Π΅Π³ΠΎ. Но Π·Π°Ρ‚ΠΎ Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка, Π²Ρ‹ снова ΠΏΠ΅Ρ€Π΅ΡˆΠ»Π΅Ρ‚Π΅ сообщСниС. И Π΄Ρ€ΡƒΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ всС Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ придСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Β«Π½Π΅ потСрялся Π»ΠΈ ΠΊΡ‚ΠΎΒ».

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Казалось Π±Ρ‹, Π½Ρƒ Π½Π΅Π΄ΠΎΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ„Π°ΠΉΠ»ΠΈΠΊ, Ρ‡Ρ‚ΠΎ с Ρ‚ΠΎΠ³ΠΎ? А Ссли это ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ? Если это Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΈΠΊΠΈ? НапримСр, для Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΈΠΈ. ΠŸΠΎΡ‚Π΅Ρ€ΡΠ» ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ»ΠΈΠΊ? Π—Π½Π°Ρ‡ΠΈΡ‚, допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ для Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ³Ρ€Π΅Π±Π΅ΡˆΡŒ ΡˆΡ‚Ρ€Π°Ρ„ ΠΈ большиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹! НСт, спасибо, Π»ΡƒΡ‡ΡˆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ!

И получаСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π±Π΅ Π½Π°Π΄ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ Ρƒ отправитСля:

β€” Π’Ρ‹ ΠΌΠ½Π΅ сколько Ρ„Π°ΠΉΠ»ΠΎΠ² посылал?

β€” Π”Π°? Π£ мСня Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 9. Π”Π°Π²Π°ΠΉ ΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ продолбался.

И сидитС, сравниваСтС ΠΏΠΎ названиям. А Ссли Ρ„Π°ΠΉΠ»ΠΈΠΊΠΎΠ² 100 ΠΈ потСряно 2 ΡˆΡ‚ΡƒΠΊΠΈ? А названия Ρƒ Π½ΠΈΡ… вовсС Π½Π΅ Β«ΠžΡ‚Ρ‡Π΅Ρ‚ 1Β», Β«ΠžΡ‚Ρ‡Π΅Ρ‚ 2Β» ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π° Β«hfdslafebx63542437457822nfhgeopjgrev0000444666589.xmlΒ» ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅. Π£ΠΆ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ²! Π’ΠΎΠ³Π΄Π° Ρ‚Ρ‹ ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ всё ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ», ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈ дСлаСшь ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ.

Π’Π°ΠΊ Π²ΠΎΡ‚! Вранзакция β€” это Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Ρ€Ρ…ΠΈΠ² для запросов. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ «всё, ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ». Или Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π» Π² ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½.

Допустим, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅ всС дСньги с ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Выглядит это «Π²Π½ΡƒΡ‚Ρ€ΠΈ» систСмы ΠΊΠ°ΠΊ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

delete from счСт1 where счСт = счСт 1

insert into счСт2 values (‘сумма’)

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ «всё ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎΒ» Ρ‚ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Ссли Π±Ρ‹ дСньги со счСта1 списались, Π½ΠΎ Π½Π° счСт2 Π½Π΅ поступили. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ соСдинСниС ΠΎΠ±ΠΎΡ€Π²Π°Π»ΠΎΡΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ Π² Π½ΠΎΠΌΠ΅Ρ€Π΅ счСта ΠΎΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»ΠΈΡΡŒ ΠΈ систСма Π²Ρ‹Π΄Π°Π»Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Но благодаря объСдинСнию запросов Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибки зачислСния ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ списания. Π”Π΅Π½ΡŒΠ³ΠΈ снова Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π½Π° счСт 1!

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎ-Π½Π°ΡƒΡ‡Π½ΠΎΠΌΡƒ, Ρ‚ΠΎ транзакция β€” упорядочСнноС мноТСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, пСрСводящих Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ согласованного состояния Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. БогласованноС состояниС β€” это состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ систСмы. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ нас Π½Π΅ остаСтся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ баланс послС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π΄Π΅Π½Π΅Π³, Π½ΠΎΠΌΠ΅Ρ€ счСта Π½Π΅ «зависаСт Π² Π²ΠΎΠ·Π΄ΡƒΡ…Π΅Β», Π½Π΅ привязанный ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.

Как ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, сначала Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС с Π½Π΅ΠΉ. Π­Ρ‚ΠΎ называСтся ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ (ΠΎΡ‚ Π°Π½Π³Π». connection, соСдинСниС). ΠšΠΎΠ½Π½Π΅ΠΊΡ‚ β€” это просто Ρ‚Ρ€ΡƒΠ±Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ посылаСм запросы.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы Π² ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π°Π΄ΠΎ:

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Ρ‚Ρ€ΡƒΠ±Π° освободилась. И Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

МоТно, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ соСдинСниС с Π‘Π”. И Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅. Но эффСктивнСС ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚Π° β€” тяТСлая опСрация, долгая.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

ΠŸΡ€ΠΈ настройкС прилоТСния администратор ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько максимально ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… соСдинСний с Π±Π°Π·ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ называСтся ΠΏΡƒΠ» соСдинСний β€” количСство свободных Ρ‚Ρ€ΡƒΠ±.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±Π΅Ρ€Π΅Ρ‚ соСдинСниС ΠΈΠ· ΠΏΡƒΠ»Π° ΠΈ отправляСт ΠΏΠΎ Π½Π΅ΠΌΡƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ транзакция закрываСтся (Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΎΡˆΠ»Π° ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΠ»Π°ΡΡŒ), соСдинСниС возвращаСтся Π² ΠΏΡƒΠ», ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ бизнСс-опСрация.

Как ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ

Зависит ΠΎΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Oracle транзакция открываСтся сама, ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. А Π² MySql Π½Π°Π΄ΠΎ явно ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«start transactionΒ».

Как Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ

Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

COMMIT β€” ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ всС внСсСнныС измСнСния;

ROLLBACK β€” ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ…;

И вся Ρ„ΠΈΡˆΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° сначала примСняСт запрос Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΒ», Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π² Π±Π°Π·Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ². Π’Ρ‹ моТСшь ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ запрос ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π±Π°Π·Ρƒ, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ сохраняя.

НапримСр, я ΠΏΠΈΡˆΡƒ запрос:

Запрос Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли я сдСлаю select ΠΈΠ· этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, прям Ρ‚ΡƒΡ‚ ΠΆΠ΅, ΠΏΠΎΠ΄ своим запросом β€” ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Иванова! Π― ΠΌΠΎΠ³Ρƒ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ своСго запроса.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Но! Если ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ графичСский интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Иванова ΠΌΡ‹ Ρ‚Π°ΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ. И Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π² sql developer (ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ Π±Π°Π·Π΅) ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚Π°ΠΌ свой select β€” Иванова Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

А всС ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ я Π½Π΅ сдСлала ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»Π° измСнСния:

Π― ΠΌΠΎΠ³Ρƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ строк. Но Ссли я Π·Π°ΠΊΡ€ΠΎΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ sql developer, Π½Π΅ сдСлав ΠΊΠΎΠΌΠΌΠΈΡ‚, всС эти измСнСния ΠΏΠΎΡ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ.

Когда я Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»Π°ΡΡŒ с Π±Π°Π·ΠΎΠΉ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅, я часто допускала Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΠΏΠΎΠ΄ΠΏΡ€Π°Π²Π»ΡŽ Π΄Π°Π½Π½Ρ‹Π΅ Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» для провСдСния тСста, Π° Π² систСмС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ мСняСтся! ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π±Ρ‹Π»Π°.

На самом Π΄Π΅Π»Π΅ это ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π’Π΅Π΄ΡŒ Ссли Ρ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΡˆΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. НапримСр, удаляСм тСстовыС Π΄Π°Π½Π½Ρ‹Π΅. Написали ΠΊΡƒΡ‡Ρƒ условий ΠΈΠ· сСрии:

И фамилия = «ВСстовый»

Π£Π΄Π°Π»ΠΈΠ»ΠΈ. Π”Π΅Π»Π°Π΅ΠΌ select count β€” ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ количСство записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. А Ρ‚Π°ΠΌ вмСсто ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° строк ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 100 тысяч! Если Π±Π°Π·Π° Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ, Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Врядли Ρ‚Π°ΠΌ Π±Ρ‹Π»ΠΎ Π‘Π’ΠžΠ›Π¬ΠšΠž тСстовых записСй.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ свой запрос, Π° ΠΌΡ‹ Ρ‚Π°ΠΌ Π³Π΄Π΅-Ρ‚ΠΎ ошиблись! ВмСсто «И» написали Β«Π˜Π›Π˜Β», ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π΅Ρ‰Π΅. Упс. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π΅Ρ‰Π΅ измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ успСли. ВмСсто ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄Π΅Π»Π°Π΅ΠΌ rollback.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π’ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос β€” Π° Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ΅Π½ ROLLBACK? Π’Π΅Π΄ΡŒ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сохранится. МоТно просто Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΈ всё. Но Ρ‚ΠΎΠ³Π΄Π° транзакция Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΡΠ΅Ρ‚ΡŒ Π² нСпонятном статусС. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π΅ просто Ρ‚Π°ΠΊ Π½ΠΈΠΊΡ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ тСбя Π½Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚.

Или Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Нафигачили ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Π³ΠΎΡ€ΠΎΠ΄Π° с 495 Π½Π° 499;

Но Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ select Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° стала нСконсистСнтной. А ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ «Ай, Π΄Π° Π»Π°Π΄Π½ΠΎ, ΠΊΠΎΠΌΠΌΠΈΡ‚ Ρ‚ΠΎ Π½Π΅ сдСлали? Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ΠΎ ΠΈ Π½Π΅ сохранится». И Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ соСдинСниС Π² ΠΏΡƒΠ».

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ опСрация бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π±Π΅Ρ€Π΅Ρ‚ это самоС соСдинСниС ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π² Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. А ΠΏΠΎΡ‚ΠΎΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ относился ΠΊ Ρ‚Π΅ΠΌ 3 опСрациям, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Но ΠΌΡ‹ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ ΠΈ 10 Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π· ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ полСнились. Π’Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π±Π°Π·Ρƒ нСконсистСнтной.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ сразу сдСлайтС ΠΎΡ‚ΠΊΠ°Ρ‚. Π—Π΄ΠΎΡ€ΠΎΠ²Π΅ΠΉ систСма Π±ΡƒΠ΄Π΅Ρ‚!

Π˜Ρ‚ΠΎΠ³ΠΎ

Вранзакция β€” Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ.

Одной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ всСгда соотвСтствуСт ΠΎΠ΄Π½Π° транзакция, Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… insert ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. ).

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΊ Π±Π°Π·Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ соСдинСниС с Π½Π΅ΠΉ. Или ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ (Π°Π½Π³Π» connection) β€” это просто Ρ‚Ρ€ΡƒΠ±Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ запросы. Π£ Π±Π°Π·Ρ‹ Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ» соСдинСний β€” мСсто, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ любоС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ всС свободныС.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ½Π° открываСтся сама. А Π²ΠΎΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

COMMIT β€” ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅ΠΌ всС внСсСнныС измСнСния;

ROLLBACK β€” ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ…;

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

ДСлая ΠΊΠΎΠΌΠΈΡ‚, ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ Π² ΠΏΡƒΠ» Π±Π΅Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ просто освобоТдаСм Ρ‚Ρ€ΡƒΠ±Ρƒ для Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ бизнСс-опСрация Π±Π΅Ρ€Π΅Ρ‚ эту Ρ‚Ρ€ΡƒΠ±Ρƒ ΠΈ Ρ„ΠΈΠ³Π°Ρ‡ΠΈΡ‚ Π² Π½Π΅Π΅ свои ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ rollback, Ссли измСнСния ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ. НС ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚Π΅ ΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ соСдинСниС Π² ΠΏΡƒΠ»? Π•Π³ΠΎ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ сдСлаСт ΠΊΠΎΠΌΠΌΠΈΡ‚. Π‘Π²ΠΎΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Π²Π°ΡˆΠΈΡ…, Π½Π΅ΠΎΡ‚ΠΊΠ°Ρ‡Π΅Π½Π½Ρ‹Ρ….

НС ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ соСдинСниС с Π±Π°Π·ΠΎΠΉ (ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚) ΠΈ саму Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. ΠšΠΎΠ½Π½Π΅ΠΊΡ‚ β€” это просто Ρ‚Ρ€ΡƒΠ±Π°, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (update, delete…) ΠΌΡ‹ посылаСм ΠΏΠΎ Ρ‚Ρ€ΡƒΠ±Π΅, старт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ commit /rollback β€” это Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΎΠ΄Π½Ρƒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ.

Π‘ΠΌ Ρ‚Π°ΠΊΠΆΠ΅:

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ β€” Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Transact-SQL)

Вранзакция являСтся СдинствСнной Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Если транзакция Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, всС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, сдСланныС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΈ становятся постоянной Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ происходят ошибки ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΎΡ‚ΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΎΡ‚ΠΊΠ°Ρ‚, всС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Ρ‹.

SQL Server Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² пСрСчислСнных Π½ΠΈΠΆΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

АвтоматичСскоС принятиС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ
КаТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ инструкция являСтся Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

Π―Π²Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
КаТдая транзакция явно начинаСтся с инструкции BEGIN TRANSACTION ΠΈ явно заканчиваСтся инструкциСй COMMIT ΠΈΠ»ΠΈ ROLLBACK.

НСявныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
Новая транзакция нСявно начинаСтся, ΠΊΠΎΠ³Π΄Π° прСдыдущая транзакция Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Π½ΠΎ каТдая транзакция явно Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ инструкциСй COMMIT ΠΈΠ»ΠΈ ROLLBACK.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ контСкста ΠΏΠ°ΠΊΠ΅Ρ‚Π°
Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ мноТСствСнным Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π±ΠΎΡ€Π°ΠΌ (Ρ€Π΅ΠΆΠΈΠΌ MARS), явная ΠΈΠ»ΠΈ нСявная транзакция Transact-SQL, которая запускаСтся Π² сСансС Ρ€Π΅ΠΆΠΈΠΌΠ° MARS, становится Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ контСкста ΠΏΠ°ΠΊΠ΅Ρ‚Π°. SQL Server автоматичСски выполняСт ΠΎΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ контСкста ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ссли эта транзакция Π½Π΅ зафиксирована ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π΅Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ΠžΡΠΎΠ±Ρ‹Π΅ замСчания Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Data Warehouse см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Azure Synapse Analytics).

Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅

SQL Server прСдоставляСт пСрСчислСнныС Π½ΠΈΠΆΠ΅ инструкции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Вранзакция (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°)

Вранза́кция (Π°Π½Π³Π». transaction ) β€” Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, которая прСдставляСт собой Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Вранзакция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π»ΠΈΠ±ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, соблюдая Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ нСзависимо ΠΎΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄ΡƒΡ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π»ΠΈΠ±ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° произвСсти Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами, Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… создаётся история Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅), ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ распрСдСлённыС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. РаспрСдСлённыС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ использованиС большС Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, two-phase commit β€” Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ). Π’Π°ΠΊΠΆΠ΅, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΠ΄-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСвСсти с банковского счёта Π½ΠΎΠΌΠ΅Ρ€ 5 Π½Π° счёт Π½ΠΎΠΌΠ΅Ρ€ 7 сумму Π² 10 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ дСйствий:

Π­Ρ‚ΠΈ дСйствия ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Β«ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ суммы ΠΌΠ΅ΠΆΠ΄Ρƒ счСтами», ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ. Если ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² сСрСдинС, ΠΈ Π½Π΅ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС измСнСния, Π»Π΅Π³ΠΊΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° счёта Π½ΠΎΠΌΠ΅Ρ€ 5 Π±Π΅Π· 10 Π΅Π΄ΠΈΠ½ΠΈΡ†, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† счСта Π½ΠΎΠΌΠ΅Ρ€ 7 ΠΈΡ… Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚.

Бвойства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ создавалась иллюзия, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ β€” СдинствСнный. Однако Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎ сообраТСниям ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π‘Π£Π‘Π” ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π£Ρ€ΠΎΠ²Π½ΠΈ описаны Π² порядкС увСличСния изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ надёТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Ρ‚Π΅ΠΌ большС трСбуСтся рСсурсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

Π’ Π‘Π£Π‘Π” ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для всСх Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ сразу, Ρ‚Π°ΠΊ ΠΈ для ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 1 (Read Committed). Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ 0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном для отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ для чтСния Ρ€Π΅Π΄ΠΊΠΎ измСняСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π£Ρ€ΠΎΠ²Π½ΠΈ 2 ΠΈ 3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… трСбованиях ΠΊ изолированности Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

РСализация

ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ рСализация ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции ΠΈ свойств ACID прСдставляСт собой Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ количСству ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ самих Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‚Π°ΠΊ ΠΈ индСксов. Π­Ρ‚ΠΈ измСнСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ: Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ мСсто Π½Π° дискС, опСрация Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (timeout) ΠΈ Ρ‚. Π΄. БистСма Π΄ΠΎΠ»ΠΆΠ½Π° Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² состояниС Π΄ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ коммСрчСскиС Π‘Π£Π‘Π” (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, IBM DB2), пользовались ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ для обСспСчСния свойств ACID. Но большоС количСство Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сущСствСнному ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π•ΡΡ‚ΡŒ Π΄Π²Π° популярных сСмСйства Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ количСство Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ:

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ расставлСны Π½Π° всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая обновляСтся. Π’ зависимости ΠΎΡ‚ уровня изоляции ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записи Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΈ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Sybase ΠΈ MS SQL Server Π΄ΠΎ вСрсии 2005, всС измСнСния Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΆΡƒΡ€Π½Π°Π», ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ β€” Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ позволяСт Π‘Π£Π‘Π” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ состояниС послС Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ падСния систСмы. Π’Π΅Π½Π΅Π²Ρ‹Π΅ страницы содСрТат ΠΊΠΎΠΏΠΈΠΈ Ρ‚Π΅Ρ… страниц Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… происходят измСнСния. Π­Ρ‚ΠΈ ΠΊΠΎΠΏΠΈΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π₯отя Ρ‚Π΅Π½Π΅Π²Ρ‹Π΅ страницы Π»Π΅Π³Ρ‡Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ, ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π°Ρ Турнализация Π±ΠΎΠ»Π΅Π΅ эффСктивна [3]

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ появлСнию Π±Π΅Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ИдСя контроля Π·Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ доступом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ (timestamp-based concurrency control) Π±Ρ‹Π»Π° Ρ€Π°Π·Π²ΠΈΡ‚Π° ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ появлСнию многовСрсионной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ MVCC. Π­Ρ‚ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π½ΠΈ Π² ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½ΠΈ Π² Ρ‚Π΅Π½Π΅Π²Ρ‹Ρ… страницах. АрхитСктура, рСализованная Π² Oracle 7.Ρ… ΠΈ Π²Ρ‹ΡˆΠ΅, записываСт старыС вСрсии страниц Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт ΠΎΡ‚ΠΊΠ°Ρ‚Π°, Π½ΠΎ ΠΎΠ½ΠΈ всС Π΅Ρ‰Ρ‘ доступны для чтСния. Если транзакция ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° страницу, врСмСнная ΠΌΠ΅Ρ‚ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΠ²Π΅Π΅ Π½Π°Ρ‡Π°Π»Π° чтСния, Π΄Π°Π½Π½Ρ‹Π΅ бСрутся ΠΈΠ· сСгмСнта ΠΎΡ‚ΠΊΠ°Ρ‚Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ «старая» вСрсия). Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вСдётся ΠΆΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Β«ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ», ΠΎΠ½ Π½Π΅ содСрТит Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌ состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… логичСских шагов:

Π–ΡƒΡ€Π½Π°Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сочСтании с сСгмСнтом ΠΎΡ‚ΠΊΠ°Ρ‚Π° (ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится копия всСх измСняСмых Π² Ρ…ΠΎΠ΄Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…) Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ случаС сбоя запускаСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° восстановлСния, которая просматриваСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΅Π³ΠΎ записи ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Firebird Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½ΠΈ сСгмСнта ΠΎΡ‚ΠΊΠ°Ρ‚Π°, Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ MVCC, записывая Π½ΠΎΠ²Ρ‹Π΅ вСрсии строк Ρ‚Π°Π±Π»ΠΈΡ† прямо Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ пространство Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΆΠ΅ поступаСт MS SQL 2005. ВСорСтичСски это Π΄Π°Ρ‘Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½ΠΎ Ρ†Π΅Π½ΠΎΠΉ являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ «сборки мусора», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ удалСния старых ΠΈ ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹Ρ… вСрсий Π΄Π°Π½Π½Ρ‹Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ACID. Π§Ρ‚ΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

ΠžΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ функционирования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π”) ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ прилоТСния. Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ погруТСния Π² Π·Π°Π΄Π°Ρ‡ΠΈ спСциалисту, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с транзакциями – ΠΎΠ± этом ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π½ΠΈΠΆΠ΅. Рассмотрим Π²ΠΈΠ΄Ρ‹ ΠΈ свойства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ постараСмся ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ устроСн этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. НадССмся, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ всСм, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΠ΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

ΠžΡ‚ Π°Π²Ρ‚ΠΎΡ€Π°: ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Ρƒ мСня спросили, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция. Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ простыми словами, Π½ΠΎ Ρƒ мСня Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, хотя я часто использовал это понятиС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ свойствах Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, постараСмся Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, для Π½Π°Ρ‡Π°Π»Π° своими словами.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция (transaction)?

Вранзакция β€” это Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ связанных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ. Однако, ΠΏΠΎΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ΅. НС Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ самого Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” этот Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ прСдставим Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π΅ΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠΎΠΊΡƒΠΏΠΊΠ°, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств с ΠΊΠ°Ρ€Ρ‚Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΎΠΏΠ»Π°Ρ‚Π° счСтов ΠΈ Ρ‚.Π΄. КакиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ происходят Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΈΡ†Π΅Π²ΠΎΠ³ΠΎ счСта Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ? Π’ этой ситуации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π²Π° запроса ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…:

Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π΅Π²ΠΎΠ³ΠΎ счСта происходит списаниС N-ΠΎΠΉ суммы Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств.

На Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π»ΠΈΡ†Π΅Π²ΠΎΠΉ счСт ΠΈΠ΄Π΅Ρ‚ зачислСниС этой ΠΆΠ΅ суммы.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС эти Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ связаны ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΅Π΄ΠΈΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Вранзакция β€” это Π½Π°Π±ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, соСдинСнных Π² ΠΎΠ΄Π½Ρƒ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

Π’ΠΈΠ΄Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ дСлят Π½Π° Π΄Π²Π° Π²ΠΈΠ΄Π°:

НСявныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдусмотрСны Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π‘Π” Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ INSERT, UPDATE ΠΈΠ»ΠΈ DELETE ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π―Π²Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ β€” ΠΈΡ… Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† явно ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ инструкциями, ΠΊΠ°ΠΊ BEGIN TRANSACTION, COMMIT ΠΈΠ»ΠΈ ROLLBACK.

Π’ ORM Laravel ΠΏΡ€ΠΈ использовании фасада DB Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции DB::transaction(). Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ большС гибкости, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ конструкциям DB::beginTransaction(), DB::rollBack(), DB::commit().

Бвойства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «магичСскиС» свойства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ Β«ACIDΒ». КаТдая Π±ΡƒΠΊΠ²Π° Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· свойств, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅.

Atomicity ΠΈΠ»ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ (A)

ВСрнСмся ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π»ΠΈΡ†Π΅Π²Ρ‹ΠΌΠΈ счСтами. ΠœΡ‹ установили, Ρ‡Ρ‚ΠΎ эти 2 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠ²Π»ΡΡŽΡ‚ΡΡ опСрациями Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. А ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Ссли ΠΌΡ‹ просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ² Π΄Π²Π° запроса ΠΊ Π‘Π”?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запрос выполнится ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π΅Π²ΠΎΠ³ΠΎ счСта Π±ΡƒΠ΄Π΅Ρ‚ списана N-ая сумма Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… срСдств.

Однако, Π² случаС Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ тСхничСской ошибки Π²ΠΎ врСмя выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ запроса ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ срСдства с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΈΡ†Π΅Π²ΠΎΠ³ΠΎ счСта ΡƒΠΉΠ΄ΡƒΡ‚, Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ счСт Π½Π΅ поступят.

Π’ этой ситуации Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ цСлях сниТСния этого риска Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠΌ свойством, ΠΊΠ°ΠΊ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ (atomicity), Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΡΡ‚ΡŒ: Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС дСйствия Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Consistency ΠΈΠ»ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ (C)

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π΄ΠΎ выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π‘Π” находятся Π² Π½Π΅ΠΊΠΎΠΌ состоянии Β«good stateΒ»*, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π² этом ΠΆΠ΅ состоянии ΠΈ послС выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

*Π˜Π½Ρ‹ΠΌΠΈ словами, выполняСтся Π½Π΅ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ условий. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ countries Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… строк с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ страны «Российская ЀСдСрация»; возраст Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС 150 Π»Π΅Ρ‚.

На самом Π΄Π΅Π»Π΅ Π½ΠΈ ΠΎΠ΄Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойство согласованности. А всё ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ консистСнтности β€” это ΠΏΡ€Π΅Ρ€ΠΎΠ³Π°Ρ‚ΠΈΠ²Π° прилоТСния, Π° Π½Π΅ Π‘Π”. Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… лишь прСдоставляСт инструмСнты для выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ Ρ‚.Π΄.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Isolation ΠΈΠ»ΠΈ изоляция (I)

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ самому интСрСсному свойству β€” изоляции. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с систСмой Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ нСсколько ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ЕстСствСнно, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π‘Π” Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ систСмы. Но Ρƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ свои ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

Если ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Ρ€Π°Π·Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π΄Π°Π½Π½Ρ‹Ρ…, всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Но Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Π΄Π²Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…? Π’ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ явлСниС, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ race condition (состояниС Π³ΠΎΠ½ΠΊΠΈ).

Π’Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ нСсколько эффСктов, связанных с этим явлСниСм.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ потСрянного обновлСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСсколько Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ учитывая ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, сдСланных Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ транзакциями.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Π°Π½ΠΊΠ° Π΅ΡΡ‚ΡŒ счСт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится 1000 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ А ΠΈ Π’ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π‘Π”. Вранзакция А Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ сумму Π½Π° 100 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†, Π° транзакция Π’ β€” Π½Π° 200. Вранзакция А ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ сумму Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† Π½Π° счётС Π½Π° 100 (ΠΈΡ‚ΠΎΠ³ΠΎ 1100) ΠΈ записываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π‘Π”, транзакция Π’ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ сумму Π½Π° 200 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΈ записываСт Π² Π‘Π” (ΠΈΡ‚ΠΎΠ³ΠΎ 1200). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π° счСтС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ 1300, Π° ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ ΠΈΠΌΠ΅Π΅ΠΌ 1200 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ грязного чтСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° транзакция считываСт Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ зафиксированы.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ транзакция А ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ всС дСньги ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ счСт, Π½ΠΎ Π½Π΅ фиксируСт измСнСния. Вранзакция Π’ считываСт измСнСния счёта А, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 0 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† Π½Π° счСтС ΠΈ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π² Π²Ρ‹Π΄Π°Ρ‡Π΅ Π½Π°Π»ΠΈΡ‡Π½Ρ‹Ρ…. Вранзакция А прСрываСтся ΠΈ отмСняСт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ счСтами.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ нСповторяСмого чтСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° транзакция считываСт Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ строку, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

НапримСр, ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ согласованности ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±Π°Π½ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ баланс Π½Π° счётС. Вранзакция А Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ баланс счСта ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° 200 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†. Она провСряСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ суммы Π½Π° счётС β€” 500 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†. Π’ это врСмя транзакция Π’ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ сумму Π½Π° счётС Π΄ΠΎ 0 ΠΈ фиксируСт измСнСния. Если Π±Ρ‹ транзакция А ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»Π° сумму, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π±Ρ‹ 0 Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†, Π½ΠΎ Π½Π° основС ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½Π° ΡƒΠΆΠ΅ приняла Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ счСт ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² минус.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ чтСния Ρ„Π°Π½Ρ‚ΠΎΠΌΠΎΠ² Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… соотвСтствуСт условиям поиска, Π½ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ отобраТаСтся.

НапримСр, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ согласованности Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π±ΠΎΠ»Π΅Π΅ 3 Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… счСтов. Для открытия Π½ΠΎΠ²ΠΎΠ³ΠΎ счСта транзакция А провСряСт всС счСта ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Π°Π½ΠΊΠ° ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ 2 счСта. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ транзакция B ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ счСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈ фиксируСт измСнСния (3 счСта). Если Π±Ρ‹ транзакция А ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»Π° количСство Π»ΠΈΡ†Π΅Π²Ρ‹Ρ… счСтов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ ΠΈΡ… оказалось Π±Ρ‹ 3, ΠΈ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ согласованности ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ счСта Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

РСшСниС

Для устранСния Π΄Π°Π½Π½Ρ‹Ρ… эффСктов Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… прСдусмотрСны ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции, ΠΈΠ»ΠΈ transaction isolation levels, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π‘Π£Π‘Π”. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Π΄Π²ΠΈΠΆΠΎΠΊ InnoDB Π² Π‘Π£Π‘Π” MySQL:

Read uncommitted – это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая транзакция Π²ΠΈΠ΄ΠΈΡ‚ нСзафиксированныС измСнСния Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. БправляСтся с эффСктом потСрянного обновлСния, Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: эффСкты грязного чтСния, нСповторяСмого чтСния, чтСния Ρ„Π°Π½Ρ‚ΠΎΠΌΠΎΠ².

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

ВсС запросы SELECT ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°Π½Π΅Ρ€Π΅.

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (SELECT … FOR UPDATE, LOCK IN SHARE MODE), UPDATE ΠΈ DELETE Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ искомыС индСксныС строки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° вставка Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ индСксами. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ.

Read committed β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ видят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зафиксированныС измСнСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. БправляСтся с эффСктами потСрянного обновлСния ΠΈ грязного чтСния, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ эффСкты нСповторяСмого чтСния ΠΈ чтСния Ρ„Π°Π½Ρ‚ΠΎΠΌΠΎΠ².

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

БогласованноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΎΠ΄Π½Π°ΠΊΠΎ считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· свСТСго ΡΠ½ΡΠΏΡˆΠΎΡ‚Π°. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ read uncommitted.

Repeatable read ΠΈΠ»ΠΈ snapshot isolation β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ транзакция Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π΅ΠΉ Ρ€Π°Π½Π΅Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ способна ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ поиска. БправляСтся с эффСктами потСрянного обновлСния, грязного чтСния, нСповторяСмого чтСния, остаСтся эффСкт чтСния Ρ„Π°Π½Ρ‚ΠΎΠΌΠΎΠ².

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

БогласованноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΡΠ½ΡΠΏΡˆΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ запросы Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° для Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ чтСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° условия:

Ссли условиС с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WHERE (id > 7), Ρ‚ΠΎ блокируСтся вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½;

Ссли ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WHERE (id = 7), Ρ‚ΠΎ блокируСтся ΠΎΠ΄Π½Π° индСксная запись.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² InnoDB ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ repeatable read ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Serializable β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая транзакция выполняСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ сущСствуСт. БправляСтся со всСми пСрСчислСнными Π²Ρ‹ΡˆΠ΅ эффСктами.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ транзакция Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Аналогично repeatable read, Π½ΠΎ Π΅ΡΡ‚ΡŒ интСрСсный ΠΌΠΎΠΌΠ΅Π½Ρ‚. Если Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ autocommit (Π° ΠΏΡ€ΠΈ явном стартС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ START TRANSACTION ΠΎΠ½ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Ρ‚ΠΎ всС запросы SELECT ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² запросы SELECT … LOCK IN SHARE MODE.

SELECT … LOCK IN SHARE MODE – Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ считываСмыС строки Π½Π° запись.

SELECT … FOR UPDATE – Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ считываСмыС строки Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ со всСми ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ камнями, сформулируСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ изоляции.

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ β€” это свойство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ измСнСния, внСсСнныС ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ явлСния race condition.

Durability ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ (D)

Π”ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли транзакция Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΈ Π΄Π°ΠΆΠ΅ Ссли Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ сбой Π² систСмС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сохранится.

Если Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Amazon S3, Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π°Ρ€ΠΈΡ„Ρ‹ ΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‚ Π²Π°ΠΌ Ρ€Π°Π·Π½ΠΎΠ΅ количСство дСвяток durability. Π’ контСкстС ΠΎΠ±Π»Π°ΠΊΠ° durability ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π§Π΅ΠΌ большС ΠΊΠΎΠΏΠΈΠΉ Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΌΠΈΡ€Π°, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈΡ… Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΈΠ·-Π·Π° наводнСния, зСмлСтрясСния ΠΈΠ»ΠΈ Π½Π°ΡˆΠ΅ΡΡ‚Π²ΠΈΡ инопланСтян. Π’ контСкстС Β«ACIDΒ» это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ послС фиксирования Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² постоянноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π’Ρ‹Π²ΠΎΠ΄

Как ΠΌΡ‹ рассмотрСли Π²Ρ‹ΡˆΠ΅, ошибки ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с систСмой. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ освСтили Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ риски ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π΅Π΅ β€œΠΌΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ свойства” ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. НадССмся, Ρ‡Ρ‚ΠΎ этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Ρ‹Π» Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ ΠΆΠ΄Π΅ΠΌ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *