Trigerid kahe seotud tabelite põhjal

Loon tabelid

Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed varchar(200),
kasutaja varchar(200)
);
CREATE TABLE maakond(
    maakondID int Primary KEY identity(1,1),
    maakond varchar(100) UNIQUE);
    
INSERT INTO maakond(maakond)
VALUES ('Harjumaa');
INSERT INTO maakond(maakond)
VALUES ('Pärnumaa');

----seoste loomine linnad-->maakond
ALTER TABLE linnad ADD maakondID int;
ALTER TABLE linnad ADD CONSTRAINT fk_maakond
FOREIGN KEY (maakondID) References maakond(maakondID) 

SELECT * FROM maakond;
SELECT * FROM linnad;

Loon loomise trigger

CREATE TRIGGER linnaLisamine
On linnad
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT USER, GETDATE(), 'linn on lisatud',
CONCAT(l.linnanimi, ', ', m.maakond)
From linnad l
Inner join maakond m
ON m.maakondID=l.maakondID;

---kontroll

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

Loon kustutamise trigger

CREATE TRIGGER linnaKustutamine
On linnad
FOR DELETE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT USER, GETDATE(), 'linn on kustutatud',
CONCAT(deleted.linnanimi, ', ', m.maakond)
From deleted
Inner join maakond m
ON deleted.maakondID=m.maakondID;

---kontroll

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

Praktiline ülesanne (XAMPP)

loon andmebaas ja tabelid:

CREATE DATABASE filmidviblyy
CREATE TABLE filmid (
    filmID INT PRIMARY KEY AUTO_INCREMENT,
    filmNimi VARCHAR(255) NOT NULL,
    filmiAasta INT NOT NULL
);
CREATE TABLE logi (
    logiID INT PRIMARY KEY AUTO_INCREMENT,
    kasutaja VARCHAR(255) NOT NULL,
    kuupaev DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    sisestatudAndmed TEXT
);

loon triger lisamiseks:

loon triger kustutamiseks:

Kasutaja loomine:

Ma andsin temale kõik võimalused, ja nüüd võttan kõik tema lubad ara tabelis logi:

Kontroll:

1: Login sisse nagu Bogdan:

2: Lisan ja kustutan andmeid tabelis filmid:

Praktiline ülesanne (SQL)

loon andmebaas ja tabelid:

CREATE DATABASE filmviblyy
CREATE TABLE filmid (
    filmID INT PRIMARY KEY IDENTITY(1, 1),
    filmNimi VARCHAR(255) NOT NULL,
    filmiAasta INT NOT NULL
);


CREATE TABLE logi (
    logiID INT PRIMARY KEY IDENTITY(1, 1),
    kasutaja VARCHAR(255) NOT NULL,
    kuupaev DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    sisestatudAndmed TEXT
);

loon triger lisamiseks:

CREATE TRIGGER filmiLisamine
ON filmid 
FOR INSERT
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('lisatud andmed', inserted.filmNimi, ', ',inserted.filmiAasta)
FROM inserted

loon triger kustutamiseks:

CREATE TRIGGER filmiKustutamine
ON filmid 
FOR DELETE
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('kustutatud andmed: ', deleted.filmNimi, ', ',deleted.filmiAasta)
FROM deleted

Kasutaja loomine:

GRANT INSERT, DELETE ON filmid TO Bogdan;

Logime sisse nagu meie kasutaja

Kontroll

SELECT * FROM filmid
INSERT INTO filmid(filmNimi, filmiAasta)
VALUES ('Interstellar', 2014);
DELETE FROM filmid WHERE filmNimi='Interstellar';
UPDATE filmid SET filmNimi = 'Joker 2' WHERE filmNimi = 'Interstellar'

Lisa kommentaar