请向我解释以下示例
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;
答案 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
的表中拾取列。