我想问一下,是否可以使用单个查询从数据库中的多个表中显示列的名称,类型,大小等?问题是表格永远不会相同,所以我不能只是对它们进行硬编码。我需要选择整个数据库。例如:
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 |
`等等。
提前致谢。
答案 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')