pl sql transactions commit
Научете за PL SQL транзакциите с примери на оператори COMMIT, ROLLBACK и SAVEPOINTS:
В тази статия ще продължим с PL / SQL серия . В PL SQL пакет урок, научихме за пакета, неговите предимства, спецификации и структура.
Тук ще изследваме PL SQL транзакциите и техните характеристики. Ще обсъдим някои PL / SQL изрази като COMMIT, ROLLBACK, SAVEPOINTS и така нататък, които са свързани с PL SQL транзакции.
Също така ще научим за операторите LOCK TABLe и AUTOCOMMIT в PL SQL.
Нека започнем с дискусията !!
Какво ще научите:
PL SQL транзакции
Атомен компонент на работа в база данни, която има множество SQL изрази, се нарича транзакция. Той се нарича атомен, тъй като след като има промени, засегнати от SQL изрази, те могат или да бъдат фиксирани (неопределени актуализации на базата данни), или да бъдат върнати назад (отмяна на актуализации на базата данни).
SQL оператор трябва да бъде ангажиран, в противен случай той може да бъде върнат и всички модификации, които SQL операторът е трябвало да направи, остават отменени. Ако PL / SQL програмата бъде спряна в средата на транзакцията, няма влияние върху базата данни и тя се възстановява в първоначалното си състояние.
COMMIT и ROLLBACK се грижат за факта, че промените в базата данни са или вечни, или отменени. Операторът SAVEPOINT сочи към настоящата позиция при обработката на транзакции.
Започнете обработка на транзакции
Всяка транзакция има начало и прекратяване.
Следните инциденти означават началото на транзакцията:
- След свързването с базата данни се изпълнява първият SQL оператор.
- След завършване на предишния SQL оператор се изпълнява нов SQL оператор.
Крайна обработка на транзакцията
Всяка PL / SQL програма трябва да има оператор COMMIT или ROLLBACK. От логиката на програмиране зависи единствено дали да използваме COMMIT или ROLLBACK след транзакцията.
Ако операторите COMMIT или ROLLBACK не се използват, зависи от хост средата как трябва да бъде крайното състояние на базата данни. Например, в среда SQL * PLUS, ако PL / SQL блокът с код е без оператор COMMIT или ROLLBACK, състоянието на базата данни ще зависи от блока код, който се изпълнява веднага след това.
В среда на Oracle, ако включим оператор COMMIT или изпълним командата DISCONNECT, EXIT или QUIT след стартиране на дефиниция на данни или заявка за контрол на данни, транзакцията се фиксира. Също така, ако включим извлечение ROLLBACK, транзакцията се отменя.
По този начин транзакцията може да бъде завършена поради всеки от сценариите по-долу:
- Изпълнява се оператор ROLLBACK или COMMIT.
- DDL заявка ( например, се изпълнява изявление за създаване на таблица), след което COMMIT се изпълнява по подразбиране.
- DCL заявка ( например, се изпълнява оператор GRANT), след което COMMIT се изпълнява по подразбиране.
- Потребителят прекратява връзката с базата данни.
- Потребителят изпълнява оператора EXIT, за да излезе от SQL * PLUS, след което COMMIT се изпълнява по подразбиране.
- SQL * PLUS среща необичайно прекратяване, след което ROLLBACK се изпълнява по подразбиране.
- DML заявката не се изпълнява успешно, след което ROLLBACK се изпълнява по подразбиране, за да върне базата данни в първоначалното й състояние.
АНГИЖИРАНЕ за постоянни промени
Изразът COMMIT може да прекрати настоящата транзакция и да направи постоянна модификация, както се извършва от транзакцията. След като се изпълни COMMIT, можем да се доберем до модифицираните данни.
С изпълнението на оператора COMMIT всички засегнати редове на таблицата се освобождават от ключалки. Също така ни помага да се отървем от SAVEPOINT. Оператор COMMIT може по желание да бъде придружен от оператор WORK (COMMIT WORK), който се добавя само за подобряване на четливостта на кода.
В случай, че транзакцията се провали по време на COMMIT и състоянието на транзакцията не е известно, по това време COMMENT текстът в PL / SQL кода се съхранява в речник на данни заедно с идентификатора на транзакцията.
Синтаксис за транзакция COMMIT:
COMMIT;
Нека разгледаме таблица, наречена УЧИТЕЛИ.
Създадохме таблицата TEACHERS с помощта на SQL израза, даден по-долу:
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Вмъкнете стойности в тази таблица и след това ангажирайте транзакцията по следния начин:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
След това се изпълнява заявката по-долу:
как да отворите eps файла в Windows 10
SELECT * FROM TEACHERS;
Изход:
ВРЪЩАНЕ, за да отмените промените
Ако настоящата транзакция приключи с оператор ROLLBACK, тя ще отмени всички модификации, които трябва да се извършат в транзакцията.
Операторът ROLLBACK има следните характеристики, изброени по-долу:
- Базата данни се възстановява с първоначалното си състояние с оператор ROLLBACK, в случай че погрешно сме изтрили важен ред от таблицата.
- В случай на изключение, което е довело до неуспешно изпълнение на SQL оператор, операторът ROLLBACK ни позволява да преминем към началната точка на програмата, откъдето можем да предприемем коригиращи мерки.
- Актуализациите, направени в базата данни без оператор COMMIT, могат да бъдат отменени с оператор ROLLBACK.
Синтаксис за РЕАКТИРАНЕ на транзакции:
ROLLBACK;
Синтаксис за ОБРАТНА ТРАНЗАЦИЯ със SAVEPOINT:
ROLLBACK (TO SAVEPOINT );
Ето, save_n е името на SAVEPOINT.
Нека разгледаме таблицата УЧИТЕЛИ, която създадохме по-рано.
Прилагане на код с ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
След това се изпълнява заявката по-долу:
SELECT * FROM TEACHERS;
Резултатът от горния код трябва да бъде:
В горния код изпълнихме оператор DELETE, който трябва да изтрие записа на учителя с CODE, равен на 3. Въпреки това, поради оператора ROLLBACK, няма влияние върху базата данни и изтриването не е извършено.
SAVEPOINT за връщане на частични промени
SAVEPOINT дава име и идентификация на настоящата точка за обработка на транзакции. Обикновено се свързва с оператор ROLLBACK. Позволява ни да върнем някои секции на транзакция, като не докосваме цялата транзакция.
Докато прилагаме ROLLBACK към SAVEPOINT, всички SAVEPOINTS, включени след този конкретен SAVEPOINT, се премахват (т.е. ако сме маркирали три SAVEPOINTS и сме приложили ROLLBACK на втория SAVEPOINT, автоматично ще се изтрие третият SAVEPOINT.)
Изразът COMMIT или ROLLBACK изтрива всички SAVEPOINTS. Имената, дадени на SAVEPOINT, са недекларирани идентификатори и могат да бъдат приложени няколко пъти в рамките на транзакция. Има движение на SAVEPOINT от старата към настоящата позиция вътре в транзакцията.
ROLLBACK, приложен към SAVEPOINT, засяга само текущата част от транзакцията. По този начин SAVEPOINT помага за разделяне на продължителна транзакция на малки секции чрез позициониране на точки за проверка.
Синтаксис за транзакция SAVEPOINT:
SAVEPOINT ;
Тук, save_n е името на SAVEPOINT.
Нека отново разгледаме таблицата УЧИТЕЛИ, която създадохме по-рано.
Прилагане на код на ROLLBACK С SAVEPOINT:
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL'); SAVEPOINT s; INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE'); INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD'); ROLLBACK TO s; INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY'); COMMIT;
След това се изпълнява заявката по-долу:
SELECT * FROM TEACHERS;
Резултатът от горния код трябва да бъде:
В горния код, след ROLLBACK със SAVEPOINT с се прилага, са вмъкнати само още два реда, т.е.учители с CODE 4 и 7, съответно. Моля, обърнете внимание, че по време на създаването на таблицата са добавени учители с кодове 1, 2 и 3.
Таблица LOCK в PL / SQL
Оператор LOCK в PL / SQL позволява заключване на пълната база данни в режим на заключване. Това определя дали искаме да споделим или забраним достъпа до таблицата.
Нека вземем пример за заключваща маса:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Горната заявка заключва таблицата TEACHERS в режим на споделяне на редове. Режимът за споделяне на редове дава разрешение за едновременно използване на таблица. Не позволява на потребителите да заключват пълната таблица за индивидуална употреба. След изпълнението на COMMIT или ROLLBACK, заключванията на таблицата се освобождават. Ключовата дума NOWAIT се използва, за да се спомене, че на базата данни не е позволено да чака освобождаване на заключване.
Режимът на заключване е важен, за да се заключи какви други ключалки могат да бъдат приложени към маса.
Нека обсъдим някои режими LOCK, налични в PL / SQL:
Сл. Не | ЗАКЛЮЧЕН РЕЖИМ | ПРЕДНАЗНАЧЕНИЕ |
---|---|---|
1 | РЯДНО СПОДЕЛЯНЕ | Той позволява едновременно използване на таблицата на множество потребители. Потребителите обаче нямат право да заключват пълната таблица за изключителна употреба. |
две | ЕКСКЛУЗИВЕН РЕД | Той позволява едновременно използване на таблицата на множество потребители. Потребителите обаче нямат право да заключват пълната таблица за изключителна употреба в режим на споделяне. |
3 | СПОДЕЛЕТЕ АКТУАЛИЗАЦИЯ | Той позволява едновременно използване на таблицата на множество потребители. Потребителите обаче нямат право да заключват пълната таблица за изключителна употреба. |
4 | ДЯЛ | Позволява ни да изпълняваме множество запитвания в таблицата едновременно. Потребителите обаче нямат право да модифицират заключената таблица. |
5 | СПОДЕЛЕТЕ РЯД ЕКСКЛУЗИВ | Позволява на потребителите с достъп само за четене до таблицата. Не им е позволено да променят таблицата или да заключват таблицата в режим на споделяне. |
6 | ИЗКЛЮЧИТЕЛЕН | Позволява само изпълнение на заявки в заключената таблица. |
Автоматичен контрол на транзакциите в PL / SQL
Можем да направим конфигурация така, че оператор COMMIT да се изпълнява по подразбиране всеки път, когато се изпълнява оператор INSERT или DELETE. Това се прави чрез превръщане на променливата на средата AUTOCOMMIT в положение ON.
Синтаксис:
SET AUTOCOMMIT ON;
Отново, това може да бъде изключено, като направите променливата на средата AUTOCOMMIT на OFF.
Синтаксис:
SET AUTOCOMMIT OFF;
Често задавани въпроси и отговори
В # 1) Каква е транзакцията в PL SQL?
Отговор: Транзакцията е група от SQL изчисления на данни, които работят като атомна единица. Всички транзакции имат атомен характер, които са или ангажирани, или обезпечени.
В # 2) Какво е COMMIT в PL SQL?
Отговор: Изразът COMMIT се използва за извършване на постоянна промяна в базата данни от настоящата транзакция. Това прави модификацията на базата данни видима за потребителите.
В # 3) Как завършвате транзакция?
Отговор: Транзакцията завършва с изрично изявление COMMIT или ROLLBACK. Също така може да бъде прекратен безусловно след стартиране на DML оператор.
В # 4) Можем ли да фиксираме в тригер?
Отговор: Да, можем да се ангажираме в тригер само ако тази транзакция на транзакция е самостоятелна от своята транзакция майка.
В # 5) Дали SELECT е транзакция?
Отговор: Да, SELECT е транзакция, имаща всички характеристики на транзакция.
В # 6) Как да върна транзакция в Oracle?
Отговор: Трябва да стартираме оператор ROLLBACK, за да върнем транзакция в Oracle. Той отменя всички промени, направени от транзакцията в базата данни и ще бъде възстановен в първоначалното си състояние.
Заключение
В този урок обсъдихме подробно някои основни концепции за PL SQL транзакции, които са от съществено значение за управлението на PL SQL транзакции. Покрихме следните теми, изброени по-долу:
- Транзакция.
- Използване на COMMIT в транзакция.
- Какво представлява ROLLBACK при транзакция?
- Използване на ROLLBACK със SAVEPOINT при транзакция.
- LOCK таблица.
Препоръчително четене
- PL SQL Урок за начинаещи с примери | Какво е PL / SQL
- Разработване на приложения на базата данни на Oracle: Oracle SQL & PL / SQL
- PL SQL пакет: Урок за Oracle PL / SQL пакет с примери
- Разлика между SQL Vs MySQL Vs SQL Server (с примери)
- PL SQL Datetime Format: Функции за дата и час в PL / SQL
- Пълно ръководство за PL SQL обработка на изключения с примери
- SQL срещу NoSQL Точни разлики и знайте кога да използвате NoSQL и SQL
- Урок за базата данни на Oracle - Какво представлява базата данни на Oracle?