SQL transaktsioonid

Transiit on kasutaja loogilises järjekorras tehtavate operatsioonide jada või programm, mis töötab BD-ga.

Transiit on BD muudatuste levik. 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 – Atomaarsus
  • Consistency – Kooskõla
  • Isolation – Isoleeritus
  • Durability – Pikaajalisus

Atomaarsus

Tagab, et igasugune tehing fikseeritakse ainult tervikuna (täielikult). 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.

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.

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).


Tehingute juhtimiseks kasutatakse järgmisi käske:

ROLLBACK

Veeretab (jätab ära) muudatused

Ilma tehingu alguseta ei ole võimalik selle tehingu tagasipööret teha

Transiit number 1

ROLLBACK;
--loome transaktion 
BEGIN TRANSACTION;
INSERT INTO T(id, s) values(4,'fourth');
select * from T;
--tagasi võtmine
ROLLBACK;
select * from T;

Transiit number 2

--loome transaktiooni 2
BEGIN TRANSACTION;
DELETE FROM T where id=1;
select * from T;
--tagasi võtmine
ROLLBACK;
select * from T;

SQL juhend. Tehingud.

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);
 
select * from developers

Transiit number 3

--loome transaktsiooni 3
begin transaction;
DELETE FROM developers 
WHERE SPECIALTY = 'C++';
select * from developers;
 
ROLLBACK;
select * from developers


Ülesanne hinne 5

https://www.youtube.com/watch?v=shkt9Z5Gz-U

SQL

create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50));

Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')

select * from tblMailingAddress;

create table tblPhysicalAddress
(
 AddressId int NOT NULL primary key,
 EmployeeNumber int,
 HouseNumber nvarchar(50),
 StreetAddress nvarchar(50),
 City nvarchar(10),
 PostalCode nvarchar(50)
)
insert into tblPhysicalAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')

ROLLBACK TRANSACTION

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
 End Try
 Begin Catch
  Rollback Transaction
 End Catch
End

select * from tblPhysicalAddress;
select * from tblMailingAddress;

UPDATE TRANSACTION

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
 End Try
 Begin Catch
  Rollback Transaction
 End Catch
End

select * from tblPhysicalAddress;
select * from tblMailingAddress;

XAMPP

create Table tblMailingAddress
(
AddressId int NOT NULL primary key,
EmployeeNumber int,
HouseNumber nvarchar(50),
StreetAddress nvarchar(50),
City nvarchar(10),
PostalCode nvarchar(50));

Insert into tblMailingAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')

select * from tblMailingAddress;
create table tblPhysicalAddress
(
 AddressId int NOT NULL primary key,
 EmployeeNumber int,
 HouseNumber nvarchar(50),
 StreetAddress nvarchar(50),
 City nvarchar(10),
 PostalCode nvarchar(50)
)
insert into tblPhysicalAddress values (1, 101, '#10', 'King Street', 'Londoon', 'CR27DW')

ROLLBACK / UPDATE TRANSACTION


Comments

Lisa kommentaar

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga