Учебники

PL / SQL — Транзакции

В этой главе мы обсудим транзакции в PL / SQL. Транзакция базы данных — это атомарная единица работы, которая может состоять из одного или нескольких связанных операторов SQL. Он называется атомарным, потому что изменения базы данных, вызванные операторами SQL, которые составляют транзакцию, могут быть либо зафиксированы, либо сделаны постоянными для базы данных, либо откатаны (отменены) из базы данных.

Успешно выполненный оператор SQL и зафиксированная транзакция не совпадают. Даже если оператор SQL выполняется успешно, если транзакция, содержащая этот оператор, не зафиксирована, его можно откатить, а все изменения, сделанные оператором (ами), можно отменить.

Начало и завершение транзакции

Транзакция имеет начало и конец . Транзакция начинается, когда происходит одно из следующих событий:

  • Первый оператор SQL выполняется после подключения к базе данных.

  • При каждом новом операторе SQL, который выдается после завершения транзакции.

Первый оператор SQL выполняется после подключения к базе данных.

При каждом новом операторе SQL, который выдается после завершения транзакции.

Транзакция заканчивается, когда происходит одно из следующих событий:

  • Выдается оператор COMMIT или ROLLBACK .

  • Выдается оператор DDL , например оператор CREATE TABLE ; потому что в этом случае COMMIT выполняется автоматически.

  • Выдается инструкция DCL , такая как инструкция GRANT ; потому что в этом случае COMMIT выполняется автоматически.

  • Пользователь отключается от базы данных.

  • Пользователь выходит из SQL * PLUS , выполнив команду EXIT , автоматически выполняется COMMIT.

  • SQL * Plus завершается ненормально, автоматически выполняется ROLLBACK .

  • Оператор DML терпит неудачу; в этом случае автоматически выполняется ROLLBACK для отмены этого оператора DML.

Выдается оператор COMMIT или ROLLBACK .

Выдается оператор DDL , например оператор CREATE TABLE ; потому что в этом случае COMMIT выполняется автоматически.

Выдается инструкция DCL , такая как инструкция GRANT ; потому что в этом случае COMMIT выполняется автоматически.

Пользователь отключается от базы данных.

Пользователь выходит из SQL * PLUS , выполнив команду EXIT , автоматически выполняется COMMIT.

SQL * Plus завершается ненормально, автоматически выполняется ROLLBACK .

Оператор DML терпит неудачу; в этом случае автоматически выполняется ROLLBACK для отмены этого оператора DML.

Передача транзакции

Транзакция становится постоянной с помощью команды SQL COMMIT. Общий синтаксис команды COMMIT:

COMMIT;

Например,

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

COMMIT;

Откат транзакций

Изменения, внесенные в базу данных без COMMIT, можно отменить с помощью команды ROLLBACK.

Общий синтаксис команды ROLLBACK —

ROLLBACK [TO SAVEPOINT < savepoint_name>]; 

Когда транзакция прерывается из-за какой-то беспрецедентной ситуации, например, сбоя системы, вся транзакция, так как фиксация автоматически откатывается. Если вы не используете точку сохранения , просто используйте следующую инструкцию для отката всех изменений:

ROLLBACK;

Точки сохранения

Точки сохранения — это своего рода маркеры, которые помогают разбить длинную транзакцию на более мелкие единицы путем установки некоторых контрольных точек. Установив точки сохранения в длинной транзакции, вы можете откатиться до контрольной точки, если это необходимо. Это делается с помощью команды SAVEPOINT .

Общий синтаксис команды SAVEPOINT —

SAVEPOINT < savepoint_name >;

Например

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 ); 
SAVEPOINT sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000; 
ROLLBACK TO sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 7; 
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 8; 

COMMIT;

ROLLBACK TO sav1 — этот оператор откатывает все изменения до точки, где вы отметили точку сохранения sav1.

После этого начнутся новые изменения.

Автоматический контроль транзакций

Чтобы выполнить COMMIT автоматически при выполнении команды INSERT, UPDATE или DELETE , вы можете установить переменную среды AUTOCOMMIT как —

SET AUTOCOMMIT ON; 

Вы можете отключить режим автоматической фиксации, используя следующую команду —