Временные таблицы MySQL и сессионные данные

MySQLBeginner
Практиковаться сейчас

Введение

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

В ходе лабораторной работы вы будете вставлять данные в эту таблицу, запрашивать ее для получения информации и исследовать ее область видимости, специфичную для сессии, пытаясь получить к ней доступ из другой сессии. Наконец, вы узнаете, как явно удалить временную таблицу и поймете процесс ее автоматической очистки. Эта лабораторная работа даст вам практическое понимание того, как временные таблицы могут использоваться для манипулирования данными, специфичными для сессии.

Подключение к MySQL и создание временной таблицы

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

Сначала откройте терминал в виртуальной машине LabEx. Подключитесь к серверу MySQL от имени пользователя root, используя следующую команду.

sudo mysql -u root

После выполнения команды вы должны увидеть приглашение MySQL, которое выглядит как mysql>. Это означает, что вы успешно подключились к серверу MySQL и теперь можете выполнять SQL-команды.

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

CREATE DATABASE IF NOT EXISTS test;
USE test;

Далее создайте временную таблицу с именем temp_employees. Синтаксис аналогичен созданию обычной таблицы, но вы должны включить ключевое слово TEMPORARY.

Выполните следующую SQL-команду в приглашении mysql>:

CREATE TEMPORARY TABLE temp_employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    department VARCHAR(255)
);

Эта команда создает временную таблицу с тремя столбцами:

  • id: Целое число, которое служит первичным ключом и автоматически увеличивается для каждой новой строки.
  • name: Строка (до 255 символов) для хранения имени сотрудника.
  • department: Строка (до 255 символов) для хранения отдела сотрудника.

Чтобы убедиться, что временная таблица успешно создана в вашей текущей сессии, используйте команду DESCRIBE.

DESCRIBE temp_employees;

Вывод покажет структуру таблицы temp_employees, подтверждая ее столбцы и типы данных:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int          | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| department | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Этот вывод подтверждает, что таблица temp_employees готова к использованию в вашей текущей сессии MySQL.

Вставка и запрос данных во временную таблицу

Теперь, когда вы создали таблицу temp_employees, вы можете работать с ней так же, как с обычной таблицей. На этом шаге вы вставите в нее данные, а затем выполните запрос к этим данным.

Вы все еще должны находиться в сессии MySQL из предыдущего шага, с видимым приглашением mysql>.

Давайте вставим несколько строк данных во временную таблицу temp_employees, используя оператор INSERT INTO. Выполняйте эти команды по одной:

INSERT INTO temp_employees (name, department) VALUES ('Alice Smith', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Bob Johnson', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Charlie Brown', 'IT');

Эти команды добавляют три записи о сотрудниках в вашу временную таблицу.

Чтобы просмотреть только что вставленные данные, используйте оператор SELECT. Звездочка (*) является подстановочным знаком, означающим "все столбцы".

SELECT * FROM temp_employees;

Эта команда извлекает все столбцы и строки из таблицы temp_employees. Вывод должен показать вставленные вами данные:

+----+---------------+------------+
| id | name          | department |
+----+---------------+------------+
|  1 | Alice Smith   | Sales      |
|  2 | Bob Johnson   | Marketing  |
|  3 | Charlie Brown | IT         |
+----+---------------+------------+
3 rows in set (0.00 sec)

Вы также можете фильтровать результаты с помощью предложения WHERE. Например, чтобы найти только сотрудников из отдела 'IT', выполните следующий запрос:

SELECT name FROM temp_employees WHERE department = 'IT';

Вывод покажет только имя сотрудника, соответствующего условию:

+---------------+
| name          |
+---------------+
| Charlie Brown |
+---------------+
1 row in set (0.00 sec)

Это демонстрирует, что стандартные операции манипулирования данными и запросов работают с временными таблицами ожидаемым образом.

Понимание области действия временной таблицы

Ключевой характеристикой временных таблиц является их сессионная область видимости. Это означает, что временная таблица, созданная в одной сессии MySQL, не видна и недоступна в другой, даже если обе сессии подключены к одной и той же базе данных. Этот шаг продемонстрирует такое поведение.

Оставьте вашу текущую сессию MySQL открытой в первом окне терминала.

Теперь откройте новое окно терминала. Вы можете сделать это, щелкнув правой кнопкой мыши по фону рабочего стола и выбрав "Открыть терминал здесь".

В этом новом терминале снова подключитесь к серверу MySQL. Это создаст вторую, независимую сессию.

sudo mysql -u root

После выполнения команды вы должны увидеть приглашение MySQL, которое выглядит как mysql>. Это означает, что вы успешно подключились к серверу MySQL и теперь можете выполнять SQL-команды.

Далее выберите базу данных test.

USE test;

Теперь у вас есть два отдельных терминала, каждый со своей сессией MySQL. В этой новой сессии попробуйте выполнить запрос к таблице temp_employees, которую вы создали в первой сессии:

SELECT * FROM temp_employees;

Вы получите сообщение об ошибке, потому что эта сессия не знает о временной таблице, созданной в другой сессии.

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

Эта ошибка подтверждает, что таблица temp_employees изолирована к сессии, в которой она была создана. Вы также можете попробовать описать таблицу, что приведет к той же ошибке.

DESCRIBE temp_employees;
ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

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

Теперь вы можете закрыть это новое окно терминала и вернуться к своему исходному терминалу.

Удаление временной таблицы и завершение сеанса

Временные таблицы автоматически удаляются при завершении сессии MySQL. Однако вы также можете явно удалить ее с помощью оператора DROP TEMPORARY TABLE. Это хорошая практика, если вы закончили работу с таблицей до завершения сессии, так как это освобождает ресурсы.

Вы должны вернуться в свое исходное окно терминала, где существует таблица temp_employees.

Чтобы явно удалить временную таблицу, используйте следующую команду в приглашении mysql>:

DROP TEMPORARY TABLE temp_employees;

После успешного удаления вы увидите сообщение Query OK. Чтобы убедиться, что таблица была удалена, попробуйте выполнить запрос к ней еще раз:

SELECT * FROM temp_employees;

Теперь вы должны получить ошибку "Table doesn't exist", подтверждающую, что таблица больше не доступна в этой сессии.

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

Наконец, чтобы завершить сессию MySQL, введите exit и нажмите Enter.

exit

Это закроет соединение с сервером MySQL и вернет вас к обычному приглашению терминала. Если бы вы не удалили временную таблицу явно, она была бы автоматически удалена в этот момент.

Резюме

В этой лабораторной работе вы изучили основы работы с временными таблицами в MySQL. Вы успешно подключились к серверу MySQL, создали временную таблицу с помощью CREATE TEMPORARY TABLE и заполнили ее данными с помощью INSERT INTO. Затем вы отработали получение этих данных с помощью запросов SELECT.

Важно, что вы исследовали сессионную область видимости временных таблиц, продемонстрировав, что они невидимы для других сессий. Наконец, вы узнали, как явно удалить временную таблицу с помощью DROP TEMPORARY TABLE, и поняли, что они автоматически очищаются при завершении сессии. Временные таблицы являются ценным инструментом для управления сессионными данными и промежуточными результатами в ваших рабочих процессах с базами данных.