Использование переменных в запросах MySQL

Задача:

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

Реализация:

Для сохранения одиночного простого значения подходят локальные переменные.

  • Явное объявление:
SET @type = "local";
SET @typesCount =5;
SET @groupName = ( SELECT "terminator" );
  • Объявление через запрос:
SELECT @queryVar:=10;

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

  • создание временной таблицы:
CREATE TEMPORARY TABLE groups(	groupID INT(11) UNSIGNED,
				KEY `keyGroupID` (`groupID`) );

  • вставка данных:
INSERT INTO groups( groupID )
SELECT ... FROM ... WHERE ...;
Применение
  • улучшение читаемости и быстродействия запросов, обновляющих данные в миграциях
  • Для исключения ошибки: #1093, возникающий при попутке изменения данных в таблице, полученных из той же таблице в подзапросе:
UPDATE table ... WHERE data = (SELECT ... FROM table ...)