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 - -
SELECT * FROM TEACHERS;
Вихід:
ЗВЕРНЕННЯ, щоб скасувати зміни
Якщо поточна транзакція закінчується оператором ROLLBACK, вона скасує всі зміни, які мають відбутися в транзакції.
Оператор ROLLBACK має такі функції, як зазначено нижче:
- База даних відновлюється у вихідному стані за допомогою оператора ROLLBACK, якщо ми помилково видалили важливий рядок із таблиці.
- У разі винятку, який призвів до помилки виконання оператора SQL, оператор ROLLBACK дозволяє нам перейти до початкової точки програми, звідки ми можемо вжити виправних заходів.
- Оновлення, зроблені в базі даних без оператора COMMIT, можуть бути скасовані за допомогою оператора ROLLBACK.
Синтаксис транзакції ROLLBACK:
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 від старого до поточного положення.
Відкат, застосований до SAVEPOINT, впливає лише на поточну частину транзакції. Таким чином, SAVEPOINT допомагає розділити тривалу транзакцію на невеликі ділянки, розміщуючи точки перевірки.
Синтаксис транзакції SAVEPOINT:
SAVEPOINT ;
Ось, save_n це ім'я SAVEPOINT.
Знову розглянемо таблицю ВЧИТЕЛІВ, яку ми створили раніше.
Реалізація коду ЗВЕРНЕННЯ З 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 s застосовано, було вставлено лише ще два рядки, тобто викладачі з КОДАМИ 4 та 7 відповідно. Зверніть увагу, що під час створення таблиці були додані викладачі з кодами 1, 2 та 3.
Таблиця LOCK у PL / SQL
Оператор LOCK у PL / SQL дозволяє блокувати повну базу даних у режимі блокування. Це визначає, чи ми хочемо надати спільний доступ або заборонити доступ до таблиці.
Візьмемо приклад таблиці замків:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Наведений вище запит блокує таблицю ВЧИТЕЛІВ у режимі спільного використання рядків. Режим спільного використання рядків дає дозвіл на одночасне використання таблиці. Це не дозволяє користувачам блокувати повну таблицю для індивідуального використання. Після виконання COMMIT або ROLLBACK блокування таблиці звільняються. Ключове слово NOWAIT використовується, щоб згадати, що базі даних не дозволяється чекати звільнення блокування.
Режим блокування важливий, щоб зробити висновок, які інші замки можна застосувати до столу.
Давайте обговоримо деякі режими БЛОКУВАННЯ, доступні в PL / SQL:
Сл. Ні | РЕЖИМ БЛОКУВАННЯ | МЕТА |
---|---|---|
1 | РЯДНИЙ ПІДПИС | Це дозволяє одночасно користуватися таблицею кільком користувачам. Однак користувачам заборонено блокувати повну таблицю для ексклюзивного використання. |
два | РЯД ЕКСКЛЮЗИВ | Це дозволяє одночасно користуватися таблицею кільком користувачам. Однак користувачам заборонено блокувати повну таблицю для ексклюзивного використання в режимі спільного використання. |
3 | ПОДІЛИТИСЯ ОНОВЛЕННЯМ | Це дозволяє одночасно користуватися таблицею кільком користувачам. Однак користувачам заборонено блокувати повну таблицю для ексклюзивного використання. |
4 | ПОДІЛИТИСЯ | Це дозволяє нам виконувати кілька запитів у таблиці одночасно. Однак користувачам заборонено змінювати заблоковану таблицю. |
5 | ПОДІЛИТИСЯ РЯДКОМ ЕКСКЛЮЗИВ | Це надає користувачам доступ до таблиці лише для читання. Їм заборонено змінювати таблицю або блокувати таблицю в режимі спільного використання. |
6 | ЕКСКЛЮЗИВ | Це дозволяє виконувати запити лише в заблокованій таблиці. |
Автоматичне управління транзакціями в PL / SQL
Ми можемо зробити конфігурацію таким чином, щоб оператор COMMIT виконувався за замовчуванням при кожному запуску оператора INSERT або DELETE. Це робиться шляхом внесення змінної середовища AUTOCOMMIT до значення ON.
Синтаксис:
SET AUTOCOMMIT ON;
Знову ж це можна вимкнути, зробивши для середовища AUTOCOMMIT змінною значення OFF.
Синтаксис:
SET AUTOCOMMIT OFF;
Часті запитання та відповіді
Q # 1) Що таке транзакція в PL SQL?
Відповідь: Транзакція - це група операторів обчислення даних SQL, які працюють як атомна одиниця. Усі транзакції носять атомний характер, які або здійснюються, або відхиляються.
Q # 2) Що таке COMMIT у PL SQL?
Відповідь: Оператор COMMIT використовується для постійного внесення змін до бази даних за допомогою цієї транзакції. Це робить модифікацію бази даних видимою для користувачів.
Запитання №3) Як закінчити транзакцію?
Відповідь: Транзакція закінчується явно оператором COMMIT або ROLLBACK. Його також можна безумовно закінчити після запуску оператора DML.
Q # 4) Чи можемо ми зафіксувати тригер?
Відповідь: Так, ми можемо зафіксувати тригер лише в тому випадку, якщо транзакція тригера є автономною від батьківської транзакції.
Q # 5) Чи є SELECT транзакцією?
Відповідь: Так, SELECT - це транзакція, що має всі характеристики транзакції.
Запитання №6) Як відмовити транзакцію в Oracle?
c # питання співбесіди для досвідчених
Відповідь: Нам потрібно запустити оператор ROLLBACK, щоб відмовити транзакцію в Oracle. Він скасовує всі зміни, внесені транзакцією до бази даних, і відновлює початковий стан.
Висновок
У цьому посібнику ми детально обговорили деякі основні концепції транзакцій PL SQL, які є важливими для управління транзакціями PL SQL. Ми розглянули наступні теми, перелічені нижче:
- Транзакція.
- Використання COMMIT у транзакції.
- Що таке ВІДКЛЮЧЕННЯ транзакції?
- Використання 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 Формат дати та часу: Функції дати та часу в PL / SQL
- Повне керівництво по обробці винятків PL SQL з прикладами
- SQL проти NoSQL Точні відмінності та знати, коли використовувати NoSQL та SQL
- Підручник з бази даних Oracle - Що таке база даних Oracle?