SQL Transaktsioonid

Основные концепции транзакции описываются аббревиатурой 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;