Triggerid

XAMPP—————————————————————————

Uue DB ja tabelite loomine

-- Create the database
CREATE DATABASE trigerTARgv24;

-- Use the created database
USE trigerTARgv24;

-- Create the 'linnad' table
CREATE TABLE linnad (
    linnID INT PRIMARY KEY AUTO_INCREMENT,
    linnanimi VARCHAR(15) NOT NULL,
    rahvaarv INT
);

CREATE TABLE `logi` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `aeg` DATETIME DEFAULT NULL,
  `toiming` VARCHAR(100) DEFAULT NULL,
  `andmed` TEXT DEFAULT NULL,
  `kasutaja` VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Ulesanne

Looge logitabel(id, toiming, aeg, autoAndmed), et salvestada muudatused autoregistris.
Mõelge ise automaatse registreerimise tabeli väljadele ja andmetele.

Looge päästikud andmete lisamise, kustutamise ja muutmise salvestamiseks automaatregistri tabelis, samal ajal kui muudatuste andmed salvestatakse logitabeli tabelisse.

Triggerite loomine

Andmete lisamine

Andmete kustutamine

Andmete uuendamine

Valmis triggerid:

Triggerite kasutamine

Andmete lisamine

Andmete kustutamine

Andmete uuendamine

SQL—————————————————————————

Ulesanne

 1. Добавить к таблице autoregistr любую связанную таблицу.

 2. Изменить триггеры на отслеживание обновлений и добавлений так, чтобы в таблице logitabel отображались данные из связанных таблиц.

Nuud teeme see ulesanne SQL-ga.

Loome uue samasugune DB ja tebelid, aga nuud lisame ka uus tabel ja uhendame seda esimesega:

CREATE DATABASE AutoregisterDB;
USE AutoregisterDB;

CREATE TABLE automudelid (
    mudelID INT identity(1,1) PRIMARY KEY,
    mark VARCHAR(50),
    mudel VARCHAR(50)
);

CREATE TABLE autoregister (
    regID INT identity(1,1) PRIMARY KEY,
    numbrimärk VARCHAR(20) UNIQUE,
    omanik VARCHAR(100),
    registreerimise_kuupäev DATETIME,
    mudelID INT,
    CONSTRAINT FK_AutoMudel FOREIGN KEY (mudelID) REFERENCES automudelid(mudelID)
);

CREATE TABLE logi (
    id INT identity(1,1) PRIMARY KEY,
    aeg DATETIME,
    toiming VARCHAR(100),
    andmed TEXT,
    kasutaja VARCHAR(50)
);

Loome triggerid:

CREATE TRIGGER logi_lisamine 
ON autoregister 
AFTER INSERT 
AS 
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud Lisamine',
    CONCAT('Numbrimärk: ', inserted.numbrimärk, 
           ', Omanik: ', inserted.omanik, 
           ', Mark: ', am.mark, 
           ', Mudel: ', am.mudel),
    SUSER_NAME()
FROM inserted 
INNER JOIN automudelid am ON inserted.mudelID = am.mudelID;


CREATE TRIGGER logi_kustutamine 
ON autoregister 
AFTER DELETE 
AS 
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud Kustutamine',
    CONCAT('Numbrimärk: ', deleted.numbrimärk, 
           ', Omanik: ', deleted.omanik, 
           ', Mark: ', am.mark, 
           ', Mudel: ', am.mudel),
    SUSER_NAME()
FROM deleted 
INNER JOIN automudelid am ON deleted.mudelID = am.mudelID;


CREATE TRIGGER logi_uuendamine 
ON autoregister 
AFTER UPDATE 
AS 
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud Uuendamine',
    CONCAT('Vanad andmed - Numbrimärk: ', deleted.numbrimärk, 
           ', Omanik: ', deleted.omanik, 
           ', Mark: ', am1.mark, 
           ', Mudel: ', am1.mudel, 
           ' | Uued andmed - Numbrimärk: ', inserted.numbrimärk, 
           ', Omanik: ', inserted.omanik, 
           ', Mark: ', am2.mark, 
           ', Mudel: ', am2.mudel),
    SUSER_NAME()
FROM deleted 
INNER JOIN inserted ON deleted.regID = inserted.regID
INNER JOIN automudelid am1 ON am1.mudelID = deleted.mudelID
INNER JOIN automudelid am2 ON am2.mudelID = inserted.mudelID;

Nuud lisame andmed tabelidesse:

INSERT INTO automudelid (mark, mudel) VALUES ('Toyota', 'Corolla');
INSERT INTO automudelid (mark, mudel) VALUES ('Ford', 'Focus');
INSERT INTO automudelid (mark, mudel) VALUES ('BMW', 'X5');
SELECT * FROM automudelid;
INSERT INTO autoregister (numbrimärk, omanik,registreerimise_kuupäev, mudelID) 
VALUES ('123ABC', 'Jaan Tamm', GETDATE(), 1);
SELECT * FROM autoregister;

Uuendame tabeli:

UPDATE autoregister 
SET omanik = 'Mari Maasikas', mudelID = 2 
WHERE numbrimärk = '123ABC';

Kustutame tabelist:

DELETE FROM autoregister WHERE numbrimärk = ‘123ABC’;

Kontrollime triggeri:

SELECT * FROM logi;