SQL transaktsioonid

Транзакция — это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.

Транзакция – это распространение изменений в БД.

Основные концепции транзакции описываются аббревиатурой ACID

  • Atomicity — Атомарность
  • Consistency — Согласованность
  • Isolation — Изолированность
  • Durability — Долговечность

Атомарность

гарантирует, что любая транзакция будет зафиксирована только целиком (полностью).

Согласованность

Согласованность означает, что любая завершённая транзакция фиксирует только допустимые результаты. Например, при переводе денег с одного счёта на другой, в случае, если деньги ушли с одного счёта, они должны прийти на другой.

Изолированность

Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. (транзакция изолируется не полностью).

Долговечность

Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).

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

  • COMMIT
    Сохраняет изменения
  • ROLLBACK
    Откатывает (отменяет) изменения
  • SAVEPOINT
    Создаёт точку к которой группа транзакций может откатиться
  • SET TRANSACTION
    Размещает имя транзакции.

Они не могут быть использованы во время создания, изменения или удаления таблицы.

Любое успешное выполнение транзакции заканчивается командой COMMIT (фиксация), в то время как неудачное выполнение должно быть закончено командой ROLLBACK (откат), которая автоматически восстанавливает в базе данных все изменения, внесенные транзакцией.

Преимущество команды ROLLBACK (в стандартном SQL) состоит в том, что когда запрограммированная в транзакции логика приложения не может быть завершена, то нет никакой необходимости в проведении серии обратных операций отдельными командами, работа может быть просто отменена командой ROLLBACK, действие которой будет всегда успешно выполняться. Незавершенные транзакции в случае разрыва соединения, завершения программы или отказа системы будут автоматически выполнять откат системы.

Некоторые СУБД (SQL-сервер, MySQL/InnoDB, PostgreSQL) работают в режиме AUTOCOMMIT по умолчанию.

MySQL по умолчанию работает в режиме AUTOCOMMIT.

Много раз мы не можем откатывать.

Плюс «START TRANSACTION»: Позволяет объединить несколько SQL операций в одну транзакцию.

Минус «START TRANSACTION» по сравнению с «SET AUTOCOMMIT»: Требует управления и создаёт лишний риск забыть «COMMIT» или «ROLLBACK». «SET AUTOCOMMIT» автоматически завершает каждую операцию.

xamp

Insert into dev(id,name, specialyti, experince,salary)VALUES(1,'Eugene Suleimanov', 'Java',2,2500);
Insert into dev(id,name, specialyti, experince,salary)VALUES(2,'Peter Romanenko', 'Java',3,3500);
Insert into dev(id,name, specialyti, experince,salary)VALUES(3,'Andrei Komarov', 'C++',3,2500);
Insert into dev(id,name, specialyti, experince,salary)VALUES(4,'Konstantin Geiko', 'C#',2,2000);
Insert into dev(id,name, specialyti, experince,salary)VALUES(5,'Asya Suleimanova', 'UI/UX',2,1800);
Insert into dev(id,name, specialyti, experince,salary)VALUES(6,'Ivan Ivanov', 'C#',1,900);
Insert into dev(id,name, specialyti, experince,salary)VALUES(7,'Ludmila Geiko', 'UI/UX',2,1800);
CREATE TABLE dev (
id int PRIMARY KEY,
name varchar(100),
specialyti varchar(30),
experince int,
salary int);

SQL SERVER