SQL Server

Loome andmebaasi ja kaks tabelit

Create database trigerTARgv24;
USE trigerTARgv24;
Create table linnad(
linnID int PRIMARY KEY IDENTITY (1,1),
linnanimi varchar(15) NOT NULL,
rahvaarv int);

Create table logi(
id int PRIMARY KEY IDENTITY (1,1),
aeg DATETIME,
toiming  varchar(100),
andmed TEXT
)

Trigger lisatud kirjeid jälgimiseks tabelis “linnad” INSERT

CREATE TRIGGER linnaLisamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT
GETDATE(),  --aeg
'on tehtud INSERT käsk',  --toiming
inserted.linnanimi  --andmed
FROM inserted;

Trigeri tegevuse kontroll

INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tallinn', 600000);
SELECT * FROM linnad;
SELECT * FROM logi;
SQL Triggerite loomine
USE [trigerTARgv24]
GO
/****** Object:  Trigger [dbo].[linnaLisamine]    Script Date: 19.03.2025 09:04:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad] --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT
GETDATE(),  --aeg
'on tehtud INSERT käsk',  --toiming
CONCAT('linn: ', inserted.linnanimi, ', elanike arv: ', inserted.rahvaarv)  --andmed
FROM inserted;
SQL Triggerite loomine
SQL Triggerite loomine
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad] --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), --USER
GETDATE(),  --aeg
'on tehtud INSERT käsk',  --toiming
CONCAT('linn: ', inserted.linnanimi, ', elanike arv: ', inserted.rahvaarv)  --andmed
FROM inserted;

Trigger eemaldatud kirjeid jälgimiseks tabelis “linnad”DELETE

CREATE TRIGGER linnaKustutamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR DELETE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), --USER
GETDATE(),  --aeg
'on tehtud DELETE käsk',  --toiming
CONCAT('linn: ', deleted.linnanimi, ', elanike arv: ', deleted.rahvaarv)  --andmed
FROM deleted;
--kontroll
DELETE FROM linnad
WHERE linnID=1;
SELECT * FROM linnad;
SELECT * FROM logi;
CREATE TRIGGER linnaUuendamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR UPDATE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), 
GETDATE(),  
'on tehtud UPDATE käsk',  
CONCAT('vanad andmed -linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv,
'uued andmed -linn: ', inserted.linnanimi,
', elanike arv: ', inserted.rahvaarv)  
FROM deleted
INNER JOIN inserted
ON deleted.linnID=inserted.linnID;

XAMPP

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 TEXT,
kasutaja varchar(50)
)
Päästikud

Trigger lisatud kirjeid jälgimiseks tabelis “linnad” INSERT

SQL Triggerite loomine

Trigger muudetud kirjeid jälgimiseks tabelis “linnad”UPDATE

SQL Triggerite loomine

Проверка:

Trigger eemaldatud kirjeid jälgimiseks tabelis “linnad”DELETE

Проверка:


Kombineerime INSERT ja DELETE triggerid

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

--Läbivaatus
INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tartu', 50000);

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

--Diaktiveerib päästiku
DISABLE TRIGGER linnaLisamine
ON linnad