first commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
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;
|
||||
@@ -0,0 +1,65 @@
|
||||
CREATE DATABASE EventsDB;
|
||||
|
||||
USE EventsDB;
|
||||
|
||||
CREATE TABLE Messages (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||
message VARCHAR(100),
|
||||
created_at DATETIME
|
||||
);
|
||||
|
||||
SET GLOBAL event_scheduler = ON;
|
||||
|
||||
#1.1 Створіть одноразову подію (слайд 33)
|
||||
CREATE EVENT IF NOT EXISTS test_event_02
|
||||
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 second
|
||||
ON COMPLETION PRESERVE
|
||||
DO
|
||||
INSERT INTO
|
||||
Messages(message,created_at)
|
||||
VALUES('Test MySQL Event 2', DATE_FORMAT(
|
||||
CONVERT_TZ(
|
||||
UTC_TIMESTAMP(),
|
||||
'+00:00',
|
||||
'Europe/Kyiv'
|
||||
),
|
||||
'%Y-%m-%d %H:%i:%s'
|
||||
));
|
||||
|
||||
drop event test_event_02;
|
||||
|
||||
ALTER EVENT test_event_02
|
||||
ON SCHEDULE AT NOW()
|
||||
ENABLE;
|
||||
|
||||
SHOW EVENTS;
|
||||
|
||||
# 1.2 Переконайтеся у її працездатності
|
||||
|
||||
select * from Messages;
|
||||
|
||||
# 2.1 Створіть повторювану подію (слайд 34)
|
||||
CREATE EVENT test_event_03
|
||||
ON SCHEDULE EVERY 1 MINUTE
|
||||
STARTS CURRENT_TIMESTAMP
|
||||
ENDS CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
|
||||
DO
|
||||
INSERT INTO Messages(message,created_at)
|
||||
VALUES('Test MySQL recurring Event', DATE_FORMAT(
|
||||
CONVERT_TZ(
|
||||
UTC_TIMESTAMP(),
|
||||
'+00:00',
|
||||
'Europe/Kyiv'
|
||||
),
|
||||
'%Y-%m-%d %H:%i:%s'
|
||||
));
|
||||
|
||||
drop event test_event_03;
|
||||
|
||||
SHOW EVENTS;
|
||||
|
||||
# 2.2 Переконайтеся у її працездатності
|
||||
|
||||
select * from Messages;
|
||||
|
||||
set global time_zone = 'Europe/Kyiv';
|
||||
@@ -0,0 +1,94 @@
|
||||
|
||||
Робота з тригерами (triggers)
|
||||
Lucky Shrub потребує визначити правила для вставки, оновлення та видалення даних про продукти у своїй базі даних. Вам слід використати для цього тригери
|
||||
Таблиця Products містить наступну інформацію про кожен продукт:
|
||||
• ProductID,
|
||||
• ProductName,
|
||||
• BuyPrice,
|
||||
• SellPrice ,
|
||||
• NumberOfItems.
|
||||
|
||||
Передумови
|
||||
Для виконання роботи Вам потрібна буде база даних Lucky Shrub та таблиця Products в MySQL. Таблиця Products повинна бути заповнена відпвідними даними. Виконайте наступні кроки для створення бази даних (якщо потрібно) та заповнення таблиці даними:
|
||||
------------------------------------------------
|
||||
1: Створіть базу даних Lucky_Shrub (якщо потрібно)
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS Lucky_Shrub;
|
||||
-------------------------------------------------
|
||||
2: Оберіть базу даних Lucky_Shrub
|
||||
|
||||
USE Lucky_Shrub;
|
||||
------------------------------------------------
|
||||
3: Створіть таблицю Products:
|
||||
|
||||
CREATE TABLE Products (
|
||||
ProductID VARCHAR(10) PRIMARY KEY,
|
||||
ProductName VARCHAR(100),
|
||||
BuyPrice DECIMAL(6, 2),
|
||||
SellPrice DECIMAL(6, 2),
|
||||
NumberOfItems INT
|
||||
);
|
||||
------------------------------------------------
|
||||
4: Використайте наступний код для заповнення таблиці Products:
|
||||
|
||||
INSERT INTO
|
||||
Products (
|
||||
ProductID,
|
||||
ProductName,
|
||||
BuyPrice,
|
||||
SellPrice,
|
||||
NumberOfITems
|
||||
)
|
||||
VALUES (
|
||||
"P1",
|
||||
"Artificial grass bags ",
|
||||
40,
|
||||
50,
|
||||
100
|
||||
),
|
||||
(
|
||||
"P2",
|
||||
"Wood panels",
|
||||
15,
|
||||
20,
|
||||
250
|
||||
),
|
||||
(
|
||||
"P3",
|
||||
"Patio slates",
|
||||
35,
|
||||
40,
|
||||
60
|
||||
),
|
||||
(
|
||||
"P4",
|
||||
"Sycamore trees ",
|
||||
7,
|
||||
10,
|
||||
50
|
||||
),
|
||||
(
|
||||
"P5",
|
||||
"Trees and Shrubs",
|
||||
35,
|
||||
50,
|
||||
75
|
||||
),
|
||||
(
|
||||
"P6",
|
||||
"Water fountain",
|
||||
65,
|
||||
80,
|
||||
15
|
||||
);
|
||||
|
||||
------------------------------------------------
|
||||
5: Створіть таблицю Notifications з такими полями:
|
||||
|
||||
CREATE TABLE Notifications (
|
||||
NotificationID INT AUTO_INCREMENT,
|
||||
Notification VARCHAR(255),
|
||||
DateTime TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (NotificationID)
|
||||
);
|
||||
------------------------------------------------
|
||||
Reference in New Issue
Block a user