Главная страница

бд. бд БАНК_ЗАДАНИЙ. Удаленный доступ к базе с любого хоста


Скачать 0.91 Mb.
НазваниеУдаленный доступ к базе с любого хоста
Дата08.10.2021
Размер0.91 Mb.
Формат файлаdocx
Имя файлабд БАНК_ЗАДАНИЙ.docx
ТипДокументы
#243833
страница6 из 8
1   2   3   4   5   6   7   8

  1. Определим, чтобы новая стоимость определялась в зависимости от величины старой, а именно если цена меньше 100, то пусть будет 100, если же цена больше 100, но меньше 200, то пусть будет 200.

idp

name

cost

price

1

Проект 1

100

125

2

Проект 2

200

250

1

Проект 3

150

375

Для этого используем выражение IF, с учетом которого триггер BEFOREe_update_cost принимает вид:

DELIMITER//

CREATE TRIGGER BEFOREe_update_cost

BEFORE UPDATE ON proekt FOR EACH ROW

BEGIN

IF NEW.cost < 100

then SET NEW.price = 100;

elseIF NEW.cost > 100  AND NEW.cost <= 300 then SET NEW.price = 250 ;

endIF

END//

DELIMITER;

Проверкаработытриггера

UPDATE proekt SET cost=300 WHERE cost=150;

idp

name

cost

price

1

Проект 1

100

125

2

Проект 2

200

250

1

Проект 3

150

250

  1. Вывод сообщения об ошибоке в триггере

delimiter //

use test//

create table trigger_test(id int not null);

drop trigger if exists trg_trigger_test_ins;

create trigger trg_trigger_test_ins BEFORE insert on trigger_test

for each row

begin

declare msg varchar(128);

if new.id < 0 then

set msg = concat('MyTriggerError: Trying to insert a negative value in trigger_test: ', cast(new.id as char));

signal sqlstate '45000' set message_text = msg;

end if;

end//

delimiter ;

Проверка работы триггера

insert into trigger_test values (1), (-1), (2); -- everything fails asone row is bad (всеневерно)

select * from trigger_test;

insert into trigger_test values (1); -- succeeds as expected (успешно)

insert into trigger_test values (-1); -- fails as expected (не так, как ожидалось)

select * from trigger_test;


  1. Естьтаблица readers состолбцами (number, name, date_of_born, address, telephone, date_registration).

Нужно написать триггер чтоб было условие: при вставке данных в столбец date_registration вычиталось 16 YEAR и эта дата ('date_registration' - 16) была меньше вставляемой даты в столбец date_of_born. В противном случае разрешить вставку данных.Если условие выполняется - то запретить вставку.

DELIMITER //

CREATE TRIGGER do

BEFOREE INSERT ON readers

FOR EACH ROW

BEGIN

IF DATE_SUB(NEW.date_registration, interval 16 year) > NEW.date_of_born

THENsetmsg = ('MyTriggerError: новаядатарегистрациибольшеднярождения');

signal sqlstate '45000' set message_text = msg;

END IF;

END //

DELIMITER;
Проверкаработытриггера

INSERT INTO readers(number, name, date_of_born, address, telephone, date_registration)

VALUES(3, “Виктор”, “1993-08-01”, “СПб, ул.Садовая, 59, 3 ”, “1993-08-11”)

Mysql>MyTriggerError: новая дата регистрации больше дня рождения


  1. В таблице Заказчик добавить поле сумма заказов, при добавлении нового заказа для данного заказчика, обновлять это поле с учетом нового заказа.

Внесем необходимые изменения в таблицу Заказчик.

ALTER TABLE clientADD Total INT DEFAULT '0' AFTER Phone;

DELIMITER $$

CREATE TRIGGER `update_total` AFTER INSERT ON `order-product`

FOR EACH ROW

BEGIN

declare order_total int(10);

declare clientID int(10);

SELECT product.Price * order-product.Amount into order_total

FROM order-product, product

WHERE order-product.Product_ID = product.ID_prod

AND order-product.Order_ID = new.Order_ID

AND order-product.Product_ID = new.Product_ID;

SELECT ID_client into clientID

FROM order a

WHERE a.ID_order = new.Order_ID;
UPDATE client SET Total = Total + order_total WHERE ID_client = clientID;

END; &&

DELIMITER;

Можно записать тело по-другому, без объявления переменных, в одну команду.

CREATE TRIGGER update_total AFTER INSERT ON order-product

FOR EACH ROW

BEGIN

UPDATE client

SET Total =Total+ (SELECT product.Price * order-product.Amount

FROM order-product, product

WHERE order-product.Product_ID = product.ID_prod

AND order-product.Order_ID = new.Order_ID

AND order-product.Product_ID = new.Product_ID)

WHERE ID_client = (SELECT ID_clientFROM order a

WHERE a.ID_order = new.Order_ID);

END;

Теперь проиллюстрируем работу созданного триггера. Покажем вид таблицы Заказчик до изменений.

SELECT * FROM client WHERE ID_client = 6;









Таблица Client после работы триггера.



ЗАДАНИЕ 25.1.О

Нарисать триггеры в сооьветствии со своим вариантом.

Вариант

Описание задания



    1. Создать триггер BEFORE INSERT.

    2. Создать триггер AFTERUPDATEcиспользованиемв теле триггера оператора IF.



      1. Создать триггер BEFORE DELETE.

      2. Создать триггер AFTERINSERTс операторомCASE.



    1. Создать триггер AFTER INSERN.

    2. Создать триггер AFTERDELETE с использованием в теле триггера оператора цикла.



    1. Создать триггер BEFOREE UPDATE.

    2. Создать триггер AFTERINSERT с использованием в теле триггера оператора IF.



    1. Создать триггер AFTER INSERT.

    2. Создать триггер AFTERDELETE с генерацией ошибки в теле триггера.



    1. Создать триггер BEFORE DELETE.

    2. Создать триггер AFTERINSERT с использованием оператора CASE.



    1. Создать триггер AFTER UPDATR.

    2. Создать триггер BEFOREDELETE с использованием оператора REPEAT.



    1. Создать триггер AFTER INSERT.

    2. Создать триггер BEFOREUPDATE с использованием оператора WHILE.



    1. Создать триггер BEFORE INSERT.

    2. Создать триггер BEFOREDELETE с генерацией ошибки.



    1. Создать триггер AFTER DELETE.

    2. Создать триггер BEFOREINSERTc использованием условного оператора.



    1. Создать триггер AFTER DELETE.

    2. Создать триггер BEFOREUPDATE с использованием оператора WHILE.



    1. Создать триггер BEFORE INSERT.

    2. Создать триггер AFTERUPDATEcиспользованиемв теле триггера оператора IF.



      1. Создать триггер BEFORE DELETE.

      2. Создать триггер AFTERINSERTс оператором CASE.



    1. Создать триггер AFTER INSERN.

    2. Создать триггер AFTERDELETE с использованием в теле триггера оператора цикла.



    1. Создать триггер BEFORE UPDATE.

    2. Создать триггер AFTERINSERT с использованием в теле триггера оператора IF.



    1. Создать триггер AFTER INSERT.

    2. Создать триггер AFTERDELETE с генерацией ошибки в теле триггера.



    1. Создать триггер BEFORE DELETE.

    2. Создать триггер AFTERINSERT с использованием оператора CASE.



    1. Создать триггер AFTER UPDATE.

    2. Создать триггер BEFOREDELETE с использованием оператора REPEAT.



    1. Создать триггер AFTER INSERT.

    2. Создать триггер BEFOREUPDATE с использованием оператора WHILE.



    1. Создать триггер BEFORE INSERT.

    2. Создать триггер BEFOREDELETE с генерацией ошибки.



    1. Создать триггер AFTER DELETE.

    2. Создать триггер BEFOREINSERTc использованием условного оператора.



    1. Создать триггер AFTER DELETE.

    2. Создать триггер BEFOREUPDATE с использованием оператора IF.



    1. Создать триггер BEFORE INSERT.

    2. Создать триггер AFTERUPDATEc использованием в теле триггера оператора IF.



      1. Создать триггер BEFORE DELETE

      2. Создать триггер AFTERINSERTс оператором CASE



      1. Создать триггерAFTER INSERN.

      2. Создать триггер AFTER DELETEс использованием в теле триггера оператора цикла.



    1. Создать триггер BEFORE UPDATE.

    2. Создать триггер AFTERINSERT с использованием в теле триггера оператора IF.



    1. Создать триггер AFTER INSERT.

    2. Создать триггер AFTERDELETE с генерацией ошибки в теле триггера.



    1. Создать триггер BEFORE DELETE.

    2. Создать триггер AFTERINSERT с использованием оператора WHILE.



    1. Создать триггер AFTER DELETE.

    2. Создать триггер BEFOREUPDATE с использованием оператора IF.



    1. Создать триггер AFTER UPDATR.

    2. Создать триггер BEFOREDELETE с использованием оператора REPEAT.

РАБОТА 26.О

«Выполнение и отмена транзакций»

Формируемые/проверяемые умения

Формируемые/проверяемые знания

Создавать объекты баз данных в современных СУБД

Обеспечивать информационную безопасность на уровне базы данных

Способы контроля доступа к данным и управления привилегиями

Время выполнения задания – 90 минут.

Уровень сложности работы – 2

Необходимое оборудование, материалы, документация: ПК, МУ по выполнению практических работ.

КРИТЕРИИ ОЦЕНИВАНИЯ РАБОТЫ КРИТЕРИИ ВЫСТАВЛЕНИЯ ОЦЕНКИ


Наименование показателей

Количество баллов

Отключен режим автоматического завершения

1

Данные изменены

1

Осуществлена проверка изменения данных

1

Осуществлен откат транзакции

1

Воспроизведена транзакция

1

Действия по изменению данных сохранены

1

Максимальное количество баллов

6

Баллы

Оценка

6

отлично

5

Хорошо

4

Удовлетворительно


СОДЕРЖАНИЕ РАБОТЫ

Создание триггеров.

26.Т ТИПОВОЕ ЗАДАНИЕ

  1. Отключить режим автоматического завершения.

  2. Изменить данные.

  3. Осуществить проверку изменения данных.

  4. Осуществить откат транзакции.

  5. Воспроизвести транзакция.

  6. Сохраниить действия по изменению данных.


ХОД ВЫПОЛНЕНИЯ ТИПОВОГО ЗАДАНИЯ 26.Т

  1. Отключаем режим автоматического завершения, добавляем новые записи и проверяем, добавились записи или нет.

mysql>SET AUTOCOMMIT=0;

mysql>INSERT INTO catalogs VALUES(NULL,'Аппаратура' );

mysql>INSERT INTO catalogs VALUES(NULL,'Безопасность')

mysql>SELECT * FROM catalogs;

Cat_ID

Cat_name

1

Программирование

2

Интернет

3

Базы данных

4

Сети

5

Мультимедиа

6

Аппаратура

7

Безопасность




  1. Откатываем транзакцию оператором ROLLBACK (изменения не сохранились).

mysql>ROLLBACK;

mysql>SELECT * FROM catalogs;


Cat_ID

Cat_name

1

Программирование

2

Интернет

3

Базы данных

4

Сети

5

Мультимедиа




  1. Воспроизведем транзакцию и сохраним действия оператором COMMIT.

mysql>INSERT INTO catalogs VALUES(NULL,'Аппаратура' );

mysql>INSERT INTO catalogs VALUES(NULL,'Безопасность')

mysql>SELECT * FROM catalogs;

Cat_ID

Cat_name

1

Программирование

2

Интернет

3

Базы данных

4

Сети

5

Мультимедиа

8

Аппаратура

9

Безопасность


mysql>COMMIT;

mysql> SELECT * FROM catalogs;

Cat_ID

Cat_name

1

Программирование

2

Интернет

3

Базы данных

4

Сети

5

Мультимедиа

8

Аппаратура

9

Безопасность

ЗАДАНИЕ 26.1.О

Cоздать транзакцию, произвести ее откат и фиксацию. Показать, что данные существовали до отката, удалились после отката, снова были добавлены, и затем были успешно зафиксированы.
1   2   3   4   5   6   7   8


написать администратору сайта