После всех вышеприведенных предостережений относительно операторов UPDATE и DELETE я вообще опасаюсь их использовать. Если я вдруг изменю все данные в таблице из-за пропущенного ключевого слова WHERE, есть ли какая-либо возможность отменить эти изменения?
Для таких серьезных опасений оснований нет, поскольку у вас имеется не слишком много возможностей для непоправимых изменений в базе данных, хотя для восстановления данных может потребоваться немалое время. На следующем уроке мы рассмотрим вопросы управления транзакциями, когда операции изменения данных можно либо принять как окончательные, либо отменить.
Является ли использование оператора INSERT единственным способом ввода данных в таблицу?
Нет, просто оператор INSERT определяется стандартом ANSI. Различные реализации SQL предлагают свои средства для ввода данных в таблицы. Например, в Oracle имеется утилита SQL*Loader. Многие реализации SQL для ввода данных имеют утилиту под названием IMPORT. На рынке имеется множество книг, в которых эти утилиты описываются в деталях.
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
Тесты
1. Используйте таблицу EMPLOYEEJTBL с заданной ниже структурой.
Что случится, если выполнить следующие операторы?
a insert into employee_tbl '('JACKSON', 'STEVE', '313546078', '3178523443');
б insert into employee_tbl values
('JACKSON1, 'STEVE', '313546078', '3178523443');
В insert into employee_tbl values
('MILLER', 'DANIEL', '230980012', NULL);
r insert into employee_tbl values
('TAYLOR', NULL, '445761212', '3179221331');
д. delete from employee_tbl;
e. delete from employee_tbl "where last_name = 'SMITH';
X. delete from employee_tbl where last_name = 'SMITH' and first_name = 'JOHN';
з. update employee_tbl
set last_name = 'CONRAD';
и. update employee_tbl
set last_name = 'CONRAD'
where last_name = 'SMITH';
K. update employee_tbl
set last_name = 'CONRAD', first_name = 'LARRY';
Л. update employee_tbl
set last_name = 'CONRAD' first_name = 'LARRY' where ssn = '313546078';
Упражнения
1. Ознакомьтесь с Приложением Г, "Операторы INSERT для данных в примерах книги". Выполните операторы INSERT для заполнения данными тех таблиц, которые были созданы в результате выполнения задания упражнения 1 урока 3. После этого вам будет легче разбираться в примерах и упражнениях книги.
2. Используйте таблицу EMPLOYEE_TBL с заданной ниже структурой.
Используя операторы DML, выполните следующее.
а. Измените SSN для служащего по имени Billy Pierce на 310239857.
б. Добавьте информацию о служащем по имени Ben Moore, тел. 317-5649880, SSN равен 313456789.
в Служащий по имени John Smith уволился, удалите соответствующую запись.
6-й час Управление транзакциями
На этом уроке мы обсудим понятия, лежащие в основе управления транзакциями базы данных.
Основными на этом уроке будут следующие темы.
• Определение транзакции
• Команды, используемые для управления транзакциями
• Синтаксис команд для осуществления транзакций и примеры
• Когда следует использовать команды управления транзакциями?
• Последствия недостаточно активного управления транзакциями
Что такое транзакция?
Транзакция - это набор действий, выполняемых по отношению к базе данных и рассматриваемый как единое целое. Транзакции являются единицами активности или, иначе, последовательностями действий, выполняемыми в своем логическом порядке. Они могут выполняться как вручную, так и в автоматическом режиме с помощью соответствующих программ. В реляционных базах данных, управляемых с помощью SQL, транзакции осуществляются с помощью команд DML (INSERT, UPDATE и DELETE), уже обсуждавшихся в ходе урока 5, "Манипуляция данными". Транзакция представляет собой внесение в базу данных некоторых изменений. Например, вы осуществляете транзакцию, когда для изменения информации об имени персоны выполняете оператор UPDATE по отношению к соответствующей таблице.
Транзакция может представляться одним оператором DML или группой таких операторов. При управлении группами транзакций под успешным завершением выполнения понимается успешное завершение выполнения всех транзакций группы, иначе все они считаются не завершившимися успешно.
Следующий список раскрывает природу транзакций.
• Каждая транзакция имеет начало и конец.
• Любую транзакцию можно либо сохранить, либо отменить.
• Если в любом месте по ходу выполнения транзакции одна из ее операций терпит неудачу, ни одна из составляющих транзакции не может быть сохранена в базе данных.
Способ, каким осуществляется требование начать выполнение транзакции, зависит от конкретной реализации SQL. Соответствующие инструкции вы найдете в документации по своей конкретной реализации. В стандарте ANSI средств для явной активизации начала работы транзакций не предусмотрено.
Что такое управление транзакциями?
Под управлением транзакциями понимается наличие возможностей для подконтрольного осуществления транзакций, выполняемых в рамках общей системы управления базой данных. Говоря о транзакциях, мы имеем в виду выполнение команд INSERT, UPDATE и DELETE, рассматривавшихся в ходе предыдущего урока.
При успешном завершении выполнения транзакции соответствующая таблица не изменяется немедленно, хотя соответствующие сообщения вывода создают именно такое впечатление. Для успешно завершившихся транзакций предусмотрены команды управления транзакциями, позволяющие либо сохранить в базе данных все предлагаемые транзакцией изменения, либо отменить их.
Управление транзакциями осуществляется с помощью следующих трех команд:
• COMMIT
• ROLLBACK
• SAVEPOINT Все они подробно обсуждаются в следующих разделах.
Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Например, оператор COMMIT не используется для подтверждения создания таблицы. При создании таблицы операция ее создания подтверждается автоматически. Точно так же нельзя с помощью команды ROLLBACK вернуть таблицу, только что удаленную из базы данных.
После завершения транзакции соответствующая ей информация сохраняется в специальном разделе (области) базы данных, предназначенной для хранения временных данных. Все соответствующие изменения будут сохраняться в этой области, пока к ним не будет применена соответствующая команда управления транзакциями. В результате применения такой команды соответствующие изменения либо вносятся в базу данных, либо отменяются, после чего область для хранения временных данных освобождается. Рис. 6.1 иллюстрирует процесс внесения изменений в реляционную базу данных.
Команда COMMIT
Команда COMMIT используется для передачи базе данных (сохранения) изменений, инспирированных транзакцией. Команда COMMIT сохраняет все транзакции, выполненные с момента предыдущего применения либо команды COMMIT, либо команды ROLLBACK.
Рис. 6.1. Область изменений, допускающих отмену Синтаксис команды следующий.
COMMIT [ WORK ];
Здесь обязательным является только ключевое слово COMMIT вместе с зависящим от реализации символом или командой, означающей завершение оператора. Ключевое слово WORK абсолютно необязательно - его единственной целью является придание команде более понятного вида.
Начнем с выбора всех данных из таблицы PRODUCTS_TMP.
SELECT * FROM PRODUCTS_TMP;
PROD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1
90 ФОНАРИ 14.5
15 КОСТЮМЫ В АССОРТИМЕНТЕ 10
9 СЛАДКАЯ КУКУРУЗА 1.35
6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45
87 ПЛАСТИКОВЫЕ ПАУКИ 1.05
119 МАСКИ В АССОРТИМЕНТЕ 4.95
1234 ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 5.95
2345 ПОЛОЧКА ИЗ ДУБА 59.99
11 строк выбраны. Затем удалим из таблицы все записи для товаров, стоимость которых меньше $14,00.
DELETE FROM PRODUCTSJTMP
WHERE COST < 14;
8 строк удалено.
Для того чтобы передать базе данных изменения, проведенные транзакцией, применяется оператор COMMIT:
COMMIT;
Передача выполнена.
При внесении в базу данных большого количества изменений настоятельно рекомендуется использовать команду COMMIT как можно чаще. Хотя слишком частое применение команды COMMIT приводит к существенному замедлению выполнения запрашиваемых операций. Не забывайте о том, что все изменения сначала размещаются в области, допускающей отмену изменений. Если эта область переполнится и не сможет принять очередную порцию информации о вносимых изменениях, база данных скорее всего совсем перестанет отвечать на запросы, что сделает дальнейшее осуществление транзакций вообще невозможным.