Оглавление

13. Временные таблицы

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

 

В качестве примера создадим таблицу user_table в базе данных tests.
CREATE TABLE `user_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

 
В поле name мы будем хранить фамилию и имя пользователя. Добавим в таблицу несколько записей:
INSERT INTO `user_table` VALUES (NULL, 'Иванов Сергей');
INSERT INTO `user_table` VALUES (NULL, 'Иванов Николай');
INSERT INTO `user_table` VALUES (NULL, 'Иванов Иван');
INSERT INTO `user_table` VALUES (NULL, 'Петров Александр');
INSERT INTO `user_table` VALUES (NULL, 'Петров Николай');
INSERT INTO `user_table` VALUES (NULL, 'Иванов Максим');

 
А теперь инсценируем ситуацию поиска в найденном с помощью временных таблиц. Предположим, что первоначальный запрос пользователя выводит клиентов с фамилией Иванов:
SELECT `id`, `name` FROM `user_table` WHERE `name` LIKE '%Иванов%';

 
Сохраним результат запроса во временной таблице, а затем выведем клиентов только с именем Николай:
CREATE TEMPORARY TABLE `temp`
SELECT `id`, `name` FROM `user_table` WHERE `name` LIKE '%Иванов%';
SELECT `name` FROM `temp` WHERE `name` LIKE '%Николай%';
/* Выведет: Иванов Николай */

 
Обратите внимание: при использовании вложенных запросов не нужно определять структуру временной таблицы. По умолчанию структура временной таблицы будет такой же, как и в результирующей таблице. Посмотреть структуру временной таблицы можно с помощью оператора DESCRIBE:
CREATE TEMPORARY TABLE `temp2`
SELECT `id`, `name` FROM `user_table` WHERE `name` LIKE '%Иванов%';
DESCRIBE `temp2`;

 
Удалить временную таблицу можно следующими способами:
□ с помощью оператора DROP TABLE:
DROP TABLE <Имя временной таблицы>;
□ по завершении соединения с сервером временная таблица будет удалена автоматически.

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити