Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность
- Consistency – Согласованность
- Isolation – Изолированность
- Durability – Долговечность
Атомарность
гарантирует, что любая транзакция будет зафиксирована только целиком (полностью). Если одна из операций в последовательности не будет выполнена, то вся транзакция будет отменена. Тут вводится понятие “отката” (rollback). Т.е. внутри последовательности будут происходить определённые изменения, но по итогу все они будут отменены (“откачены”) и по итогу пользователь не увидит никаких изменений.
Согласованность
Согласованность означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты.
Изолированность
Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности” (транзакция изолируется не полностью).
Долговечность
Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).
CREATE TABLE T( id INT NOT NULL PRIMARY KEY, s varchar(40), si smallint); INSERT INTO T(id, s) VALUES (1, 'fist'); INSERT INTO T(id, s) VALUES (2, 'second'); INSERT INTO T(id, s) VALUES (3, 'third'); SELECT * FROM T; --transaktiooni loomine begin transaction; INSERT INTO T(id, s) VALUES (4, 'fourd'); SELECT * FROM T; --TEGEVUSE TAGASI VÕTMINE ROLLBACK; SELECT * FROM T; --loome transaktiooni, mis võtab tagasi kustutatud kirjed BEGIN TRANSACTION; DELETE FROM T where id>1; ROLLBACK; SELECT * FROM T;
xampp
START TRANSACTION; --tabeli loomine CREATE TABLE developers ( ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(255), SPECIALTY VARCHAR(255), EXPERIENCE INT, SALARY INT ); --tabeli kirjeldus START TRANSACTION; INSERT INTO developers (ID, NAME, SPECIALTY, EXPERIENCE, SALARY) VALUES (1, 'Eugene Suleimanov', 'Java', 2, 2500), (2, 'Peter Romanenko', 'Java', 3, 3500), (3, 'Andrei Komarov', 'C++', 3, 2500), (4, 'Konstantin Geiko', 'C#', 2, 2000), (5, 'Asya Suleimanova', 'UI/UX', 2, 1800), (6, 'Ivan Ivanov', 'C#', 1, 900), (7, 'Ludmila Geiko', 'UI/UX', 2, 1800); COMMIT;

--kustutamine START TRANSACTION; DELETE FROM developers WHERE SPECIALTY = 'C++'; COMMIT;

ROLLBACK;
sql server
--tabeli loomine create table person( id int not null primary key, name varchar(50) not null) insert into person values(101,'Akash') insert into person values(102,'Samir') select * from person begin transaction insert into person values(103,'Hasan')

ROLLBACK;

--uue kasutaja lisamine begin transaction insert into person values(103,'Hasan') COMMIT;

--uuendamine BEGIN TRANSACTION UPDATE person set name='sima' where id='103'

ROLLBACK;

--kustutamine BEGIN TRANSACTION delete person where id=103 save transaction sav1

--kasutajate lisamine BEGIN TRANSACTION insert into person values(105,'Hasan') insert into person values(106,'Hasan') insert into person values(107,'Hasan') save transaction sav2;

rollback transaction sav1;

commit;