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

标签 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 |

`等等

提前致谢。

最佳答案

您需要的所有信息都通过 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

关于mysql - 显示数据库中未知数量的表的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054450/

相关文章:

PHP MySQL Yii - 数据库读取不写入

php - 使用 Active Record 和 GroceryCrud 在 CodeIgniter 中加入表

database - 我如何才能学会对数据库性能做出现实的假设?

mysql - 使用Scala JDBC进行大数据上传

java - Apache Commons DBCP 连接对象问题,线程 : ClassCastException in org. apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper

mysql - 故意在没有连接条件的情况下合并 3 个或更多表

mysql - 需要帮助优化 MySQL 查询

mysql - 如何将十六进制格式的值从 csv 文件导入到我的 postgresql 表中?

python - 在使用 UUID 字段作为主字段的 Django 模型中添加非主键自动字段或 'serial' 字段

java - makefile 中的 JDBC