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

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


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


РАБОТА 25.О

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

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

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

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

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

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

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

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

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

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


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

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

Создан простой триггер.

1

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

4

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

5

Баллы

Оценка

5

отлично

4

Хорошо

3

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


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

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

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

  1. Создан простой триггер.

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

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

  1. Создадим триггер, в котором в таблице orders до добавления новой записи поле number будет установлено в единицу.

DELIMITER//

CREATE TRIGGER restrict_count BEFORE INSERTorders

FOR EACH ROW

BEGIN

SETNEW.namber=1;

END//

DELIMITER;
Проверимработутриггера.

INSERT INTO orders VALUES (1, NOW(), 2, 10);

SELECT * FROM orders WHERE id_order = LAST_INSERT_ID();

Id_order

Id_user

ordertime

number

Id_product

16

1

2019-04-17 18:30:02

1

10




  1. Допустим, при появлении нового студента в группе, ему сразу необходимо назначить консультацию с преподавателем. Тогда событие ‒ это INSERT, время вызова − AFTER, а таблица student.

DELIMITER $$

CREATE TRIGGER add_cons

AFTER INSERT ON student

FOR EACH ROW

BEGIN

DECLARE last_id INT DEFAULT 0;

SELECT id INTO last_id

FROM student

ORDER BY id DESC LIMIT 1;

INSERT INTO student_teacher_consultation

VALUES (null, last_id, 1, NOW() + INTERVAL 1 DAY);

END $$

 DELIMITER ;

Проверим теперь, действительно ли это работает. Добавляем студента, и далее смотрим, что получилось в таблицах студентов и консультаций:

INSERT INTO student VALUES (null, 'Hank', 23, '231-14-33', 1);

student

id

name

agt

phone

Group_id

1

Mike

25

345-65-78

2

2

John

27

123-65-12

1

4

Andy

20

244-34-12

3

5

Debra

21

987-65-43

1

6

Andy

24

323-43-98

1

7

Mike

23

313-54-21

3

8

Jeff

25

213-56-23

2

9

Stanley

23

111-23-43

3

10

Hank

23

231-14-33

1


student_teacher_consultation (расписаниеконсультаций)

id

student_id

ticherer_id

consultation_date

1

1

2

2015-07-23 10:40:00

2

2

1

2015-07-17 12:10:00

3

5

1

2015-07-17 13:10:00

4

8

3

2015-07-27 14:15:00

5

6

3

2015-07-11 10:34:00

6

10

1

2015-07-09 15:48:15




  1. Создадим триггер, в котором в таблице orders до добавления новой записи поле number будет установлено в единицу.

DELIMITER//

CREATE TRIGGER restrict_count BEFORE INSERTorders

FOR EACH ROW

BEGIN

SETNEW.namber=1;

END//

DELIMITER;

INSERT INTO orders VALUES (1, NOW(), 2, 10);

SELECT * FROM orders WHERE id_order = LAST_INSERT_ID();-- последнийID

Id_order

Id_user

ordertime

number

Id_product

16

1

2019-04-17 18:30:02

1

10

  1. Создадим триггер на добавление данных в таблицу. Если при добавлении данных окажется, что новое значение даты NULL, то установить текущую дату.

Create table tblname(id int, str varchar(45), dt date)

DELIMITER $$

CREATE TRIGGER tgins_tblname

BEFORE INSERT ON tablname

FOR EACH ROW

BEGIN

IFNEW.dt IS NULL THEN

SETNEW.dt = current_date();

END IF

END $$

DELIMITER;

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

INSERT INTO tblname VALUES(1, ‘text3’, NULL);

SELECT * FROM tblname;

tablname

id

str

dt

1

text1

2019-04-15 18:06:22

2

text2

2019-04-16 19:11:09

3

text3

2019-04-19 18:50:35




  1. Создадим триггер на добавление данных нового покупателя. При добавлении нового покупателя надо преобразовать имена и отчества покупателей в инициалы.

DELIMITER //

CREATE TRIGGER restrict_user

BEFORE INSERTON user

FOR EACH ROW

BEGIN

SET NEW.name = LEFT(NEW.name, 1);

SET NEW.patronymic = LEFT(NEW.patronimic, 1);

END //

DELIMITER;

Проверяемработутриггера

INSERT INTO users (surname, patronymic, name) VALUES(‘Ремезов’, ‘Алексеевич’, ‘Сергей’);

Выведемпоследнююзапись.

SELECT surname, patronymic, name FROM users WHERE id_user = LAST_INSERT_ID();


surname

patronimic

name

Ремезов

А

С




  1. Триггер на обновление таблицы. В таблицу LogsName в поле ValueCh будет занесена информация в виде объединения нового значения со старым.

table1

FirstName

Василий

Дмитрий


ValueCh

DateChange

Александр-Дмитрий

2019-04-17 18:25:05



DELIMITER //

CREATE TRIGGER myTrigger1BEFORE UPDATE ON table1

FOR EACH ROW

BEGIN

INSERT INTO LogsName (ValueCh, DateChange)

VALUES (CONCAT(NEW.`FirstName`,'-', OLD.`FirstName`), NOW()) ; 

END//

DELIMITER;

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

UPDATE table1 SET FirstName=‘Александр’ WHERE FirstName=‘Дмитрий’;

LogsName

  1. Рассмотримдветаблицыsotr(ids, fio) иproekt(idp, ids).

Реализуем триггер, который при удалении данных из таблицы sotr автоматически удаляет данные из таблицы proekt для обеспечения целостности (каскадное удаление).

Sort proekt



DELIMITER//

CREATE TRIGGER BEFOREe_delete_sotr BEFORE DELETE

ONsortFOR EACH ROW

BEGIN
DELETE FROM proektWHERE ids = OLD.ids;

END//

DELIMITER;

Проверяем работу триггера:

DELETE FROM sotr WHERE fio=‘Колпаков’;
Sortproekt





  1. Таблица proekt(idp, name, cost, price), содержит код проекта, название, стоимость, наценку. Создадим триггер, который ко вводимой стоимости устанавливает наценку в 25% и помещает новую стоимость в поле price.

DELIMITER//

CREATE TRIGGER BEFOREe_update_cost

BEFOREE UPDATE ON proekt FOR EACH ROW

BEGIN

SETNew.price = New.cost * 1.25;

END//

DELIMITER;

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

INSERT INTO proekt values(“Проект 3”, 300);

idp

name

cost

price

1

Проект 1

100

125

2

Проект 2

200

250

3

Проект 3

300

375
1   2   3   4   5   6   7   8


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