русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Транзакции, конкурирующие запросы


Дата добавления: 2015-07-09; просмотров: 1591; Нарушение авторских прав


Под транзакцией понимается некоторая группа DML команд. Все изменения сделанные ими, сохраняются в отдельной области памяти до окончательного подтверждения изменений (успешное завершение транзакции), либо до их отмены. Если во время транзакции делается запрос на выборку данных, то создается отдельное представление. Для чего нужны транзакции? В англоязычной литературе концепция транзакций описывается аббревиатурой ACID:

· атомарность - выполнение или не выполнение всех DML команд входящих в транзакцию;

· целостность БД - завершение транзакции не должно нарушать целостность БД;

· изоляция - можно отображать либо исходные данные, которые были до начала транзакции, либо новые данные после выполнения транзакции;

· сохранность данных - если пользователю пришло подтверждение выполнения транзакции, то его изменения не будут отменены по каким-либо причинам.

В стандарте предусмотрены следующие команды управления транзакциями:

· START TRANSACTION - явное начало транзакции. Команда не поддерживается в Oracle. В MySQL и PostgreSQL можно использовать синоним begin (не путать с блоковым оператором begin, после которого нет разделителя). Если начало транзакции явно не указано, то PostgreSQL считает каждую DML команду отдельной транзакцией. В Oracle транзакции следуют одна за другой. То есть первая DML команда открывает транзакцию, следующие команды становятся частью этой транзакции, пока не будет вызвана команда commit или rollback. Если режим автоподтверждения (autocommit) включен, то MySQL работает также как PostgreSQL, иначе как Oracle;

· COMMIT - завершить транзакцию, применяя все сделанные изменения;

· ROLLBACK - завершить транзакцию, отменяя все сделанные изменения. Если точка отката не указана, то отменяется вся текущая транзакция;

· SAVEPOINT - сохранить точку отката;



· RELEASE SAVEPOINT - уничтожить точку отката, что позволяет освободить часть ресурсов до завершения транзакции;

· SET TRANSACTION - устанавливает характеристики текущей транзакции. Если транзакция не начата явно, то эта команда игнорируется в PostgreSQL.

Ниже приведен пример использования некоторых команд внутри выполняемого блока в Oracle.

BEGIN ... SAVEPOINT pt1; -- сохранили точку отката ...EXCEPTION WHEN VALUE_ERROR THEN -- неправильное значение -- SAVEPOINT можно опустить ROLLBACK TO SAVEPOINT pt1; WHEN OTHERS THEN -- другие исключения ...END;

Команда select ... for update, блокирует записи таблицы от изменений другими пользователями. При этом нельзя использовать другие конструкции как distinct, group by.

-- блокируем запись для обновленияSELECT * FROM tbl1 WHERE id=2 FOR UPDATE; -- обновляем записи через UPDATE... -- завершаем транзакцию, блокировка снимается COMMIT;

Для блокировки нескольких таблиц в различных режимах используется команда lock table. Блокировка снимается при завершении текущей транзакции.

-- блокируем таблицу в режиме SHARE-- запросы данных разрешены-- изменение таблицы запрещено-- блокировать таблицу в режиме EXCLUSIVE запрещеноLOCK TABLE tbl2 IN SHARE MODE; -- блокируем таблицу в режиме EXCLUSIVE-- и не ждем, если другой пользователь уже заблокировал таблицуLOCK TABLE tbl1 IN EXCLUSIVE MODE NOWAIT;

В MySQL поддержка транзакций зависит от используемого способа хранения таблиц. Так для таблиц на движке InnoDB возможны транзакции, а для MyISAM нет. В последнем случае отсутствие одновременного обновления одних и тех же данных разными пользователями гарантируется самой СУБД. Невозможность отката, означает, необходимость самостоятельной предварительной проверки на ошибки перед внесением изменений. Такой подход увеличивает скорость работы от трех до пяти раз за счет уменьшения использования памяти, дискового пространства и процессора.

Схема

Объект схема позволяет логически сгруппировать множество других объектов. Доступ к объектам схемы осуществляется через точку. По стандарту в команду создания схемы позволяется вкладывать дополнительные команды, создающие различные объекты схемы и раздающие права на эти объекты. А также владельцем всех объектов схемы должен являться владелец схемы.



<== предыдущая лекция | следующая лекция ==>
Числа прописью | PostgreSQL


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.619 сек.