Triggerite loomine SQL server

CREATE DATABASE trigerTARgv24;

USE trigerTARgv24;

Create table linnad(

linnID int PRIMARY KEY IDENTITY,

linnanimi varchar(15) not null,

rahvaarv int);

Create table logi(

id int PRIMARY KEY IDENTITY,

aeg DATETIME,

toiming  varchar(100),

andmed varchar(200)

)

–INSERT TRIGER – jälgib andmete sisestamine tablis linnad
— ja teeb vastava kirje tabelis logi
CREATE TRIGGER linnaLisamine
ON linnad — tablenimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT GETDATE(), ‘on tehtud INSERT käsk’, inserted.linnanimi
FROM inserted;

Go to the trigger –>

modify

emaldame linnuke

ADD KASUTAJA

USE [trigerTARgv24]
GO
/ Object: Trigger [dbo].[linnaLisamine] Script Date: 19.03.2025 09:18:24 /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad] — tablenimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), –USER
GETDATE(),
‘on tehtud INSERT käsk’,
CONCAT(‘linn:’, inserted.linnanimi, ‘, elanike arv: ‘, inserted.rahvaarv)
FROM inserted;

DELETED!!!

CREATE TRIGGER linnaEmaldamine
ON linnad — tablenimi, mis on vaja jälgida
FOR DELETE
AS
INSERT INTO logi(kasutaja ,aeg, toiming, andmed)
SELECT
SUSER_NAME(), –USERS
GETDATE(), ‘on tehtud DELETE käsk’,
CONCAT(‘linn:’, deleted.linnanimi, ‘, elanike arv: ‘, deleted.rahvaarv)
FROM deleted;

–kontroll
DELETE FROM linnad
WHERE linnID=5;
SELECT * FROM linnad;
SELECT * FROM logi;

UPDATE!!!!

CREATE TRIGGER linnaUuendamine
ON linnad — tablenimi, mis on vaja jälgida
FOR UPDATE
AS
INSERT INTO logi(kasutaja ,aeg, toiming, andmed)
SELECT
SUSER_NAME(), –USERS
GETDATE(), ‘on tehtud UPDATE käsk’,
CONCAT(‘vanad andmed -linn:’, deleted.linnanimi, ‘,vanad andmed – elanike arv: ‘, deleted.rahvaarv,
‘\n uued andmed – linn:’, inserted.linnanimi, ‘,vanad andmed – elanike arv: ‘, inserted.rahvaarv)
FROM deleted
INNER JOIN inserted
ON deleted.linnID=inserted.linnID;

— kontroll
UPDATE linnad SET rahvaarv=2500
WHERE linnID=6;
SELECT * FROM linnad;
SELECT * FROM logi;

SELECT
name,
is_instead_of_trigger
FROM
sys.triggers
WHERE
type = ‘TR’;

SELECT * FROM sys.triggers;

INSER + DELETE

CREATE TRIGGER linnaLisamineJaKustutamine
ON linnad
AFTER INSERT, DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(),
GETDATE(),
‘INSERT’,
CONCAT(‘linn: ‘, inserted.linnanimi,
‘, elanike arv: ‘, inserted.rahvaarv)
FROM inserted

UNION ALL

SELECT 
SUSER_NAME(),
GETDATE(),
'DELETE',
CONCAT('linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv)
FROM deleted;

END

INSERT INTO linnad(linnanimi, rahvaarv)
VALUES (‘Neme’, 50000)

DELETE FROM
linnad
WHERE
linnID=7;
SELECT * FROM linnad
SELECT * FROM logi;

DISABLE TRIGGER linnaLisamine
ON linnad; — DISABLE TRIGGER

DISABLE TRIGGER linnaEmaldamine
ON linnad; — DISABLE TRIGGER

XAMPP Triggerite loomine

 Create table linnad(

 linnID int Auto_increment PRIMARY KEY,

 linnanimi varchar(15),

 rahvaarv int);

 Create table logi(

 id int Auto_increment PRIMARY KEY,

 aeg DATETIME,

 toiming  varchar(100),

 andmed varchar(200)

 )

INSERT INTO logi(kasutaja, aeg, toiming, andmed)
VALUES(
NOW(),
‘on tehtud INSERT käsk’,
CONCAT(‘linn:’, new.linnanimi, ‘, elanike arv: ‘, new.rahvaarv)
)

UUENDAMINE

DELETE

KONTROLL:

Auto Register – kodutöö

Alustame, DataBase – autoregister

Tehtud tablid, ja kontrollitud kõik tabled

Alustame teha trigerid

Esemene triger lisamine

Kontrollime:

Esemene admed on lisatatud

Teeme triger UPDATE (Minu mõtte teha aasta uuendus)

Proviime muudata aasta (kontrollime)

Vimane triger emaldamine

Nüüd kontrollime, emaldame üks andme:

Lisage seotud tabel ja muutke päästikut kahe tabeli põhjal

Ühenduse loomine

Create uus tabel

Lisame paar andmed

autoadmed lisame veel markID (fk)

Lisame veel markID

Teeme seoste vaade

Kontrollin et kõik on korras

Proovime vahetada triger lisamine

ja ei tööta 🙂

Litsin vigu

Nüüd kontrollime:

Kõik ilusti töötab

UPDATE kahe seotud tabeli põhjal

Muudame meie aastauuendus –> nüüd meil salvestab logitabelis –> vana/uus muudel, vana/uus aasta ja vana/uus –> mark mis võtab anded teisel tabelis

Kontrollin

Korekterin, sest tahan ilusam näide:

Nüüd mulle meildib kuidas näitab andmed

SQL server

Create database triger3tabelid;
use triger3tabelid;

Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);

Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed varchar(200)
);

CREATE TABLE maakond(
    maakondID int Primary KEY identity(1,1),
    maakond varchar(100) UNIQUE,
 pindala int);
    
INSERT INTO maakond(maakond)
VALUES ('Harjumaa');
INSERT INTO maakond(maakond)
VALUES ('Pärnumaa');

SELECT * FROM maakond

ALTER TABLE linnad ADD maakondID int;

ALTER TABLE linnad ADD CONSTRAINT fk_maakond
FOREIGN KEY (maakondID) References maakond(maakondID) 

SELECT * FROM linnad;
SELECT * FROM maakond;

INSERT INTO linnad(linnanimi, rahvaarv, maakondID)
Values('Tallinn', 600000, 1)

Trigerid –> LISAMINE

SELECT * FROM logi;

CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT GETDATE(),
'on tehtud INSERT',
CONCAT(m.maakond, ' linn ', l.linnanimi, ', ',l.rahvaarv)
FROM linnad l
INNER JOIN maakond m ON m.maakondID=l.maakondID;

Nüüd kontrollime, ebaõnnestus, emaldame triger

drop trigger linnaLisamine;

Uuesti teeme triger

CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT GETDATE(),
'on tehtud INSERT',
CONCAT(m.maakond, ' linn ', inserted.linnanimi, ', ',inserted.rahvaarv)
FROM inserted
INNER JOIN maakond m ON m.maakondID=inserted.maakondID;

Vahetame l. (linnad) –> panime inserted.

siis peab näidata õigesti. Kontrollime

Puhastame tabel logi, ja siis teeme insert

-- puhasta logi tabel
DELETE FROM logi;

INSERT INTO linnad(linnanimi, rahvaarv, maakondID)
Values('Maardu', 50000, 1)
SELECT * FROM linnad;
SELECT * FROM logi;

TÖÖÖTAB

Teeme triger emaldamine:

Teeme uus kasutaja;

ALTER TABLE logi ADD kasutaka varchar(30);

Nüüd triger

CREATE TRIGGER linnaKustutamine
ON linnad
FOR DELETE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaka)
SELECT GETDATE(),
'on tehtud INSERT',
CONCAT(m.maakond, ' linn ', deleted.linnanimi, ', ',deleted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN maakond m ON m.maakondID=deleted.maakondID;

Kontrollime:

CREATE TRIGGER linnaKustutamine
ON linnad
FOR DELETE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaka)
SELECT GETDATE(),
'on tehtud DELETE',
CONCAT(m.maakond, ' linn ', deleted.linnanimi, ', ',deleted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN maakond m ON m.maakondID=deleted.maakondID;

Triger Uuendamine

CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaka)
SELECT 
GETDATE(),
'on tehtud UPDATE',
CONCAT('vanad andmed ', m1.maakond, ' linn ', deleted.linnanimi, ', ',deleted.rahvaarv,
'uued andmed ', m2.maakond, ' linn ', inserted.linnanimi, ', ',inserted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN inserted ON deleted.linnID=inserted.linnID
INNER JOIN maakond m1 ON m1.maakondID=deleted.maakondID
INNER JOIN maakond m2 ON m2.maakondID=inserted.maakondID;

Kontrollime:

CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaka)
SELECT 
GETDATE(),
'on tehtud UPDATE',
CONCAT('vanad andmed ', m1.maakond, ' linn ', deleted.linnanimi, ', ',deleted.rahvaarv,
'uued andmed ', m2.maakond, ' linn ', inserted.linnanimi, ', ',inserted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN inserted ON deleted.linnID=inserted.linnID
INNER JOIN maakond m1 ON m1.maakondID=deleted.maakondID
INNER JOIN maakond m2 ON m2.maakondID=inserted.maakondID;

XSAMP

Trigeri Uuendus