从“显示表”中select数据MySQL查询

是否有可能从MySQL中的show tables中select?

 SELECT * FROM (SHOW TABLES) AS `my_tables` 

一些沿着这些线,虽然上述不起作用(在5.0.51a,至less)。

我想你想要SELECT * FROM INFORMATION_SCHEMA.TABLES

请参阅http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

不是我所知道的,除非你从INFORMATION_SCHEMAselect,正如其他人所提到的那样。

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

 SHOW tables like '%s%' 

数数:

 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; 

你有没有看过查询INFORMATION_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; 

我想你想要的是MySQL的information_schema视图(S): http : //dev.mysql.com/doc/refman/5.0/en/tables-table.html

 SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName' 

这将返回关于:myTable.myColumnName的评论

你可能比你想象的更近 – SHOW TABLES已经很像SELECT:

 $pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass); foreach ($pdo->query("SHOW TABLES") as $row) { print "Table $row[Tables_in_$dbname]\n"; } 

你不能像在你的例子中那样把SHOW语句放在子查询中。 唯一可以进入子查询的SELECTSELECT

正如其他答案所述,您可以使用SELECT直接查询INFORMATION_SCHEMA,并以这种方式获得更多的灵活性。

MySQL的SHOW语句在内部只是针对INFORMATION_SCHEMA表的查询。

用户@physicalattraction发表了这个评论大多数其他答案:

这给你(元)关于表的信息,而不是表的内容,因为OP的意图。 – 物理引导

相反,OP的问题并不是说要在所有的表格中select数据。 他们说他们想从SHOW TABLES的结果中select,这只是表名列表。

如果OP想从所有表中select所有的数据,那么答案是否定的,你不能用一个查询来完成。 每个查询必须明确地命名其表。 您不能将表名称作为variables或同一查询的另一部分的结果。 另外,给定查询结果的所有行都必须具有相同的列。

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

 SELECT * FROM INFORMATION_SCHEMA.TABLES 

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

是的,table_schema中的SELECT可能对于系统pipe理非常有用。 如果你有很多的服务器,数据库,表…有时你需要删除或更新一堆的元素。 例如,为DROP创build查询,所有表的前缀名称为“wp_old _…”:

 SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '*name_of_your_database*' AND table_name LIKE 'wp_old_%'; 

我不明白你为什么要使用SELECT * FROM作为语句的一部分。

12.5.5.30。 SHOW TABLES语法

在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) 

您可以创build一个存储过程并将表名放在一个游标中,然后遍历您的表名来显示数据。

存储过程入门: http : //www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

创build一个游标: http : //www.mysqltutorial.org/mysql-cursor/

例如,

 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();