显示数据库中未知数量的表的信息

时间:2012-12-27 12:07:43

标签: mysql database jdbc

我想问一下,是否可以使用单个查询从数据库中的多个表中显示列的名称,类型,大小等?问题是表格永远不会相同,所以我不能只是对它们进行硬编码。我需要选择整个数据库。例如:

SELECT d1.*, d2.* FROM database1.table1 d1, database2.table1 d2

如您所见,我这里有两个数据库。通过上面的查询,我实现了从两个数据库中打印出有关table1的信息。但是,我正在寻找一种动态的方法来同时打印出数据库中的所有表。我说的数据库和表格并不总是一样的。这可能吗?

寻找类似的输出:

`

 |dbname|tname|fname|typename|size|isPk|isFk| 
 |------------------------------------------| 
 | db1  |tbl1 |u_id |VARCHAR | 4  |YES | NO |

`等等。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要的所有信息都通过MySQL's information_schema views公开。 几乎所有这些都在“information_schema.columns”表中。

select table_schema, table_name, column_name, 
       data_type, character_maximum_length, column_key
from information_schema.columns
where table_schema in ( 'db-1-name', 'db-2-name')
order by table_schema, table_name, ordinal_position

列“character_maximum_length”仅适用于可变长度列,但扩展查询以显示整数,大整数,日期等长度应该相当容易。

有关外键约束的信息位于“information_schema.key_column_usage”中。您只需要将其加入“information_schema.columns”。

select c.table_schema, c.table_name, c.column_name, 
       c.data_type, c.character_maximum_length, c.column_key,
       k.referenced_table_name
from information_schema.columns c
left join information_schema.key_column_usage k
       on c.table_catalog = k.table_catalog 
      and c.table_schema = k.table_schema
      and c.table_name = k.table_name
      and c.column_name = k.column_name
      and k.referenced_table_name is not null
where c.table_schema in ( 'db-1-name', 'db-2-name')
order by c.table_schema, c.table_name, c.ordinal_position

答案 1 :(得分:0)

要选择数据库信息,您可以查看

的输出
SELECT * 
FROM information_schema.columns
WHERE table_schema in ('database1', 'database2')
AND table_name in ('table1', 'table2')