зафиксирован (или отменен) в базе данных как единое целое.
Изменение содержимого таблиц 273
Примером транзакции может служить перевод денег с одного банковского
счета на другой. Один оператор UPDATE должен уменьшить количество
денег на одном банковском счете, а другой оператор UPDATE на ту же самую
сумму увеличить количество денег на другом банковском счете. Как вычитание,
так и добавление денег должны быть зафиксированы в базе данных
(с помощью оператора COMMIT) либо отменены (оператором ROLLBACK), так
как в противном случае деньги будут потеряны. В простейшем примере
используется всего два оператора UPDATE, но более реалистичные транзакции
могут состоять из большого числа операторов INSERT, UPDATE и DELETE.
Фиксирование и откат транзакций
Чтобы сделать постоянными результаты операторов SQL, из которых состоит
транзакция, нужно с помощью оператора COMMIT выполнить операцию
фиксации. Чтобы отменить результаты операторов SQL, необходимо
выполнить их откат с помощью оператора ROLLBACK, который возвращает
строки к их первоначальному виду.
В следующем примере в таблицу customers включается новая строка, а
затем эти изменения становятся постоянными с помощью оператора
COMMIT:
□ INSERT INTO customers
values(6, ‘Fred’, ‘Green’, ‘01-JAN-1970', ‘800-555-12-15’);
1 row created.
COMMIT;
Commit complete.
Следующий пример обновляет строку в таблице customers, а затем отменяет
эти изменения, выполнив оператор ROLLBACK:
□ UPDATE customers
SET firs t_ n am e = ‘ Edward’
WHERE customer_id = 1;
1 row updated.
ROLLBACK;
R o llb a c k complete.
Убедиться в том, что в таблице customers сделаны соответствующие изменения,
можно с помощью следующего запроса:
□ SELECT *
FROM customers;
CUST0MER_ID FIRST_NAME LAST_NAME DOB PHONE
1 John
2 Cynthia
Brown
Green
White
Black
Blue
Green
01-JAN-65 800-555-1211
0 5 -FEB-68 800-555-1212
16-3 Steve MAR—71 800-555-1213
4 G a il 800-555-1214
20-MAY-70
01-JAN-70 800-555-1215
5 Doreen
6 Fred
274 Глава 8
Результаты оператора INSERT, добавившего строку для покупателя № 6,
стали постоянными с помощью оператора COMMIT, а результаты оператора
UPDATE, изменившего имя покупателя № 1, были отменены с помощью оператора
ROLLBACK.
Начало и завершение транзакции
Транзакцией называется логическая единица работы, используемая для
разделения на части деятельности базы данных. У транзакции имеется и
начало, и конец. Она начинается, когда происходит одно из следующих
событий:
■ Вы подключаетесь к базе данных и выполняете первый оператор
DML (INSERT, UPDATE или DELETE).
■ Закончилась предыдущая транзакция, и вы ввели следующий оператор
DML.
Транзакция считается законченной, если произошло одно из следующих
событий:
■ Вы выполнили операцию ROLLBACK или COMMIT.
■ Вы выполнили оператор DML, например, CREATE TABLE, в этом случае
оператор COMMIT выполняется автоматически.
■ Вы выполнили оператор DML, например, оператор GRANT, в этом случае
оператор COMMIT выполняется автоматически (об операторе GRANT
см. в следующей главе).
■ Вы отключаетесь от базы данных. Если вы выходите из SQIifPlus, как
обычно, используя для этого команду EXIT, для вас автоматически выполняется
команда COMMIT. Если же SQITPlus завершается аварийно,
например, если вышел из строя компьютер, на котором выполнялась
SQITPlus, автоматически выполняется команда ROLLBACK. Это применимо
для любой программы, обращающейся к базе данных. Например,
если вы написали H a ja v a программу, которая обращается к базе
данных, и она вышла из строя, для нее будет автоматически выполнен
оператор ROLLBACK.
■ Вы выполнили оператор DML, который завершился аварийно, по
причине чего был автоматически выполнен оператор ROLLBACK для
этого конкретного оператора DML.
Совет Считается дурным тоном не завершать транзакцию явным оператором фиксации
или отката, так что не забудьте удостовериться, что вы включили в конец транзакции операторы
COMMIT или ROLLBACK.
Контрольные точки
В любой точке внутри транзакции можно установить контрольную точку.
Контрольные точки позволяют откатывать изменения именно до этого
места. Это может оказаться полезным, если есть очень продолжительная
транзакция. Дело в том, что, если допустить ошибку во время выполнения
Изменение содержимого таблиц 275
транзакции после того, как для нее установлена контрольная точка, не
нужно будет откатывать данные до самого начала транзакции. Контрольные