Управление транзакциями и блокировками
Транзакция — это последовательность операторов SQL, выполняющихся как единая операция, которая не прерывается другими клиентами. То есть, пока происходит работа с записями таблицы (их обновление или удаление), никто другой не может получить доступ к этим записям. Транзакции позволяют объединять операторы в группу и гарантировать, что все операции внутри группы будут выполнены успешно. Если часть транзакции выполняется со сбоем, результаты выполнения всех операторов транзакции до места сбоя отменяются, приводя базу данных к виду, в котором она была до выполнения транзакции. Следует обратить внимание, что транзакции имеют смысл только в случае с типами таблиц, которые их поддерживают: InnoDB и BDB. Если существующие таблицы имеют другой тип, например, MyISAM, для работы с транзакциями его следует изменить. Системы, поддерживающие возможности транзакций, часто еще характеризуют как обеспечивающие свойства ACID (ACID является сокращением Atomatic (атомарный), Consistent (целостный), Isolated (изолированный), Durable (длительный)).
- — Атомарность. Операторы транзакции формирует единый логический блок, каждый элемент которого невозможно выполнить без выполнения всех остальных элемент элементов блока.
- — Целостность. БД является целостной до и после выполнения транзакции
- — Изоляция. Отдельные транзакции не влияют на работу друг друга.
- — Длительность. При выполнении транзакции все ее результаты сохраняются в БД.
Листинг 3.1. SQL-команда для создания транзакции.
SET Autocommit = 0.
INSERT INTO tovari VALUES (4073, 1026, 3041, 'Plastilin', 4, 20, 'prisutstvuet');
INSERT INTO tovari VALUES (4074, 1025, 3045, 'Bumaga A3', 22, 10, 'prisutstvuet').
Рис 3.1. Результат запуска транзакций.
На рисунке 3.1. видно, что данные добавились по очереди после выполнение команда Auto commit.
Листинг 3.2. SQL-команда для создания транзакции.
START TRANSACTION;
INSERT INTO klient VALUES (2037, 'Sharipov S', 905 015 960, 'g.Khujand');
INSERT INTO klient VALUES (2038, 'Yusupov F', 987 718 880, 'n.Spitamen');
ROLLBACK;
На листинге 3.2. показано использования команда ROLLBACK который отменяет все действие с момента запуска.
Рис 3.2. Результат запуска транзакций.
По рисунке выше это не все действие транзакция, дальше посмотрим блокировки и разблокировка таблицы на чтения и изменения.
Листинг 3.3. SQL-код для блокировки таблиц.
LOCK TABLES tovari_info WRITE;
На листинге 3.3. приведен SQL команда который блокирует таблица tovari_info для ввода и изменения данных.
Листинг 3.4. SQL-код для разблокировки таблиц.
UNLOCK TABLES tovari_info READ;
На листинге 3.4 приведено SQL — код который разблокирует таблица tovari_info только для чтения данных.
В данной под главе были созданы два вида транзакций, и организована блокировка и разблокировка для некоторых из таблиц.