SQL
1.Ülesanne
Tehtud “developers” tabel
create database developers;
use developers;
create table developers(
ID int primary key identity(1,1),
Name varchar(100),
Specialty varchar(50),
Experience int,
Salary int);
select * from developers;
insert into developers
values('Eugene Suleimanov','Java',2,2500);
insert into developers
values('Peter Romanenko','Java',3,3500);
insert into developers
values('Andrei Komarov','C++',3,2500);
insert into developers
values('Konstantin Geiko','C#',2,2000);
insert into developers
values('Asya Suleimanova','UI/UX',2,1800);
insert into developers
values('Ivan Ivanov','C#',1,900);
insert into developers
values('Ludmila Geiko','UI/UX',2,1800);
select * from developers;

Eemaldame kõik C++ arendajad ja teostame ROLLBACKi käsu:
SET IMPLICIT_TRANSACTIONS OFF
begin transaction;
DELETE FROM developers
WHERE SPECIALTY = 'C++';
select * from developers;
rollback;
select * from developers;

Tehtud SAVE TRANSACTION
begin transaction;
save transaction SP1;
begin transaction;
DELETE FROM developers WHERE ID = 7;
DELETE FROM developers WHERE ID = 6;
DELETE FROM developers WHERE ID = 5;
select * from developers;
rollback transaction SP1;
select * from developers;

Ülesanne 2
lõi Product tabeli
create database Transactions;
use Transactions;
create table Product(
ProductID int primary key identity(1,1),
Name varchar(100),
UnitPrice int,
QtyAvailable int);
insert into Product(name,UnitPrice,QtyAvailable)
values ('Laptops',2340,100);
insert into Product(name,UnitPrice,QtyAvailable)
values ('Desktops',3467,20);
select * from Product;
begin transaction
Update Product set QtyAvailable = 200 where ProductID = 1;
rollback;
Ei näe Product tabeli sisu, kui loon uue päringu

peale seda saame lugeda komplitseerimata andmeid
select * from Product;
set transaction isolation level read uncommitted;

Kui me tahame muuta tabelit püsivaks, siis peame kirjutama “commit” peale tehingut või “Rollback”, et muudatused olematuks muuta
begin transaction
Update Product set QtyAvailable = 200 where ProductID = 1;
commit;
rollback;
Tehtud uus tabelid
create table tblPhysicalAddress(
AddressID int primary key identity(1,1),
EmployeeNumber int,
HouseNumber varchar(10),
StreetAddress varchar(50),
City varchar(50),
PostalCode varchar(50));
create table tblMailingAddress(
AddressID int primary key identity(1,1),
EmployeeNumber int,
HouseNumber varchar(10),
StreetAddress varchar(50),
City varchar(50),
PostalCode varchar(50));
insert into tblPhysicalAddress(EmployeeNumber,HouseNumber,StreetAddress,City,PostalCode)
values (101,'#10','King Street','LONDOON','CR27DW');
insert into tblMailingAddress(EmployeeNumber,HouseNumber,StreetAddress,City,PostalCode)
values (101,'#10','King Street','LONDOON','CR27DW');

Loonud Protseduur spUpdateAddress
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
print 'Transaction Committed'
end try
begin catch
rollback transaction
print 'Transaction Rolled Back'
end catch
end
“City” veerus olevad andmed olid valed, nii et ma lõin korra õigekirja parandamiseks Tehingu abil ja kui on viga, teeb protseduur “Rollback”


Nüüd teen vea tahtlikuks
alter procedure spUpdateAddress
as
begin
begin try
begin transaction
update tblMailingAddress set City = 'LONDON1'
where AddressID = 1 and EmployeeNumber = 101
update tblPhysicalAddress set City = 'LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDOL'
where AddressID = 1 and EmployeeNumber = 101
commit
print 'Transaction Committed'
end try
begin catch
rollback transaction
print 'Transaction Rolled Back'
end catch
end
Mul on linna veerg määratud varcharile (50) nii et ma pidin palju londonit kirjutama, et see vea tabaks

kõik toimingud veeretati tagasi, sest üks värskenduslause ei olnud korrektselt kirjutatud