从“中选择数据”;“显示表格”;MySQL查询

从“中选择数据”;“显示表格”;MySQL查询,mysql,sql,metadata,Mysql,Sql,Metadata,是否可以在MySQL中从show tables中进行选择 SELECT * FROM (SHOW TABLES) AS `my_tables` 尽管上述方法不起作用(至少在5.0.51a上是这样)。您是否研究过查询信息\u SCHEMA.Tables?如 SELECT ic.Table_Name, ic.Column_Name, ic.data_Type, IFNULL(Character_Maximum_Length,'') AS `Max`, ic.Nume

是否可以在MySQL中从
show tables
中进行选择

SELECT * FROM (SHOW TABLES) AS `my_tables`

尽管上述方法不起作用(至少在5.0.51a上是这样)。

您是否研究过查询信息\u SCHEMA.Tables?如

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;

我想您需要
SELECT*FROM INFORMATION\u SCHEMA.TABLES


请参见

我认为您需要的是MySQL的信息模式视图:


这应该是一个好的开始。有关更多信息,请查看。

我不明白您为什么要在语句中使用
SELECT*FROM


据我所知,除非您像其他人提到的那样从
信息\u模式中选择

但是,
SHOW
命令非常灵活, 例如:


这将返回以下注释:myTable.myColumnName

是的,从表中选择模式对于系统管理非常有用。如果你有很多服务器、数据库、表。。。有时您需要删除或更新一堆元素。例如,要创建查询以删除前缀名为“wp\u old\u…”的所有表,请执行以下操作:


在MySql 5.1中,您可以尝试

show tables like 'user%';
输出:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)

不能像示例中那样将
SHOW
语句放入子查询中。子查询中唯一可以使用的语句是
SELECT

正如其他答案所述,您可以使用
SELECT
直接查询信息模式,从而获得更大的灵活性

MySQL的
SHOW
语句在内部只是针对信息模式表的查询

User@physicalattraction在大多数其他答案上发表了此评论:

这将为您提供有关表格的(元)信息,而不是OP预期的表格内容物理牵引

相反,OP的问题并不是说他们想要选择所有表中的数据。他们说他们想从SHOW TABLES的结果中进行选择,SHOW TABLES只是一个表名列表

如果OP确实希望从所有表中选择所有数据,那么答案是否,您不能通过一个查询来完成。每个查询必须显式地命名其表。不能将表名设为变量或同一查询的另一部分的结果。此外,给定查询结果的所有行必须具有相同的列


因此,从所有表中选择所有数据的唯一方法是运行
SHOW tables
,然后对该结果中命名的每个表运行另一个查询。

您可能比您想象的更接近-其行为与select语句非常相似。下面是一个如何获取其“行”的示例:

$pdo=newpdo(“mysql:host=$host;dbname=$dbname”,$user,$pass);
foreach($pdo->查询(“显示表”)为$row){
打印“表$row[表\u在\u$dbname中]\n”;
}
“显示表”的行为类似于单列表上的“选择”。该列名是中的表加上数据库名。

要计数:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
列出:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;

您可以创建一个存储过程并将表名放在光标中,然后循环表名以显示数据

存储过程入门:

创建光标:

比如说,

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END
然后调用存储过程:

CALL ShowFromTables();

这为您提供了有关表的(元)信息,而不是OP预期的表内容。这为Windows上的小写表名称提供了信息,
SHOW tables
为您提供了指定的大小写。这为您提供了有关表的(元)信息,而不是OP预期的表内容。这为您提供了(元)有关表格的信息,而不是OP预期的表格内容。这将为您提供有关表格的(元)信息,而不是OP预期的表格内容。这将为您提供有关表格的(元)信息,而不是OP预期的表格内容。这将为您提供有关表格的(元)信息,不是OP预期的表的内容。OP希望从SHOW Tables返回的表中提取数据,而不包含表本身的信息。这将为您提供有关表的(元)信息,而不是OP预期的表的内容。这将为您提供有关表的(元)信息,而不是表的内容,正如OP计划的那样。
SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END
CALL ShowFromTables();