Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы. Дятлов / Отчет Базы данных №4

.docx
Скачиваний:
0
Добавлен:
31.10.2025
Размер:
699.81 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Федеральное государственное бюджетное образовательное учреждение Высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. Проф. М. А. Бонч-Бруевича» (СПбГУТ)

Факультет Информационных технологий и программной инженерии

Кафедра Программной инженерии

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

По дисциплине: База данных

Выполнил студент: Яковлев М. А. ИКПИ-32

Принял работу: Дятлов Д. А.

Дата выполнения:

«11» октября 2025 г.

Санкт-Петербург

2025 г.

Цель работы

Цель работы – получение практических навыков в работе с транзакциями и их свойствами.

Ход выполнения

Выполненные действия:

1. Была создана или открыта ранее сохраненная база данных «university» в MySQL Workbench.

2. В базе данных создана таблица «users» с полями id (INT, PK), name (VARCHAR, NN), d_id (INT) и заполнена пятью произвольными записями.

3. Схема базы данных была сгенерирована на сервере MySQL.

Результаты выполнения команд:

Часть 1: Откат транзакции, обрыв связи с базой данных

Была выполнена следующая последовательность команд:

SET AUTOCOMMIT = 0;

START TRANSACTION;

SAVEPOINT sve_point;

DELETE FROM users;

ROLLBACK TO SAVEPOINT sve_point;

DELETE FROM users;

exit;

Результат выполнения команды:

Рисунок 1. Результат команды

После повторного подключения к базе данных и выполнения SELECT * FROM users; было установлено, что таблица users содержит исходные данные. Это демонстрирует, что незавершённая транзакция (без COMMIT) не применяется к базе данных, даже при обрыве соединения. Установка AUTOCOMMIT=0 требует явного подтверждения изменений.

Рисунок 2. Результат команды

Часть 2: Подтверждение транзакции и обрыв связи с базой данных

Была выполнена следующая последовательность команд:

SET AUTOCOMMIT = 0;

START TRANSACTION;

INSERT INTO users (id, name, d_id) VALUES (100, 'Antonio', 1);

COMMIT;

exit;

Результат выполнения команды:

Рисунок 3. Результат команд

Рисунок 3. Результат команды

После повторного подключения к базе данных и выполнения SELECT * FROM users; была обнаружена новая запись с id=100, именем Antonio и d_id=1. Это подтверждает, что после выполнения команды COMMIT изменения фиксируются в базе данных permanently и сохраняются после разрыва соединения.

При повторном запуске видно, что данные сохранены:

Рисунок 4. Результат команд

Выводы

В ходе выполнения работы были закреплены практические навыки работы с транзакциями в MySQL. Были экспериментально подтверждены ключевые свойства транзакций.

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

1. Что такое транзакция?

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

2. Приведите пример синтаксиса транзакции.

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;

UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;

COMMIT;

3. Какими SQL командами должна заканчиваться каждая транзакция?

Транзакция должна завершаться либо командой COMMIT (для сохранения изменений), либо командой ROLLBACK (для отмены всех изменений, сделанных в рамках текущей транзакции).

4. Что такое ACID? Расшифруйте и объясните термины ACID.

ACID — это набор свойств, обеспечивающих надёжную обработку транзакций.

· Атомарность (Atomicity): Транзакция выполняется как единое целое.

· Согласованность (Consistency): Транзакция переводит базу данных из одного корректного состояния в другое.

· Изолированность (Isolation): Параллельные транзакции не влияют друг на друга.

· Долговечность (Durability): Результаты зафиксированной транзакции не могут быть утеряны.

5. Приведите уровни изоляции в порядке от сильного уровня к слабому.

READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE.

6. Какие существуют режимы AUTOCOMMIT?

Режим AUTOCOMMIT может быть включён (=1), когда каждая отдельная SQL-команда считается транзакцией и автоматически фиксируется, или выключен (=0), когда для фиксации или отката группы команд требуется явно использовать COMMIT или ROLLBACK.