class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

основы sql

Dynamic SQL

прочее

транзакции
схема
управление аккаунтами
вывод в файл
информация о БД

Справочник по SQL

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

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

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

Ниже приведен пример использования некоторых команд внутри выполняемого блока в 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 нет. В последнем случае отсутствие одновременного обновления одних и тех же данных разными пользователями гарантируется самой СУБД. Невозможность отката, означает, необходимость самостоятельной предварительной проверки на ошибки перед внесением изменений. Такой подход увеличивает скорость работы от трех до пяти раз за счет уменьшения использования памяти, дискового пространства и процессора.


Рейтинг@Mail.ru