————————————————————————–


SQL Server

CREATE DATABASE transactionTARgv24;
 
USE transactionTARgv24;
 
CREATE TABLE T(
id INT NOT NULL PRIMARY KEY,
s VARCHAR(40),
si SMALLINT);
 
INSERT INTO T(id,s) 
VALUES (1,'first'),
(2,'second'),
(3,'third');
 
SELECT * FROM T;
 
-- Tagasi võtmine
ROLLBACK;
-- Alustame transaktsiooni
BEGIN TRANSACTION;
INSERT INTO T(id,s) 
VALUES (4,'fourth');
SELECT * FROM T;
-- Tagasi võtmine
ROLLBACK;
SELECT * FROM T;
-- Kustutamine transaktsioon
BEGIN TRANSACTION;
DELETE FROM T 
WHERE id > 1;
SELECT * FROM T;

-- Tagasi võtmine
ROLLBACK;
SELECT * FROM T;
-- Transaktsion mis salvestab uuendamist ja võtab tagasi
BEGIN TRANSACTION;
UPDATE T 
SET si=3;
SELECT * FROM T;
ROLLBACK;
SELECT * FROM T;

XAMPP

CREATE TABLE T(
id INT NOT NULL PRIMARY KEY,
s VARCHAR(40),
si SMALLINT);
 
INSERT INTO T(id,s) 
VALUES (1,'first'),
(2,'second'),
(3,'third');

SELECT * FROM T;
START TRANSACTION;
INSERT INTO T(id,s) 
VALUES (4,'fourth');
SELECT * FROM T;
ROLLBACK;
SELECT * FROM T;
-- Kustutamine transaktsioon
START TRANSACTION;
DELETE FROM T 
WHERE id > 1;
SELECT * FROM T;

-- Tagasi võtmine
ROLLBACK;
SELECT * FROM T;

START TRANSACTION;
UPDATE T 
SET si=3;
SELECT * FROM T;
ROLLBACK;
SELECT * FROM T;

Ülesanne transaktsioonid




CREATE TABLE tooted (
    toodeID INT NOT NULL PRIMARY KEY,
    nimetus VARCHAR(100) NOT NULL,
    kirjeldus TEXT,
    hind DECIMAL(10, 2) NOT NULL,
    laos INT NOT NULL
);

INSERT INTO tooted (toodeID, nimetus, kirjeldus, hind, laos)
VALUES (1, 'Sülearvuti', '15-tolline sülearvuti', 799.99, 10),
(2, 'Nutitelefon', 'Android nutitelefon', 499.50, 25),
(3, 'Kõrvaklapid', 'Juhtmevabad kõrvaklapid', 99.99, 50);

SELECT * FROM tooted;


-- Uuendamine transaktioon
BEGIN TRANSACTION;
UPDATE tooted set laos=500 WHERE toodeID=3;
ROLLBACK TRANSACTION;

SELECT * FROM tooted;
BEGIN TRANSACTION;
UPDATE tooted set laos=500 WHERE toodeID=3;

COMMIT TRANSACTION;

Пример 1



SQL Server

CREATE TABLE laokaubad (
    toodeID INT NOT NULL PRIMARY KEY,
    nimetus VARCHAR(20),
    hind DECIMAL(10, 2),
    kogus INT
);

CREATE TABLE poekaubad (
    toodeID INT NOT NULL PRIMARY KEY,
    nimetus VARCHAR(20),
    hind DECIMAL(10, 2),
    kogus INT
);

INSERT INTO laokaubad VALUES (1, 'Mikser', 79.99, 100);
INSERT INTO poekaubad VALUES (1, 'Mikser', 79.99, 20);
CREATE PROCEDURE spUuendaToodeHind
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION;

        UPDATE laokaubad SET hind=119.99
        WHERE toodeID=1 AND nimetus='Mikser';

        UPDATE poekaubad SET hind=119.99
        WHERE toodeID=1 AND nimetus='Mikser';

        COMMIT TRANSACTION;
		PRINT 'Transaction Commited'
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;
		PRINT 'Transaction Rolled Back'
    END CATCH
END;


XAMPP

CREATE TABLE laokaubad (
    toodeID INT NOT NULL PRIMARY KEY,
    nimetus VARCHAR(20),
    hind DECIMAL(10, 2),
    kogus INT
);
 
CREATE TABLE poekaubad (
    toodeID INT NOT NULL PRIMARY KEY,
    nimetus VARCHAR(20),
    hind DECIMAL(10, 2),
    kogus INT
);
 
INSERT INTO laokaubad VALUES (1, 'Mikser', 79.99, 100);
INSERT INTO poekaubad VALUES (1, 'Mikser', 79.99, 20);
BEGIN
	-- обработка ошибок, аналог try/catch
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        SELECT 'Transaction Rolled Back' AS Message;
    END;

    START TRANSACTION;

    UPDATE laokaubad 
    SET hind = p_uusHind
    WHERE toodeID = p_toodeID AND nimetus = p_nimetus;

    UPDATE poekaubad 
    SET hind = p_uusHind
    WHERE toodeID = p_toodeID AND nimetus = p_nimetus;

    COMMIT;
    SELECT 'Transaction Committed' AS Message;
END
CALL spUUendaToodeHind(1, 'Mikser', 199.99);

Пример 2



SQL Server

CREATE PROCEDURE spUuendaToodeNimetus
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION;

        UPDATE laokaubad SET nimetus='Mikser Pro'
        WHERE toodeID=1 AND hind=79.99;

        UPDATE poekaubad SET nimetus='Mikser Super Professional 2025'
        WHERE toodeID=1 AND hind=79.99;

        COMMIT TRANSACTION;
		PRINT 'Transaction Commited'
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;
		PRINT 'Transaction Rolled Back'
    END CATCH
END;


XAMPP

BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        SELECT 'Transaction Rolled Back' AS Message;
        RESIGNAL;
    END;

    START TRANSACTION;

    UPDATE laokaubad SET nimetus = p_nimetus1
    WHERE toodeID = 1 AND hind = 79.99;

    UPDATE poekaubad SET nimetus = p_nimetus2
    WHERE toodeID = 1 AND hind = 79.99;

    IF CHAR_LENGTH(p_nimetus1) > 20 OR CHAR_LENGTH(p_nimetus2) > 20 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Nimetus liiga pikk!';
    END IF;

    COMMIT;
    SELECT 'Transaction Committed' AS Message;
END
CALL spUuendaToodeNimetus('Mikserrr', 'Mikser Super Professional 2025');