Transiit on kasutaja loogilises järjekorras tehtavate operatsioonide jada või programm, mis töötab AB-ga.
Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Transiit – AB-s muudatuste levitamine. Näiteks kui tekitame, muudame või kustutame kirje, siis teostame tehingu. Äärmiselt oluline on kontrollida transaktsioone garanteerimiseks.
Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Tehingu põhikontseptsioone kirjeldab lühend ACID –
- Atomicity – Атомарность
- Consistency – Согласованность
- Isolation – Изолированность
- Durability – Долговечность
Atomaarsus / Атомарность
Atomaarsus tagab, et igasugune tehing fikseeritakse ainult tervikuna (täiesti). Kui üks järjestikune operatsioon jääb tegemata, siis jääb kogu tehing ära. Siin tuuakse sisse mõiste “väljakukkumine” (rollback). St. jadasiseselt toimuvad teatud muudatused, kuid kokkuvõttes jäävad need kõik ära (“lukustatakse”) ja kokkuvõttes ei näe kasutaja mingeid muutusi.
Атомарность гарантирует, что любая транзакция будет зафиксирована только целиком (полностью). Если одна из операций в последовательности не будет выполнена, то вся транзакция будет отменена. Тут вводится понятие “отката” (rollback). Т.е. внутри последовательности будут происходить определённые изменения, но по итогу все они будут отменены (“откачены”) и по итогу пользователь не увидит никаких изменений.
Kooskõla / Согласованность
Kooskõla tähendab seda, et igasugune lõpetatud tehing (tehing, mis on jõudnud tehingu lõpule – end of transaction) fikseerib ainult lubatud tulemused. Näiteks raha ülekandmisel ühelt kontolt teisele, juhul kui raha on läinud ühelt kontolt, peavad need tulema teisele (see ongi süsteemi kooskõla). Allakirjutamine ja sissekirjutamine on kaks erinevat tehingut, seega esimene tehing möödub ilma vigadeta ja teist lihtsalt ei tule. Just seetõttu on äärmiselt oluline selle omadusega arvestada ja süsteemi tasakaalu hoida.
Согласованность означает, что любая завершённая транзакция (транзакция, которая достигла завершения транзакции – end of transaction) фиксирует только допустимые результаты. Например, при переводе денег с одного счёта на другой, в случае, если деньги ушли с одного счёта, они должны прийти на другой (это и есть согласованность системы). Списание и зачисление – это две разные транзакции, поэтому первая транзакция пройдёт без ошибок, а второй просто не будет. Именно поэтому крайне важно учитывать это свойство и поддерживать баланс системы.
Isoleeritus / Изолированность
Iga tehing tuleb isoleerida teistest, st. selle tulemus ei tohiks sõltuda teiste paralleelsete tehingute tegemisest. Praktikas on isoleeritus äärmiselt raskesti saavutatav asi, mistõttu tuuakse siin sisse mõiste “eraldatuse tasemed” (tehingut ei isoleerita täielikult).
Каждая транзакция должна быть изолирована от других, т.е. её результат не должен зависеть от выполнения других параллельных транзакций. На практике, изолированность крайне труднодостижимая вещь, поэтому здесь вводится понятие “уровни изолированности” (транзакция изолируется не полностью).
Pikaajalisus / Долговечность
See kontseptsioon tagab, et kui oleme saanud kinnituse tehingu tegemise kohta, siis ei tohiks sellest tehingust tingitud muudatusi süsteemi rikke tõttu ära jätta (nt elektritoite väljalülitamine).
Эта концепция гарантирует, что если мы получили подтверждение о выполнении транзакции, то изменения, вызванные этой транзакцией не должны быть отменены из-за сбоя системы (например, отключение электропитания).
Transaktsiooni juhtumine
Transaktsiooni haldamiseks kasutatakse järgmisi käske:
- COMMIT
Сохраняет изменения / Salvestab muudatused - ROLLBACK
Откатывает (отменяет) изменения / Tühista muudatused - SAVEPOINT
Создаёт точку к которой группа транзакций может откатиться / Loob punkti, kuhu saab transaktsiooni rühma tagasi kerida - SET TRANSACTION
Размещает имя транзакции. / Paigutab tehingu nime.
Transaktsiooni haldamise käske kasutatakse ainult DML käskude puhul: INSERT, UPDATE, DELETE. Neid ei saa kasutada tabeli loomise, muutmise või kustutamise ajal.
Igasugune edukas tehingu sooritamine lõpeb COMMIT-i meeskonnaga (fikseerimine), samas kui ebaõnnestunud soorituse peab lõpetama ROLLBACK-i meeskond (väljalülitamine), kes taastab automaatselt andmebaasis kõik transaktsiooniga tehtud muudatused.
Команды управление транзакциями используются только для DML команд: INSERT, UPDATE, DELETE. Они не могут быть использованы во время создания, изменения или удаления таблицы.
Любое успешное выполнение транзакции заканчивается командой COMMIT (фиксация), в то время как неудачное выполнение должно быть закончено командой ROLLBACK (откат), которая автоматически восстанавливает в базе данных все изменения, внесенные транзакцией.
Ülesanne
MySQL – Выполнить пример со следующей страницы https://proselyte.net/tutorials/sql/sql-transactions/
create table developers(
id int not null primary key identity(1,1),
name varchar(50),
specialty varchar(50),
experience int,
salary int);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Eugene Suleimanov', 'Java', 2, 2500);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Peter Romanenko', 'Java', 3, 3500);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Andrei Komarov', 'C++', 3, 2500);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Konstantin Geiko', 'C#', 2, 2000);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Asya Suleimanova', 'UI/UX', 2, 1800);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Ivan Ivanov ', 'C#', 1, 900);
INSERT INTO developers(name, specialty, experience, salary)
VALUES('Ludmila Geiko', 'UI/UX', 2, 1800);

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

ROLLBACK;
select * from developers

Video:
Tabeli loomine
Loo tabel tblMailingAddress
, kus määratakse väljad posti aadressi salvestamiseks, sealhulgas andmetüübid ja piirangud
Loo sarnane tabel tblPhysicalAddress
füüsilise aadressi salvestamiseks, kasutades samu välju ja piiranguid.
create database transaktsioonid;
use transaktsioonid;
Create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(6)
);
Create Table tblPhysicalAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(6)
);
Insert
Lisa mõlemasse tabelisse kirjed. Mõlemas tabelis on kirje, mille identifikaator on 1
ja EmployeeNumber
on 101
, kus on vale linnanimi.
Insert into tblPhysicalAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW');
Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')

Protseduur
Loo salvestatud protseduur spUpdateAddress
, mis värskendab linnanime mõlemas tabelis. Protseduur kasutab TRY
ja CATCH
plokke vigade käsitlemiseks. Kui mõlemad värskendused õnnestuvad, tehakse tehing. Kui esineb viga, tagastatakse tehing ja kuvatakse sõnum.
create Procedure spUpdateAddress
as
Begin
Begin Try
Begin Transaction
update tblMailingAddress set City = 'LONDON'
where AddressId = 1 and EmployeeNumber = 101
update tblPhysicalAddress set City = 'LONDON'
where AddressId = 1 and EmployeeNumber = 101
Commit Transaction
Print 'Transaction Committed'
End Try
Begin Catch
Rollback Transaction
Print 'Transaction Rollbacked'
End Catch
End

Uuendame protseduur
Muuda protseduuri nii, et üks värskendus lõpetaks tõrke (üleandme pikkuse ületamine City
väljas). Kui üks värskendus ebaõnnestub, tagastatakse kogu tehing ja ühtegi värskendust ei salvestata andmebaasi.
Alter Procedure spUpdateAddress
as
Begin
Begin Try
Begin Transaction
Update tblMailingAddress set City = 'LONDON12'
where AddressId = 1 and EmployeeNumber = 101
Update tblPhysicalAddress set City = 'LONDON LONDON'
where AddressId = 1 and EmployeeNumber = 101
Commit Transaction
Print 'Transaction Committed'
End Try
Begin Catch
Rollback Transaction
Print 'Transaction Rollbacked'
End Catch
End

See protsess demonstreerib, kuidas kasutada tehingute süsteemi andmete terviklikkuse tagamiseks, kindlustades, et kõik muudatused viiakse ellu edukalt või ei rakendata üldse vigade korral.