112 lines
5.7 KiB
SQL
112 lines
5.7 KiB
SQL
use Lucky_Shrub;
|
||
|
||
Основні завдання:
|
||
• Розробка INSERT, UPDATE та DELETE тригерів.
|
||
################################################
|
||
############## Умови завдань ###############
|
||
################ Завдання 1: ###############
|
||
1. Створіть INSERT триггер з назвою ProductSellPriceInsertCheck. Тригер має перевірити,
|
||
чи ціна SellPrice продукту менша ніж BuyPrice після того як новий продук було додано у таблицю Products.
|
||
Якщо таке станеться, у таблицю Notifications має бути додане сповіщення для відділу продажів.
|
||
Відділ продажів має переконатися, що таке значення було введено не помилково.
|
||
Сповіщення слід додати у такому форматі: 'Для продукту з id ' + ProductID + 'було внесено значення SellPrice яке менше чи рівне BuyPrice'
|
||
2. Перегляньте існуючі тригери
|
||
3. Перевіте роботу тригера. Додайте запис у таблицю Products із ціною закупки вищою ніж ціна продажу, на прклад:
|
||
P7, Агрополотно, 70, 70, 21;
|
||
|
||
4. Перевірте наявність запису у таблиці Products 5. Перевірте наявність запису у таблиці Notifications
|
||
|
||
drop trigger ProductSellPriceInsertCheck;
|
||
|
||
create trigger if not exists ProductSellPriceInsertCheck
|
||
after insert on Products
|
||
for each row
|
||
begin
|
||
if new.SellPrice <= new.BuyPrice then
|
||
insert into Notifications (Notification, DateTime)
|
||
values (concat('Для продукту з id ', new.ProductID, 'було внесено значення SellPrice яке менше чи рівне BuyPrice'), now());
|
||
end if;
|
||
end;
|
||
|
||
insert into
|
||
Products (
|
||
ProductID,
|
||
ProductName,
|
||
BuyPrice,
|
||
SellPrice,
|
||
NumberOfItems
|
||
)
|
||
values (
|
||
'P7',
|
||
'Агрополотно',
|
||
70,
|
||
70,
|
||
21
|
||
);
|
||
|
||
show triggers like 'Products';
|
||
|
||
select * from Notifications;
|
||
|
||
select * from Products;
|
||
|
||
delete from Products where ProductID = 'P7';
|
||
|
||
################################################
|
||
################ Завдання 2: ###############
|
||
1. Створіть UPDATE тригер з назвою ProductSellPriceUpdateCheck. Цей тригер повинен перевіряти
|
||
чи продукти не оновлюються з ціною SellPrice, яка менша чи рівна ціні BuyPrice. Якщо це так,
|
||
слід додати сповіщення до таблиці Notifications для відділу продажів щоб вони переконалися,
|
||
що ціни на продукти не оновлено з некоректними значеннями. Цей тригер надсилає сповіщення у
|
||
tаблицю Notifications, яке попереджає відділ продажів про проблему.
|
||
Сповіщення має бути додано у такому форматі: ProductID + 'було оновлено зі значенням SellPrice = ' + SellPrice + 'яке менше чи рівне значення BuyPrice'
|
||
2. Перегляньте тригери
|
||
3. Перевірте роботу тригера. Наприклад, змініть значення SellPrice на 65 для запису з ID продукту P6 таблиці Products
|
||
4. Перевірте наявність запису у таблиці Products
|
||
5. Перевіряємо наявність запису у таблиці Notifications
|
||
|
||
drop trigger if exists ProductSellPriceUpdateCheck;
|
||
|
||
create trigger if not exists ProductSellPriceUpdateCheck
|
||
before update on Products
|
||
for each row
|
||
begin
|
||
if new.SellPrice <= new.BuyPrice then
|
||
insert into Notifications (Notification, DateTime)
|
||
values (concat(new.ProductID, 'було оновлено зі значенням SellPrice = ', new.SellPrice, 'яке менше чи рівне значення BuyPrice'), now());
|
||
end if;
|
||
end;
|
||
|
||
update Products set SellPrice = 60 where ProductID = 'P1';
|
||
|
||
select * from Products where ProductID = 'P1';
|
||
|
||
select * from Notifications;
|
||
|
||
################################################
|
||
################ Завдання 3: ###############
|
||
1. Створіть тригер DELETE з назвою NotifyProductDelete. Цей тригер повинен додати сповіщення
|
||
до таблиці Notifications для відділу продажів після того, як продукт було видалено з таблиція Products.
|
||
Сповіщення повинно бути у такому форматі: 'Продукт з id' + ProductID + 'було видалено'
|
||
2. Перегляньте тригери
|
||
3. Перевірте роботу тригра. Наприклад, видаліть один запис із таблицю Products з ID продукту P7
|
||
4. Перевірте наявність запису у таблиці Products
|
||
5. Перевірте наявність запису у таблиці Notifications
|
||
|
||
drop trigger NotifyProductDelete;
|
||
|
||
create trigger if not exists NotifyProductDelete
|
||
after delete on Products
|
||
for each row
|
||
begin
|
||
insert into Notifications (Notification, DateTime)
|
||
values (concat('Продукт з id ', old.ProductID, 'було видалено'), now());
|
||
end;
|
||
|
||
show triggers like 'Products';
|
||
|
||
delete from Products where ProductID = 'P1';
|
||
|
||
select * from Products;
|
||
|
||
select * from Notifications; |