SQL транзакция е поредица от една или повече SQL операции (напр.INSERT UPDATE DELETE), изпълнени като единична единица работа. Транзакциите гарантират, че или всички операции са успешни, или нито една не се прилага, поддържайки целостта на данните.
Ключови свойства на SQL транзакциите: ACID
Целостта на SQL транзакциите се управлява от свойствата на ACID, които гарантират надеждни транзакции на базата данни. Тези четири свойства работят заедно, за да гарантират, че базата данни остава последователна и надеждна.
- Атомност: Резултатът от транзакция може да бъде напълно успешен или напълно неуспешен. Цялата транзакция трябва да бъде върната, ако една част от нея е неуспешна.
- Консистенция: Транзакциите поддържат ограничения за цялост чрез преместване на базата данни от едно валидно състояние в друго.
- Изолация: Едновременните транзакции са изолирани една от друга, което гарантира точността на данните.
- Издръжливост: След като транзакцията бъде извършена, нейните промени остават в сила дори в случай на повреда на системата.
SQL команди за контрол на транзакции
В SQL командите за контрол на транзакциите управляват изпълнение на SQL операции, гарантиращи целостта и надеждността на транзакциите в базата данни. Тези команди помагат за управлението на стартовия комит и връщането назад на промените, направени в базата данни. По-долу са ключовите команди за контрол на транзакциите в SQL, обяснени със синтаксис и примери за всяка.
1. Команда НАЧАЛО НА ТРАНЗАКЦИЯТА
TheBEGIN TRANSACTIONкомандата маркира началото на нова транзакция. Всички SQL изрази, които следват тази команда, ще бъдат част от една и съща транзакция, докато aCOMMIT или ROLLBACK се среща. Тази команда не прави никакви промени в базата данни, а просто стартира транзакцията.
Синтаксис:
BEGIN TRANSACTION transaction_name ;Пример за SQL транзакция със сценарий за банков превод
Нека да разгледаме пример за банков превод между две сметки. Този пример демонстрира използването на множество заявки в една транзакция.
BEGIN TRANSACTION;
-- Deduct 0 from Account A
UPDATE Accounts
SET Balance = Balance - 150
WHERE AccountID = 'A';
-- Add 0 to Account B
UPDATE Accounts
SET Balance = Balance + 150
WHERE AccountID = 'B';
-- Commit the transaction if both operations succeed
COMMIT;
Ако възникне грешка, като например проблем сUPDATEзаявка, която можете да използватеROLLBACKза да отмените всички промени, направени по време на транзакцията:
ROLLBACK;Това гарантира, че системата няма да изпадне в непоследователно състояние, като например приспадане на пари от една сметка, без да ги добавя към друга.
BEGIN TRANSACTION TransferFunds;2. Команда COMMIT
TheCOMMITкомандата се използва за запазване на всички промени, направени по време на текущата транзакция, в базата данни. След извършване на транзакция промените са постоянни.
Синтаксис:
string.replaceall в java
COMMIT;Пример
Ето примераStudentтаблица, която ще се използва за извършване на операциите в този пример. Тази таблица съдържа основни данни за ученика, като ID име възраст и друга подходяща информация, която ще бъде манипулирана с помощта на различни команди за контрол на транзакциите.
Студентска масаСледва пример, който би изтрил тези записи от таблицата, които имат възраст = 20 и след това КОМИТ промените в базата данни.
DELETE FROM Student WHERE AGE = 20;
COMMIT;
Изход
изход3. Команда ROLLBACK
TheROLLBACKкомандата се използва за отмяна на всички промени, направени в текущата транзакция. Използва се, когато възникне грешка или когато желаните промени не могат да бъдат завършени. Базата данни ще се върне в състоянието, в което е била преди BEGIN TRANSACTION беше екзекутиран.
Синтаксис:
ROLLBACK;Пример
Изтрийте тези записи от таблицата, които имат възраст = 20 и след това ROLLBACK промените в базата данни. В този случай на DELETE операцията се отменя и промените в базата данни не се записват.
DELETE FROM Student WHERE AGE = 20;
ROLLBACK;
Изход:
изход4. Команда SAVEPOINT
АSAVEPOINTсе използва за създаване на a контролно-пропускателен пункт в рамките на транзакция. Можем да се върнем към конкретенSAVEPOINTвместо да връщате назад цялата транзакция. Това ни позволява да отменим част от транзакцията, а не цялата сделка.
Синтаксис:
SAVEPOINT SAVEPOINT_NAME;Пример
SAVEPOINT SP1;
//Savepoint created.
DELETE FROM Student WHERE AGE = 20;
//deleted
SAVEPOINT SP2;
//Savepoint created.
Изход:
изходОбяснение:
От примера по-горе Примерна таблица1 Изтрийте тези записи от таблицата, които имат възраст = 20 и след това ВЪРНЕТЕ промените в базата данни, като запазите Savepoints. Тук SP1 е първата SAVEPOINT, създадена преди изтриването. В този пример е извършено едно изтриване. След изтриване отново се създава SAVEPOINT SP2.
5. ВЪРТАНЕ КЪМ ТОЧКА ЗА ЗАПАЗВАНЕ
TheROLLBACK TO SAVEPOINTкомандата ни позволява да върнем транзакцията до конкретна точка за запис, ефективно отменяйки промените, направени след тази точка.
Синтаксис:
ROLLBACK TO SAVEPOINT SAVEPOINT_NAME;Пример
Изтриването е извършено, нека приемем, че сме променили решението си и сме решили да се върнем към ТОЧКАТА ЗА ЗАПАЗВАНЕ, която идентифицирахме като SP1, която е преди изтриване. Така че в този случайDELETEоперацията се отменя и транзакцията се връща в състоянието, в което е била в моментаSP1точка за запис.
ROLLBACK TO SP1;
//Rollback completed
Изход:
изход6. Команда RELEASE SAVEPOINT
Тази команда се използва за премахване на SAVEPOINT, който сме създали. След като SAVEPOINT бъде пусната, вече не можем да използваме ROLLBACK команда за отмяна на транзакции, извършени след последната SAVEPOINT. Използва се за иницииране на транзакция в база данни и за указване на характеристиките на транзакцията, която следва.
git състояние
Синтаксис:
RELEASE SAVEPOINT SAVEPOINT_NAME;Пример
След точката за записSP2е освободен, вече не можем да се върнем към него.
RELEASE SAVEPOINT SP2; -- Release the second savepoint.Защо да използвате транзакции в банкирането?
В този случай без транзакция рискувате сценарии, при които парите се приспадат от една сметка, но не се добавят към другата, оставяйки системата в непоследователно състояние. Транзакциите гарантират, че подобни проблеми се избягват, като гарантират, че двете операции са успешни или неуспешни заедно.
Видове SQL транзакции
Съществуват различни видове транзакции в зависимост от тяхното естество и специфичните операции, които извършват:
- Прочетете транзакциите : Използва се само за четене на данните, обикновено с
SELECTзаявки. - Писане на транзакции : Те включват модифициране на данните в базата данни с
INSERTUPDATEилиDELETEоперации. - Разпределени транзакции : Тези транзакции обхващат множество бази данни и осигуряват последователност в тях.
- Неявни транзакции : Автоматично стартирано от SQL Server за определени операции.
- Изрични транзакции : Ръчно контролирани транзакции, при които потребителят започва и завършва транзакцията с помощта на
BEGIN TRANSACTIONCOMMITиROLLBACK.
Мониторинг и оптимизиране на SQL транзакции
За да поддържате производителността и да предотвратите проблеми, разгледайте следните техники:
mac операционни системи
1. Брави за монитори : Проследете поведението на заключване и коригирайте заявките, за да сведете до минимум конфликтите при заключване.
2. Ограничете обхвата на транзакцията : Ограничете броя на редовете или записите, засегнати от транзакция, за да ускорите обработката.
3. Използвайте пакетна обработка : Ако работите с големи количества данни, разделете операциите на по-малки транзакции или партиди, за да избегнете претоварване на системата.
Предложен тест Редактиране на тест 5 въпросаКой от следните сценарии най-добре описва нарушение на свойството „Изолация“ в ACID?
- А
Транзакция оставя базата данни в състояние, което нарушава ограничение на първичния ключ.
- б
Две транзакции, изпълнявани едновременно, четат и записват едни и същи данни, което води до противоречиви резултати.
- В
Потребител успешно актуализира запис, но системен срив изтрива промяната.
- г
Транзакцията е неуспешна по средата и всички нейни промени се отменят.
Това е класически пример за нарушение на изолацията, при което междинното състояние на една транзакция е видимо за друга.
В банково приложение преводът на средства включва дебитиране на една сметка и кредитиране на друга. Кое свойство на ACID гарантира, че или двете операции са завършени, или нито една?
- А
Изолация
- б
Атомност
- В
Издръжливост
- г
Последователност
Атомарността гарантира, че всички операции в рамките на транзакция са завършени успешно; в противен случай цялата транзакция се връща назад.
Транзакцията се изпълнява и се издава 'COMMIT'. Веднага след възникване на прекъсване на захранването. Кое свойство на ACID гарантира, че промените, направени от транзакцията, все още са налице след рестартиране на системата?
- А
Последователност
- б
Атомност
- В
Издръжливост
алгоритъм на кабината
- г
Изолация
Издръжливостта е свойство, което гарантира, че след като транзакцията е извършена, тя ще остане такава дори в случай на загуба на захранване или срив на системата.
Каква е основната цел на командата 'SAVEPOINT' в транзакция?
- А
За ангажиране на част от сделката.
- б
За да маркирате точка в транзакция, към която по-късно можете да се върнете назад.
- В
За постоянно запазване на състоянието на транзакцията.
- г
За да прекратите транзакцията и да направите всички промени постоянни.
„SAVEPOINT“ позволява частично връщане назад в рамките на транзакция.
Помислете за следната транзакция: „СТАРТ НА ТРАНЗАКЦИЯ; INSERT ...; ТОЧКА ЗА ЗАПАЗВАНЕ A; АКТУАЛИЗИРАНЕ ...; ТОЧКА ЗА ЗАПАЗВАНЕ B; ИЗТРИВАНЕ ...; ВЪРТАНЕ КЪМ ТОЧКА ЗА ЗАПИСВАНЕ A;' Какво е състоянието на транзакцията след командата 'ROLLBACK'?
- А
Цялата транзакция се връща назад.
- б
Само „ИЗТРИВАНЕ“ се отменя.
- В
Възниква грешка, защото не можете да се върнете към точка за запис, която не е най-новата.
- г
„INSERT“ се запазва, но „UPDATE“ и „DELETE“ се отменят.
Връщането към 'SAVEPOINT A' отменя всички промени, направени след тази точка на запис, които са 'UPDATE' и 'DELETE'.
Тестът е завършен успешно Вашият резултат: 2/5Точност: 0%Влезте, за да видите обяснението 1/5 1/5 < Previous Следващ >