ЛР 1

parents
.obsidian
\ No newline at end of file
# Лабораторная работа № 1
Трофимцова Е.Е., 2 курс, ИВТ-1.2
---
## Задание 1
### Раздел “Management” (“Управление”)
Этот раздел объединяет инструменты для повседневного администрирования сервера, управления доступом и обеспечения сохранности данных.
- **Раздел “Server Status”.** В разделе отображается общая информация о сервере и подключении к нему. Информация логически сгруппирована. Можно выделить следующие группы: 
- Общая информация (например, название хоста, номер порта, версия БД).
- Настройки сервера (например, включен ли брандмауэр, используется ли SSL)
- Каталоги сервера
- Сводка по используемым ресурсам компьютера (ОЗУ, процессор и т. д.)
- Настройки соединения SSL (если SSL включена).
- **Раздел “Client Connections”.** Предназначен для мониторинга и контроля всех активных сессий пользователей.
- Отображение списка подключенных клиентов (ID процесса, пользователь, хост, текущая база данных).
- Анализ выполняемых в данный момент SQL-запросов и времени их работы.
- Возможность принудительного завершения зависших или опасных процессов (кнопка _Kill Connection_).
- **Раздел “Users and Privileges”.** Основной центр управления безопасностью и правами доступа.
- Создание, редактирование и удаление учетных записей пользователей.
- Настройка глобальных прав (администрирование) и специфических прав на конкретные таблицы или схемы.
- Управление паролями и аутентификацией.
- **Раздел “Status and System Variables”.** Позволяет просматривать и изменять внутренние настройки конфигурации «на лету».
- Мониторинг динамических показателей (счетчики ошибок, количество выполненных транзакций, время работы).
- Просмотр системных переменных (настройки памяти, кодировок, лимиты подключений).
- Поиск и редактирование параметров конфигурации без прямого редактирования текстовых файлов.
- **Раздел “Data Export”.** Мастер создания резервных копий (дампов) базы данных.
- Выбор конкретных схем и таблиц для выгрузки.
- Настройка формата экспорта (один файл `.sql` или папка с отдельными файлами для каждой таблицы).
- Возможность включения в бэкап структуры таблиц, данных, а также процедур и триггеров.
- **Раздел “Data Import/Restore”.** Инструмент для восстановления данных из ранее созданных копий.
- Загрузка данных из отдельных SQL-файлов или из подготовленных папок с проектами.
- Выбор целевой схемы для развертывания данных.
- Визуальный мониторинг процесса импорта с выводом логов ошибок, если структура данных не совпадает.
---
### Раздел “Instance” (“Экземпляр БД”)
Этот раздел предназначен для управления жизненным циклом сервера и его конфигурацией на уровне операционной системы.
- **Раздел “Startup / Shutdown”.** Позволяет управлять состоянием службы базы данных.
- Дистанционный или локальный запуск и остановка сервера.
- Просмотр текущего статуса службы (работает/остановлена) и времени непрерывной работы (Uptime).
- **Раздел “Server Logs”.** Предоставляет интерфейс для чтения журналов (логов) сервера без необходимости искать их в файловой системе Linux.
- **Error Log**: просмотр ошибок и предупреждений сервера.
- **General Log**: история всех выполненных запросов (если включено).
- **Slow Query Log**: список запросов, которые выполнялись дольше заданного времени.
- **Раздел “Options File”.** Графический редактор основного конфигурационного файла (`my.cnf`).
- Настройка сетевых параметров (порт, лимиты подключений).
- Управление памятью и кэшем (InnoDB Buffer Pool и др.).
- Настройка кодировок (character sets) и путей к файлам данных.
---
### Раздел “Performance” (“Производительность”)
Инструментарий для глубокого анализа работы сервера и оптимизации SQL-запросов.
- **Раздел “Performance Dashboard”.** Панель визуального мониторинга ключевых показателей в реальном времени.
- Графики сетевой активности (отправленные/полученные данные).
- Статистика использования движка InnoDB (чтение/запись на диск).
- Мониторинг эффективности буферного пула и частоты выполнения операторов SELECT, INSERT, UPDATE.
- **Раздел “Performance Reports”.** Набор готовых аналитических отчетов, помогающих найти узкие места в базе.
- **Statement Analysis**: отчеты о самых «тяжелых» и частых запросах.
- **Schema Statistics**: информация о неиспользуемых индексах и таблицах, занимающих больше всего места.
- **Wait Events**: анализ того, на каких операциях сервер «простаивает» дольше всего.
- **Раздел “Performance Schema Setup”.** Тонкая настройка механизмов сбора статистики.
- Включение и выключение отдельных инструментов мониторинга.
- Выбор уровня детализации (сбор данных только по запросам или вплоть до каждой функции сервера).
## Задание 2
![[Pasted image 20260225121135.png]]
## Задание 3
```mysql
CREATE TABLE `simpledb`.`users` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`email` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `email_UNIQUE` (`email` ASC) VISIBLE);
```
## Задание 4
```mysql
INSERT INTO `simpledb`.`users` (`id`, `name`, `email`) VALUES ('1', 'Катя', 'katya@mail.ru');
INSERT INTO `simpledb`.`users` (`id`, `name`, `email`) VALUES ('2', 'Маша', 'masha@gmail.com');
INSERT INTO `simpledb`.`users` (`id`, `name`, `email`) VALUES ('3', 'Наташа', 'natasha@yandex.ru');
```
![[Pasted image 20260225122053.png]]
Внесение изменений:
```mysql
UPDATE `simpledb`.`users` SET `name` = 'Мария' WHERE (`id` = '2');
UPDATE `simpledb`.`users` SET `name` = 'Наталия' WHERE (`id` = '3');
```
![[Pasted image 20260225122249.png]]
## Задание 5
```mysql
ALTER TABLE `simpledb`.`users`
ADD COLUMN `gender` VARCHAR(45) NULL DEFAULT NULL AFTER `email`,
ADD COLUMN `bday` DATE NULL DEFAULT NULL AFTER `gender`,
ADD COLUMN `postal_code` VARCHAR(10) NULL DEFAULT NULL AFTER `bday`,
ADD COLUMN `rating` FLOAT NULL DEFAULT NULL AFTER `postal_code`,
ADD COLUMN `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP() AFTER `rating`,
CHANGE COLUMN `name` `name` VARCHAR(50) NOT NULL ;
```
Исправление ошибок, допущеннных при создании полей:
```mysql
ALTER TABLE `simpledb`.`users`
CHANGE COLUMN `gender` `gender` ENUM('M', 'F') NULL DEFAULT NULL ,
CHANGE COLUMN `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
```
- **ENUM('M', 'F')** используется для того, чтобы больше никакие значения, кроме 'M'/'F' не могли быть введены в это поле. База данных не позволит записать туда что-то кроме 'M' или 'F' (или пустоты, если разрешено). Это экономит место и защищает от ошибок.
- Использование типа **TIMESTAMP** со значением по умолчанию **CURRENT_TIMESTAMP()** позволяет автоматически фиксировать дату и время создания каждой записи.
- При добавлении новых строчек без явного указания значения для данного поля, СУБД самостоятельно подставляет текущую системную дату и время сервера.
- Это избавляет разработчика от необходимости передавать временную метку из приложения, гарантируя целостность хронологии данных.
- Для пользователей, которые не хотят делиться личной информацией, поля `gender, bday` и `postal_code` определены как `NULL` со значением по умолчанию `NULL`. Это позволяет создать профиль, указав только минимально необходимые данные (ID, имя/никнейм и email). Поле `rating` также имеет значение `NULL` по умолчанию, так как у пользователя может еще не быть рейтинга.
## Задание 6
Добавление данных вручную:
![[Pasted image 20260311003520.png]]
```mysql
INSERT INTO `simpledb`.`users` (`id`, `name`, `email`, `gender`, `bday`, `postal_code`, `rating`) VALUES ('4', 'Артемий', 'artemiy.r@gmail.com', 'm', '2001-02-03', '123456', '1');
```
После добавления этой строки было исправлено автоинкрементирование поля `id`:
```mysql
ALTER TABLE `simpledb`.`users`
CHANGE COLUMN `id` `id` INT NOT NULL AUTO_INCREMENT ;
```
Добавление данных с помощью sql-запросов:
```mysql
INSERT INTO `simpledb`.`users` (`name`, `email`, `postal_code`, `gender`, `bday`, `rating`) VALUES ('Ekaterina', 'ekaterina.petrova@outlook.com', '145789', 'f', '2000-02-11', '1.123');
INSERT INTO `simpledb`.`users` (`name`, `email`, `postal_code`, `gender`, `bday`, `rating`) VALUES ('Paul', 'paul@superpochta.ru', '123789', 'm', '1998-08-12', '1');
```
![[Pasted image 20260311003951.png]]
## Задание 7
```sql
/*
-- Query: SELECT * FROM simpledb.users
LIMIT 0, 1000
-- Date: 2026-03-11 00:42
*/
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (1,'Катя','katya@mail.ru',NULL,NULL,NULL,NULL,'2026-02-25 12:47:48');
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (2,'Мария','masha@gmail.com',NULL,NULL,NULL,NULL,'2026-02-25 12:47:48');
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (3,'Наталия','natasha@yandex.ru',NULL,NULL,NULL,NULL,'2026-02-25 12:47:48');
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (4,'Артемий','artemiy.r@gmail.com','M','2001-02-03','123456',1,'2026-03-11 00:33:35');
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (5,'Ekaterina','ekaterina.petrova@outlook.com','F','2000-02-11','145789',1.123,'2026-03-11 00:38:28');
INSERT INTO `` (`id`,`name`,`email`,`gender`,`bday`,`postal_code`,`rating`,`created`) VALUES (6,'Paul','paul@superpochta.ru','M','1998-08-12','123789',1,'2026-03-11 00:38:28');
```
Экспортированный файл содержит команды `INSERT INTO` для наполнения таблицы.
- Явно перечислены столбцы, что гарантирует корректную вставку данных даже при изменении порядка полей в таблице.
- Имена столбцов заключены в обратные кавычки (`` ` ``), что защищает от конфликтов с зарезервированными словами MySQL.
- Строки, даты и значения `ENUM` выделены одинарными кавычками (`' '`), а числа (ID, рейтинг) передаются без них.
- Явное указание `NULL` подтверждает, что определенные поля настроены как необязательные.
- Временные метки зафиксированы в формате `'YYYY-MM-DD HH:MM:SS'`, автоматически сгенерированном функцией `CURRENT_TIMESTAMP()`.
## Задание 8
```mysql
CREATE TABLE `simpledb`.`resume` (
`resumeid` INT NOT NULL AUTO_INCREMENT,
`userid` INT NOT NULL,
`title` VARCHAR(100) NOT NULL,
`skills` TEXT NULL,
`created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP(),
PRIMARY KEY (`resumeid`),
INDEX `userid_idx` (`userid` ASC) VISIBLE,
CONSTRAINT `userid`
FOREIGN KEY (`userid`)
REFERENCES `simpledb`.`users` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE);
```
Данный запрос выполняет создание дочерней таблицы с установлением логической связи «один ко многим» (у одного пользователя может быть несколько резюме), так как поле `userid` без флага `unique`.
- **Первичный ключ (`PRIMARY KEY`)**. Поле `resumeid` является идентификатором записи с автоприращением (`AUTO_INCREMENT`).
- **Внешний ключ (`FOREIGN KEY`)**. Поле `userid` в таблице `resume` ссылается на поле `id` в родительской таблице `users`.
- **Индексация**. При настройке внешнего ключа создается индекс `userid_idx` для ускорения операций поиска и объединения таблиц по идентификатору пользователя.
- **Ограничение (`CONSTRAINT`)**. Установлено правило целостности данных, которое связывает две таблицы на уровне ядра СУБД.
Выбор режима **CASCADE** для действий `ON DELETE` и `ON UPDATE` определяет автоматизированное поведение базы данных:
1. Если из таблицы `users` будет удалена запись (например, пользователь с `id = 4`), СУБД автоматически найдет и безвозвратно удалит все связанные с ним записи в таблице `resume` (где `userid = 4`). Это предотвращает появление «записей-сирот», которые ссылаются на несуществующих пользователей.
2. Если в таблице `users` изменится значение первичного ключа `id` (например, с `4` на `40`), СУБД автоматически обновит значение `userid` во всех связанных строках таблицы `resume`. Это позволяет сохранять целостность связей при технических изменениях идентификаторов.
## Задание 9
Добавление данных в таблицу **resume**:
```mysql
INSERT INTO `simpledb`.`resume` (`resumeid`, `userid`, `title`, `skills`) VALUES ('1', '5', 'Разработчик', 'писать код');
INSERT INTO `simpledb`.`resume` (`userid`, `title`, `skills`) VALUES ('6', 'Аналитик', 'анализировать данные');
```
Результат:
![[Pasted image 20260311023810.png]]
Добавление резюме с **userid** несуществующего пользователя:
```mysql
INSERT INTO `simpledb`.`resume` (`userid`, `title`) VALUES ('8', 'Менеджер');
```
Ожидаемо получили ошибку:
![[Pasted image 20260311024051.png]]
Содержимое sql-файла:
```sql
/*
-- Query: SELECT * FROM simpledb.resume
LIMIT 0, 1000
-- Date: 2026-03-11 02:42
*/
INSERT INTO `` (`resumeid`,`userid`,`title`,`skills`,`created`) VALUES (1,5,'Разработчик','писать код','2026-03-11 02:37:31');
INSERT INTO `` (`resumeid`,`userid`,`title`,`skills`,`created`) VALUES (2,6,'Аналитик','анализировать данные','2026-03-11 02:37:31');
```
У одного пользователя может быть несколько резюме, так как в таблице **resume** поле **userid** не было обозначено уникальным, минимального количества резюме нет.
## Задание 10
Удаление записи пользователя с **userid** 6 из таблицы **users**:
```mysql
DELETE FROM `simpledb`.`users` WHERE (`id` = '6');
```
Из таблицы **resume** запись с резюме этого пользователя соответственно удалилась:
![[Pasted image 20260311025040.png]]
Изменим **id** пользователя с 5 на 50:
```mysql
UPDATE `simpledb`.`users` SET `id` = '50' WHERE (`id` = '5');
```
В таблице **resume** userid также обновился 🥳:
![[Pasted image 20260311030540.png]]
---
Трофимцова Е.Е., 2 курс, ИВТ-1.2
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment