ВУЗ:
Составители:
Рубрика:
115
4.3.5. Транзакции
Транзакцией называется выполнение последовательности команд (SQL-
конструкций) в базе данных, которая либо фиксируется при успешной реализа-
ции каждой команды, либо отменяется при неудачном выполнении хотя бы од-
ной команды. Большинство современных СУБД поддерживают механизм тран-
закций, и подавляющее большинство клиентских приложений, работающих с
ними, используют для выполнения своих команд транзакции.
Возникает вопрос – зачем нужны транзакции? Представим себе, что в ба-
зу данных BDTur_firm2 требуется вставить связанные записи в две таблицы –
«Туристы» и «Информация о туристах». Если запись, вставляемая в таблицу
«Туристы», окажется неверной, например, из-за неправильно указанного кода
туриста, база данных не позволит внести изменения, но при этом в таблице
«Информация о туристах» появится ненужная запись. Рассмотрим такую си-
туацию на примере.
Запустим Management Studio, в новом бланке введем запрос для добавле-
ния двух записей:
INSERT INTO Туристы ([Код туриста], Фамилия, Имя, Отчество)
VALUES (8, 'Тихомиров', 'Андрей', 'Борисович');
INSERT INTO [Информация о туристах]([Код туриста], [Серия паспорта], Город, Страна,
Телефон, Индекс)
VALUES (8, 'CA 1234567', 'Новосибирск', 'Россия', 1234567, 996548);
Две записи успешно добавляются в базу данных:
(1 row(s) affected) //или (строк обработано: 1)
(1 row(s) affected) //или (строк обработано: 1)
Теперь спровоцируем ошибку – изменим код туриста только во втором
запросе:
INSERT INTO Туристы ([Код туриста], Фамилия, Имя, Отчество)
VALUES (8, 'Тихомиров', 'Андрей', 'Борисович');
INSERT INTO [Информация о туристах]([Код туриста], [Серия паспорта], Город, Страна,
Телефон, Индекс)
VALUES (9, 'CA 1234567', 'Новосибирск', 'Россия', 1234567, 996548);
Появляется сообщение о невозможности вставки первой записи с уже
имеющимся значением ключевого поля. Вторая запись, однако, добавляется в
таблицу:
Сообщение 2627, уровень 14, состояние 1, строка 1
Violation of PRIMARY KEY constraint 'PK_Туристы'. Cannot insert duplicate key in object
'dbo.Туристы'.
The statement has been terminated.
(строк обработано: 1)
Страницы
- « первая
- ‹ предыдущая
- …
- 113
- 114
- 115
- 116
- 117
- …
- следующая ›
- последняя »