Давайте рассмотрим, как работают временные таблицы в MariaDB. Сначала нам нужно подключиться к серверу. Например (используйте свои собственные данные подключения):
mariadb -h 127.0.0.1 -u root -p"RootPassword!" --database demo
Теперь, чтобы отметить кое-что, давайте создадим стандартную (постоянную) таблицу. Вот как:
CREATE TABLE t ( c INT );
Эта таблица t
сохранится в базе данных даже после выхода из клиента:
exit
Когда мы переподключаемся и проверяем существующие таблицы с помощью SHOW TABLES;
, таблица t
по-прежнему будет указана:
mariadb -h 127.0.0.1 -u root -p"RootPassword!" --database demo
SHOW TABLES;
+----------------+ | Tables_in_demo | +----------------+ | t | +----------------+
Все это довольно очевидно, но теперь давайте воссоздадим эту таблицу и попробуем что-то другое:
CREATE OR REPLACE TEMPORARY TABLE t ( c INT );
Обратите внимание на ключевое слово TEMPORARY
. Если после создания этой таблицы мы запустим SHOW TABLES;
, он появится в списке. Мы можем вставлять в него данные, запрашивать их и объединять с другими таблицами. Во время текущего сеанса он ведет себя как обычная таблица. Однако, если мы выйдем из клиента, подключимся снова и выполним SHOW TABLES;
опять же, временная таблица t
не будет указана.
Временная таблица существует только на протяжении сеанса, в котором она была создана, и другие сеансы не смогут ее увидеть.
Временные таблицы весьма полезны для временных операций с данными. Например, рассмотрим таблицу « products
в нашей базе данных:
CREATE TABLE products ( id INT NOT NULL AUTO_INCREMENT, code VARCHAR(100) NOT NULL, name VARCHAR(250) NOT NULL, description TEXT DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY code (code) )
Мы можем создать временную таблицу, имитирующую структуру products
:
CREATE TEMPORARY TABLE t LIKE products;
Мы можем подтвердить это, выполнив:
DESCRIBE t;
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | code | varchar(100) | NO | UNI | NULL | | | name | varchar(250) | NO | | NULL | | | description | text | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+
Первоначально t
будет пустым. Однако предположим, что мы хотим перенести некоторые данные из products
в t
. Предположим, мы хотим включить в код только те продукты, которые содержат цифру 0:
INSERT INTO t SELECT * FROM products WHERE code LIKE '%0%';
Если после запуска этой команды мы запросим временную таблицу t
:
SELECT * FROM t;
+----+--------+------------------+---------------------------------------------------+ | id | code | name | description | +----+--------+------------------+---------------------------------------------------+ | 1 | BG2024 | BugBlaster | Eradicates software bugs with a single scan. | | 3 | FW001 | FireWhale | An oversized, comprehensive firewall solution. | | 4 | CLD404 | CloudNine Finder | Find your way back from cloud outages and errors. | +----+--------+------------------+---------------------------------------------------+
Мы видим отфильтрованные данные.
Временные таблицы предлагают мощный способ обработки данных для временной обработки, не затрагивая постоянное хранилище данных. Они особенно полезны в сценариях, где данными необходимо временно манипулировать или преобразовывать. Вы можете использовать постоянные таблицы для такого рода манипуляций с данными, но временные таблицы полезны, когда вам нужна автоматическая очистка, снижение риска конфликтов имен, изоляция и безопасность, а также управление ресурсами для производительности запросов.