请解释这些SQL语句

时间:2018-07-05 10:16:43

标签: mysql prepared-statement dynamic-sql information-schema

请向我解释以下示例

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 :(得分:1)

此模式是关于基于特定表中的列名称创建动态(在MySQL看来是 prepared )查询。 [EnableCors("AllowIdentityServer")] 是一个内置数据库,其中包含只读表,这些表描述了MySQL服务器上所有数据库中的所有表。

序列中的第一个查询将检索局部变量INFORMATION_SCHEMA中的文本字符串,其值类似于

@COLUMNS

对于具有这四列的名为 id,name,value,description 的表。

第三个查询在局部变量table_name中检索一个字符串,该字符串的值包含查询之类的

@s

第四个 SELECT id,name,value,description FROM table_name 准备执行PREPARE,运行查询。 You can read about PREPARE and EXECUTE here

问题中的整个查询序列几乎与EXECUTE stmt一样。

您的第一个查询存在缺陷。您应在其SELECT * FROM table_name子句中添加AND TABLE_SCHEMA = DATABASE()。否则,您可以从多个数据库中名为WHERE的表中拾取列。