Skip to content
Home » SQL transaktsioonid ülesanne

SQL transaktsioonid ülesanne

SQL Server

--kasutan andmebaasi, mis juba olemas on
use AdventureWorksDW2019

--loon uus tabel
create table currencies(
    currencyID INT NOT NULL PRIMARY KEY identity (1,1),
	countryName varchar(25),
	currencyKey char(3)
);

--lisan andmed
insert into currencies (countryName, currencyKey) values(
'Japan', 'JPY'),('Denmark', 'DKK'),('Sweden', 'SEK');

select * from currencies
--loon protseduuri, mille abil saan muuta juba tabelisse sisestatud andmeid
create Procedure currencyUpdate
as
Begin
 Begin Try
  Begin Transaction
   Update currencies set currencyKey = 'GBP', countryName = 'United Kingdom'
   where currencyID = 1
  Commit Transaction
 End Try
 Begin Catch
  Rollback Transaction
 End Catch
End

--käivitan protseduuri, tehes topeltklõpsu protseduuri nimele.
procedure currencyUpdate

select * from currencies
--muudan protseduuri niimodi, et see näitab edukalt/mitteedukalt seis tsikli lõpus
--ja et saada Rollback seis
alter procedure currencyUpdate
as
begin
	begin try
		begin transaction
		--muutan siin andmed tagasi, nagu olnud tabeli loomiseajal
		update currencies set currencyKey = 'JPY', countryName = 'Japan'
		where currencyID = 1
		--aga siin teen spetsiaalselt viga, et saada Rollback seis
		update currencies set currencyKey = 'GBP', countryName = 'The United Kingdom of Great Britain and Northern Ireland'
		where currencyID = 2
		print 'transaktsioon committed!'
	commit transaction
end try
begin catch
 rollback transaction
 print 'transaktsioon rolled back!'
 end catch
end

--nagu näha, ei muutunud midagi, sest minu 'countryName' veerg ei luba rohkem kui
--25 sümbolit, seega esimene muudatus ei rakendunud ja kõik jäi samaks nagu enne
--tehingu käivitamist




XAMPP

-- kasutan andmebaasi, mis juba olemas on
use world_andmebaas
 
-- loon uus tabel
create table currencies(
    currencyID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    countryName varchar(25),
    currencyKey char(3)
);
 
-- lisan andmed
insert into currencies (countryName, currencyKey) values(
'Japan', 'JPY'),('Denmark', 'DKK'),('Sweden', 'SEK');
 
select * from currencies
-- loon protseduuri, mille abil saan muuta juba tabelisse sisestatud andmeid
DELIMITER //

CREATE PROCEDURE currencyUpdate()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    ROLLBACK;
  END;

  START TRANSACTION;

  UPDATE currencies 
  SET currencyKey = 'GBP', countryName = 'United Kingdom'
  WHERE currencyID = 1;

  COMMIT;
END;
//

DELIMITER ;
-- eemaldan vana protseduur, sest xampp-is 'alter table' ei tööta
DROP PROCEDURE IF EXISTS currencyUpdate;

-- -muudan protseduuri niimodi, et see näitab edukalt/mitteedukalt seis tsikli lõpus
-- ja et saada Rollback seis
DELIMITER //

CREATE PROCEDURE currencyUpdate()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    ROLLBACK;
    SELECT 'transaktsioon rolled back!' AS staatus;
  END;

  START TRANSACTION;

 -- muutan siin andmed tagasi, nagu olnud tabeli loomiseajal
  UPDATE currencies 
  SET currencyKey = 'JPY', countryName = 'Japan' 
  WHERE currencyID = 1;

-- aga siin teen spetsiaalselt viga, et saada Rollback seis
  UPDATE currencies 
  SET currencyKey = 'GBP', countryName = 'The United Kingdom of Great Britain and Northern Ireland'
  WHERE currencyID = 2;

  COMMIT;
  SELECT 'transaktsioon committed!' AS staatus;
END;
//

DELIMITER ;
-- sel juhul ilmus teade tehingu eduka rakendamise kohta, kuid pöörake tähelepanu viimasele reale: Data truncated
-- see tähendab, et vaatamata 25 tähemärgi piirangule lõikas mysql kõik ära, mis sisse ei mahtunud, ja salvestas selle
-- soovi korral saab seda nõuet sundida nii, et see seda ei teeks, kuna standardi kohaselt ei pea mysql seda veaks