请给我解释一下下面的例子
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条答案
按热度按时间uemypmqf1#
这种模式是基于特定表中列的名称创建动态(用mysql术语编写)查询。
INFORMATION_SCHEMA
是一个内置的数据库,其中的只读表描述mysql服务器上所有数据库中的所有表。序列中的第一个查询检索局部变量中的文本字符串
@COLUMNS
具有如下值对于名为
table_name
用那四列。第三个检索局部变量中的字符串
@s
一个包含如下查询的值第四个,
PREPARE
,准备好了吗EXECUTE stmt
,它运行查询。你可以阅读PREPARE
以及EXECUTE
在这里。在你的问题中,整个查询序列的作用几乎与
SELECT * FROM table_name
.您的第一个查询中有一个缺陷。你应该加上
AND TABLE_SCHEMA = DATABASE()
到它的WHERE
条款。否则,可以从名为table_name
在多个数据库中。