Rollback (SQL)
ROLLBACK (відкат) — оператор мови SQL, який є протилежністю до оператора COMMIT. Він скасовує зміни внесені під час поточної явної чи неявної транзакції до початку транзакції або точки збереження (англ. savepoint). Відкочування важливі для збереження цілісності бази даних, бо вони є засобом застосування якого дозволяє повернути базу даних до попереднього стану, навіть після внесення помилкових редагувань. Також вони критичні для відновлення після падінь сервера бази даних; база даних повертається в узгоджений стан шляхом відкочення будь-якої транзакції, яка була активною на момент падіння.
Microsoft SQL Server
USE tempdb;
GO
CREATE TABLE TestTransactionTable ([value] int;)
GO
DECLARE @TName varchar(20) = 'T_1';
--Наступний вираз починає іменовану транзакцію,
--вставляє два рядки і тоді відкочується
--ім'я транзакції задається через змінну @TName.
--Інший вираз поза межами іменованої транзакції вставляє два рядки.
--Запит виводить результат попередніх виразів.
BEGIN TRAN @TName
INSERT INTO TestTransactionTable VALUES(1), (2);
ROLLBACK TRAN @TName;
INSERT INTO TestTransactionTable VALUES(3),(4);
SELECT [value] FROM TestTransactionTable;
DROP TABLE TestTransactionTable;
--Results
--value
-------------
--3
--4
Oracle
-- DML вирази
savepoint savepoint_name_1;
-- DML вирази
savepoint savepoint_name_2;
-- DML вирази
...
savepoint savepoint_name_n;
-- DML вирази
rollback to savepoint savepoint_name_n
Каскадний відкіт (англ. cascading rollback) трапляється в системах баз даних коли транзакція (T1) спричиняє помилку і треба відкотити зміни. Через невдачу T1, інші транзакції залежні від її дій, також треба відкотити. Тобто невдача однієї транзакції викликає відкіт багатьох.
Практичні підходи до відновлення баз даних гарантують безкаскадний відкіт, отже каскадні відкоти не є бажаним результатом.
T | T1 | T2 |
---|---|---|
прочитати (A) | ||
прочитати (B) | ||
записати (A) | ||
прочитати (A) | ||
записати (A) | ||
прочитати (A) |
Якщо Т зазнає невдачі це призводить до відкочування T1 і T2. Це приклад каскадного відкоту.
- ROLLBACK TRANSACTION (Transact-SQL) [Архівовано 1 вересня 2012 у Wayback Machine.] (англ.)
- Виконання SQL операцій з PL/SQL. Використання ROLLBACK [Архівовано 25 травня 2012 у Wayback Machine.] (англ.)
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |