0

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

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 |

`等

提前致谢。

4

2 回答 2

1

您需要的所有信息都通过MySQL 的 information_schema 视图公开。几乎所有这些都在“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
于 2012-12-27T16:20:28.327 回答
0

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

SELECT * 
FROM information_schema.columns
WHERE table_schema in ('database1', 'database2')
AND table_name in ('table1', 'table2')
于 2012-12-27T12:10:42.680 回答