Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность(Все операции внутри транзакции выполняются полностью или не выполняются вовсе)
- Consistency – Согласованность(Согласованность с системами баз данных, проложениями и тд)
- Isolation – Изолированность(Результаты транзакции не видны другим, пока она не завершится)
- Durability – Долговечность
Для управления транзакциями используются следующие команды:
- COMMIT-Сохраняет изменения
- ROLLBACK-Откатывает (отменяет) изменения
- SAVEPOINT-Создаёт точку к которой группа транзакций может откатиться
- SET TRANSACTION-Размещает имя транзакции.
Пример в sql

ROLLBACK


delete

update

Näide XAMPP’is
XAMPP’is me vahetame begin transaction – start transaction



Ülesanne transaktsioonid
Loome uue tabeli
CREATE TABLE developers (
ID INT PRIMARY KEY,
NAME VARCHAR(50),
SPECIALTY VARCHAR(20),
EXPERIENCE INT,
SALARY INT
);
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),
(7, 'Ivan Ivanov', 'C#', 1, 900),
(8, 'Ludmila Geiko', 'UI/UX', 2, 1800);

DELETE FROM developers
WHERE SPECIALTY = 'C++';
COMMIT;
select * from developers;

Ülesanne video järgi
esimene tabel
CREATE TABLE orders(
orderNumber INT,
orderDate DATE,
requiredDate DATE,
shippedDate DATE,
status VARCHAR(20),
comments TEXT,
customerNumber INT
);
INSERT INTO orders (orderNumber, orderDate, requiredDate, shippedDate, status, comments, customerNumber)
VALUES
(10223, '2004-02-20', '2004-02-29', '2004-02-24', 'Shipped', NULL, 114),
(10224, '2005-05-09', '2005-09-12', '2005-05-13', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119);
select * from orders;

Teine tabel
CREATE TABLE orderdetails (
orderNumber INT,
productCode VARCHAR(20),
quantityOrdered INT,
priceEach DECIMAL(10,2),
orderLineNumber INT
);
INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber) VALUES
(10100, 'S18_1749', 30, 136.00, 3),
(10100, 'S18_2248', 50, 55.09, 2),
(10100, 'S18_4409', 22, 75.46, 4),
(10100, 'S24_3969', 49, 35.29, 1),
(10101, 'S18_2325', 25, 108.06, 4),
(10101, 'S18_2795', 26, 167.06, 1),
(10101, 'S24_1937', 45, 32.53, 3),
(10101, 'S24_2022', 46, 44.35, 2),
(10102, 'S18_1342', 39, 95.55, 2),
(10102, 'S18_1367', 41, 43.13, 1),
(10102, 'S10_1949', 26, 214.30, 11),
(10102, 'S10_4962', 42, 119.67, 4),
(10103, 'S12_1666', 27, 121.64, 8),
(10103, 'S18_1097', 35, 94.50, 10),
(10103, 'S18_2432', 22, 58.34, 6),
(10103, 'S18_2949', 26, 92.19, 12);

Teeme transaktsioon
begin TRANSACTION;
INSERT INTO orders (orderNumber, orderDate, requiredDate, shippedDate, status, customerNumber)
VALUES (10107, '2020-04-15', '2020-05-16', NULL, 'in progress', 112);
select * from orders;
INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber)
VALUES (10107, 'S10_1678', 13, 22.50, 2);
select * from orderdetails;
ROLLBACK;
select * from orders;
select * from orderdetails;
Transaktsioon:
Lisatakse tellimus numbriga 107 tabelisse orders.
Kuvatakse tabeli orders sisu.
Lisatakse rida tabelisse orderdetails, mis on seotud Tellimusega 10107.
Kuvatakse tabeli order details sisu.
Kõik muudatused lükatakse tagasi.
Jällegi kuvatakse tabelid orders ja orderdetails-sisestatud read kaovad.

Sama Ülesanne XAMPP’is
esimene tabel
INSERT INTO orders (orderNumber, orderDate, requiredDate, shippedDate, status, comments, customerNumber)
VALUES
(10223, '2004-02-20', '2004-02-29', '2004-02-24', 'Shipped', NULL, 114),
(10224, '2005-05-09', '2005-09-12', '2005-05-13', 'Shipped', NULL, 119),
(10147, '2003-09-05', '2003-09-12', '2003-09-09', 'Shipped', NULL, 119);

teine tabel
CREATE TABLE orderdetails (
orderNumber INT primary key,
productCode VARCHAR(20),
quantityOrdered INT,
priceEach DECIMAL(10,2),
orderLineNumber INT
);
select * from orderdetails;
INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber) VALUES
(10180, 'S18_1749', 30, 136.00, 3),
(10190, 'S18_2248', 50, 55.09, 2),
(10110, 'S18_4409', 22, 75.46, 4);

Transaktsioon:
begin TRANSACTION;
INSERT INTO orders (orderNumber, orderDate, requiredDate, shippedDate, status, customerNumber)
VALUES (10107, '2020-04-15', '2020-05-16', NULL, 'in progress', 112);
select * from orders;
INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber)
VALUES (10107, 'S10_1678', 13, 22.50, 2);
select * from orderdetails;
ROLLBACK;
select * from orders;
select * from orderdetails;