Задание SQL’is

Loo uus AB ja kasutan seda

create database RaamatuKoguSergachev;
use RaamatuKoguSergachev

Loo tabeli «raamat», «author», «logi». Authori ja raamatu tabelite ühendamine

CREATE TABLE raamat (
    raamatID INT PRIMARY KEY IDENTITY(1,1),
    raamatuNimi VARCHAR(50),
    authorID INT NOT NULL,
    hind INT NOT NULL,
    FOREIGN KEY (authorID) REFERENCES author(authorId)
);

create table logi(
logiID int primary key identity(1,1),
kuupaev datetime,
sisestatudAndmed text,
kasutaja varchar(50));

CREATE TABLE author (
    authorId INT PRIMARY KEY IDENTITY(1,1),
    authorNimi VARCHAR(40) UNIQUE,
    authorPerenimi VARCHAR(50)
);

Lisame andmeid tabelis «Author»

insert author( authorNimi, authorPerenimi)
values('Aleksander', 'Pushkin')

Teen päästikud «DELETE», «INSERT», «UPDATE»

Päästik «INSERT»

create trigger raamatuLisamine
on raamat
for insert
as 
insert into logi (kasutaja, kuupaev, sisestatudAndmed)
select user, getdate(),
concat( 'Raamat on lisatud ', r.raamatuNimi, ', ', a.authorNIMI, ', ', r.hind)
from raamat r
inner join author a
on a.authorID =r.raamatID;

drop trigger raamatuLisamine


insert into raamat(raamatuNimi, authorID, hind)
values ('Paul hakkab inseneriks', 1, 23)
select * from raamat
select * from logi

Päästik «DELETE»

create trigger raamatuKustutamine
on raamat 
for delete
as 
insert into logi (kasutaja, kuupaev, sisestatudAndmed)
select user, getdate(),
concat('Raamatu on kustutatud ', deleted.raamatuNimi, ', ', a.authorNimi)
from deleted 
inner join author a
on deleted.authorID =a.authorID;


--kontroll

delete from raamat
where raamatID = 7;


select * from raamat 
select * from logi

Päästik «UPDATE»

create trigger raamatuUuendamine
on raamat 
for update
as 
insert into logi (kasutaja, kuupaev, sisestatudAndmed)
select user, getdate(),
concat(
'Raamatu on uuendatud. ', 'Vanad andmed - ', deleted.raamatuNimi, ', ', a1.authorNimi, '. ', 
'Uuendatud andmed - ', inserted.raamatuNimi, ', ', a2.authorNimi
)
from deleted 
inner join inserted on deleted.raamatID=inserted.raamatID
inner join author a1 on deleted.authorID =a1.authorID
inner join author a2 on inserted.authorID =a2.authorID;


-- Kontrollime 

update raamat set raamatuNimi = 'Tallinn-Väike', authorID = 1
where raamatID=6;
select * from raamat 
select * from logi

Seejärel teen kasutaja: Opilane

Teeme kasutajapiirangud

grant select, insert, delete, update on raamat to Opilane

kontrolime