Mysql 请解释这些SQL语句
请给我解释一下下面的例子Mysql 请解释这些SQL语句,mysql,prepared-statement,dynamic-sql,information-schema,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);
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;
这个模式是基于特定表中列的名称创建动态(用MySQL术语编写)查询
INFORMATION\u SCHEMA
是一个内置数据库,其中的只读表描述MySQL服务器上所有数据库中的所有表
序列中的第一个查询检索局部变量@COLUMNS
中的文本字符串,其值如下
id,name,value,description
对于名为table\u name
且包含这四列的表
第三个函数检索局部变量@s
中的字符串,其值包含如下查询
SELECT id,name,value,description FROM table_name
第四个,即PREPARE
,准备执行运行查询的executestmt
您的问题中的整个查询序列的作用几乎与SELECT*FROM table\u name
完全相同
您的第一个查询中有一个缺陷。您应该将
和TABLE_SCHEMA=DATABASE()
添加到其WHERE
子句中。否则,您可以从多个数据库中名为table\u name
的表中选择列。“请解释我下面的内容”您的问题很广泛,您能澄清您想要什么吗?您是否阅读了手册中不理解的每一条语句?请澄清到底是什么让你困惑。问题中的上述陈述意味着,只需选择给定表的所有列,即可使用给定表中的所有列生成动态sql我还有一个问题。。我有一个有5列的源表。我需要为源代码创建映射表。当我们试图在mappng表的帮助下将源数据插入到另一个表中时,我们需要编写一个动态查询来将数据插入到另一个表中。有时,源表中的列增加到7。我们只需在映射表中进行更改,而不必在sql查询中进行更改。。查询应该动态地从源表中选取数据并将其加载到目标表。