Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задания практика 3 часть консоль БД MySQLпо ПР ТРЗБД_.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Задание 2

Создать таблицы следующей структуры:

1. Квартиры(*НомерКвартиры, Адрес, Телефон, КолвоКомнат, Этаж, Район, Владелец, Стоимость, ПризнакПродажи), если квартира не продана, то ПризнакПродажи=0, если продана, то 1.

2. Сделка(*НомерСделки, Дата, СуммаСделки, ФИО_Реелтера). Написать триггер, который каждый раз при добавлении записи в таблицу «Сделка», помечает квартиру в таблице «Квартиры» как проданную, т.е. поле «ПризнакПродажи» устанавливается равным 1.

Задание 3

Отпуск товара со склада выполняется по документу «Накладная», который имеет шапку и строки. В шапке накладной содержится информация о том, кому, кем и когда отпускается товар со склада. В строках накладной содержится информация о тех товарах, которые отпускаются по этой накладной. По одной накладной можно отпустить несколько разных товаров со склада.

Информация о накладных хранится в двух таблицах:

«ШапкаНакладной» и «СтрокиНакладной». Таблицы имеют следующую структуру:

1. ШапкаНакладной(*НомерНакл, Поставщик, Покупатель, ДатаОтпуска, СуммаПоНакл)

2. СтрокиНакладной(*НомерЗаписи, НомерНакл, НазваниеТовара, Цена, Колво, ЕдИзм).

Где

* - отмечены первичные ключи

ЕдИзм – единица измерения товара: штуки, пачки, ящики и т.д.

СуммаПоНакл – сумма товара по всей накладной, считается как сумма произведения Цена* Колво по всем строкам данной накладной.

Поле «НомерНакл» в таблице «СтрокиНакладной» является внешним ключом и ссылается на первичный ключ таблицы «ШапкаНакладной».

Создать таблицы. Написать триггеры, которые бы при изменении, удалении, добавлении строк в таблице «СтрокиНакладной» автоматически обновляли поле СуммаПоНакл в таблице «ШапкаНакладной».

Задание 4

Создайте триггеры для своего варианта базы данных.

Контрольные вопросы

  1. Что такое триггер?

  2. Для чего используются контекстные переменные в теле триггера?

  3. Можно ли в теле триггера использовать локальные переменные?

  4. Можно ли в теле триггера использовать операторы ветвлений и циклические операторы?

  5. С помощью каких команд можно создать триггер? Как удалить триггер?

  6. Каким образом посмотреть какие триггеры уже созданы в базе данных?

  7. Приведите примеры триггеров.

Лабораторная работа № 19

Тема: «Создание транзакции с откатом и фиксацией»

Цель работы: Научиться создавать запросы в клиентском приложении.

Время выполнения: подготовка: 5 мин; выполнение: 120 мин; проверка: 10 мин; всего: 135 мин.

Указания к выполнению лабораторной работы

Транзакция - это группа операций обработки данных, выполняемых как некоторое неделимое действие над базой данных, осмысленное с точки зрения пользователя.

По умолчанию СУБД MySQL работает в режиме автоматического завершения транзакций, т.е. как только выполняется оператор обновления данных, который модифицирует таблицу, MySQL тут же сохраняет изменения на диске. Для объединения в транзакцию нескольких операторов необходимо отключить этот режим. Это можно осуществить при помощи оператора SET AUTOCOMMIT

mysql> SET AUTOCOMMIT=0;

После отключения режима автоматического завершения транзакций следует использовать оператор COMMIT, чтобы сохранить изменения на диске, либо ROLLBACK, чтобы отменять изменения, выполненные с момента начала транзакции. Для того, чтобы включить режим автоматического завершения транзакций необходимо выполнить оператор SET AUTOCOMMIT=1.

mysql> SET AUTOCOMMIT=0; mysql> INSERT INTO catalogs VALUES(NULL,'Переферия'); mysql> INSERT INTO catalogs VALUES(NULL,'Разное'); mysql> SELECT * FROM catalogs;

id_catalog

name

1

Процессоры           

2

Материнские платы  

3

Видеоадаптары        

4

Жёсткие диски        

5

Оперативная память 

6

Переферия           

7

Разное              

mysql> ROLLBACK; mysql> SELECT * FROM catalogs;

id_catalog 

name                

1

Процессоры           

2

Материнские платы  

3

Видеоадаптары       

4

Жёсткие диски       

5

Оперативная память 

mysql> INSERT INTO catalogs VALUES(NULL,'Переферия'); mysql> INSERT INTO catalogs VALUES(NULL,'Разное'); mysql> COMMIT; mysql> SELECT * FROM catalogs;

id_catalog 

name                

1

Процессоры           

2

Материнские платы  

3

Видеоадаптары        

4

Жёсткие диски       

5

Оперативная память 

9

Переферия           

10

Разное              

mysql> SET AUTOCOMMIT=1;

В таблицу catalogs добавляются новые записи, при этом выполнения оператора ROLLBACK позволяет отменить все изменения, которые были произведены над таблицей catalogs. Напротив, оператор COMMIT сохраняет изменения на диске и уже следующий оператор ROLLBACK вернёт последнее сохранённое состояние.

Для того чтобы включить режим автоматического завершения транзакций только для отдельной последовательности операторов, можно воспользоваться оператором START TRANSACTION.

mysql> START TRANSACTION; mysql> SELECT @total := count FROM products      -> WHERE name = 'Celeron D 320 2.4GHz';

@total := count 

1

mysql> UPDATE products SET count = @total - 1      -> WHERE name = 'Celeron D 320 2.4GHz'; mysql> COMMIT;

После выполнения оператора START TRANSACTION режим автоматического завершения транзакций остаётся включённым до явного завершения транзакции с помощью оператора COMMIT или отката транзакции при помощи ROLLBACK.

Общий вид работы транзакции:

1. SET AUTOCOMMIT=0;

2. START TRANSACTION;

3. UPDATE ...;

UPDATE ...;

UPDATE ...;

4. если на каком либо из UPDATE произошел сбой, то - ROLLBACK , иначе - COMMIT;

5. SET AUTOCOMMIT=1;