Auto Register SQL

Код который был составленый весь дома/на уроке

Create database trigerautoregistr;
USE trigerautoregistr;

CREATE TABLE autoregister (
    id int identity(1,1) PRIMARY KEY,
    muudel VARCHAR(50),
    aasta INT,
    kasutaja VARCHAR(50),
    markID INT,
    FOREIGN KEY (markID) REFERENCES mark(markID)
);


Create table logitable(
id int PRIMARY KEY IDENTITY (1,1),
aeg DATETIME,
toiming  varchar(100),
andmed TEXT,
kasutaja varchar(50)
);

CREATE TABLE mark (
    markID int identity(1,1) PRIMARY KEY,
    markNimi VARCHAR(100) UNIQUE
);

DROP TABLE logitable;
DROP TRIGGER autoUuendamine;

INSERT INTO autoregister (muudel, aasta, kasutaja, markID) 
VALUES ('kia', 2022, 'Katja', 1);
INSERT INTO autoregister (muudel, aasta, kasutaja, markID) 
VALUES ('toyota', 2022, 'Erik', 2);
INSERT INTO autoregister (muudel, aasta, kasutaja, markID) 
VALUES ('BMV', 2019, 'Erki', 3);

INSERT INTO mark(markNimi) VALUES ('sportage');
INSERT INTO mark(markNimi) VALUES ('auris');
INSERT INTO mark(markNimi) VALUES('x5');

-- Trigerlisatamine auto
CREATE TRIGGER autoLisamine
ON autoregister
FOR INSERT
AS 
INSERT INTO logitable (aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'uus auto on lisatud', 
    CONCAT(inserted.muudel, ', ', m.markNimi, ', kasutaja: ', inserted.kasutaja),
	SUSER_NAME()
FROM inserted
INNER JOIN mark m ON m.markID = inserted.markID;


-- Vaatame kontrollime
INSERT INTO autoregister (muudel, aasta, kasutaja, markID) 
VALUES ('audi', 2023, 'Itan', 3);
 
SELECT * from logitable;
SELECT * from autoregister;

-- triger kustutamine
CREATE TRIGGER autoKustutamine
ON autoregister
FOR DELETE 
AS
INSERT INTO logitable(aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud Delete',
    CONCAT(m.markNimi, ', ', d.muudel, ', ', d.kasutaja),
	SUSER_NAME()
FROM deleted d
INNER JOIN mark m ON m.markID = d.markID;


-- Vaatame kontrollime
DELETE FROM autoregister 
WHERE markID = 1;
 
SELECT * FROM autoregister;
SELECT * FROM logitable;


-- Uuendamine autorister
CREATE TRIGGER autoUuendamine
ON autoregister
FOR UPDATE
AS 
INSERT INTO logitable (aeg, toiming, andmed, kasutaja)
SELECT GETDATE(),
'on tehtud Update',
CONCAT('Vanad andmed - ', d.muudel, ', ', m1.markNimi, 
' | Uued andmed - ', i.muudel, ', ', m2.markNimi),
SUSER_NAME()
FROM deleted d
INNER JOIN inserted i ON d.id = i.id
INNER JOIN mark m1 ON m1.markID = d.markID
INNER JOIN mark m2 ON m2.markID = i.markID;
 
-- Vaatame kontrollime
UPDATE autoregister SET markID = 2 WHERE id = 1;
SELECT * FROM autoregister;
SELECT * FROM logitable;

Так же в несла в него сейчас это не сколько функций, чтобы еще раз проверить работу тригеров DROP TRIGGER *nimi*; разбирем тригеры по очареди.

AutoLisamine

С помощью этого тригера мы отслеживаем добавляения в таблице logitable

-- Trigerlisatamine auto
CREATE TRIGGER autoLisamine
ON autoregister
FOR INSERT
AS 
INSERT INTO logitable (aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'uus auto on lisatud', 
    CONCAT(inserted.muudel, ', ', m.markNimi, ', kasutaja: ', inserted.kasutaja),
	SUSER_NAME()
FROM inserted
INNER JOIN mark m ON m.markID = inserted.markID;

AutoKustutamine

С помощью этого тригера мы отслеживаем удаления из таблицы autoregister в таблице logitable (удаляем по markID)

-- triger kustutamine
CREATE TRIGGER autoKustutamine
ON autoregister
FOR DELETE 
AS
INSERT INTO logitable(aeg, toiming, andmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud Delete',
    CONCAT(m.markNimi, ', ', d.muudel, ', ', d.kasutaja),
	SUSER_NAME()
FROM deleted d
INNER JOIN mark m ON m.markID = d.markID;

AutoUuendamine

С помощью этого тригера мы отслеживаем изменения из таблицы autoregister в таблице logitable

CREATE TRIGGER autoUuendamine
ON autoregister
FOR UPDATE
AS 
INSERT INTO logitable (aeg, toiming, andmed, kasutaja)
SELECT GETDATE(),
'on tehtud Update',
CONCAT('Vanad andmed - ', d.muudel, ', ', m1.markNimi, 
' | Uued andmed - ', i.muudel, ', ', m2.markNimi),
SUSER_NAME()
FROM deleted d
INNER JOIN inserted i ON d.id = i.id
INNER JOIN mark m1 ON m1.markID = d.markID
INNER JOIN mark m2 ON m2.markID = i.markID;