Пожалуйста, объясните эти операторы SQL - PullRequest
0 голосов
/ 05 июля 2018

Пожалуйста, объясните мне приведенный ниже пример

SELECT GROUP_CONCAT(COLUMN_NAME)
FROM information_schema.`COLUMNS` C 
WHERE table_name = 'table_name'
  AND COLUMN_NAME =('columns_name') INTO @COLUMNS;

SET @table = 'table_name';

SET @s = CONCAT('SELECT ',@columns,' FROM ', @table);

PREPARE stmt FROM @s;

1 Ответ

0 голосов
/ 05 июля 2018

Этот шаблон предназначен для создания динамических ( подготовленных на языке MySQL) запросов на основе имен столбцов в конкретной таблице. INFORMATION_SCHEMA - это встроенная база данных с таблицами только для чтения, описывающими все таблицы во всех базах данных на сервере MySQL.

Первый запрос в вашей последовательности извлекает текстовую строку в локальной переменной @COLUMNS со значением типа

      id,name,value,description

для таблицы с именем table_name с этими четырьмя столбцами.

Третий возвращает строку в локальной переменной @s со значением, содержащим запрос, подобный

      SELECT id,name,value,description FROM table_name

Четвертый, PREPARE, готов к выполнению EXECUTE stmt, который выполняет запрос. Вы можете прочитать о PREPARE и EXECUTE здесь .

Вся последовательность запросов в вашем вопросе делает почти то же самое, что и SELECT * FROM table_name.

В вашем первом запросе есть дефект. Вы должны добавить AND TABLE_SCHEMA = DATABASE() к предложению WHERE. В противном случае вы можете выбрать столбцы из таблиц с именем table_name в нескольких базах данных.

...