列出数据库中的所有表格

6
有没有一条SQL命令可以列出数据库中的所有表,并且不依赖于特定的提供商(适用于MSSQLServer、Oracle、MySQL)?
4个回答

20

最接近的选项是查询 INFORMATION_SCHEMA 表。

SELECT *
FROM INFORMATION_SCHEMA.Tables
WHERE table_schema = 'mydatabase';

INFORMATION_SCHEMA是标准SQL的一部分,但并非所有厂商都支持它。据我所知,仅有以下关系型数据库管理系统提供了支持:

有些数据库品牌(例如Oracle、IBM DB2、Firebird和Derby等)拥有类似的“目录”视图,可提供一个接口,您可以查询系统上的元数据。但这些视图的名称、包含的列以及它们之间的关系与ANSI SQL标准中的INFORMATION_SCHEMA不匹配。换句话说,类似的信息是可用的,但您需要使用不同的查询来获取这些信息。

(注:IBM DB2 UDB for System i中的目录视图与IBM DB2 UDB for Windows /* NIX中的目录视图不同,这就是UDB中“通用”的含义!)

其他一些品牌(例如SQLite)根本不提供任何可查询的元数据接口。


我正要回答并说“不,绝对不是”。你的回答救了我。今天我学到了新东西 :) - wcm
我在支持INFORMATION_SCHEMA的各自RDBMS品牌中添加了文档链接。 - Bill Karwin

6
不行。他们都喜欢用自己的方式做事。

1

不,SQL标准并不限制表名的列出位置(如果有的话),因此您需要根据您所处理的SQL引擎执行不同的语句(通常是在特定命名的表上执行SELECT语句)。


1
正如Bill Karwin所指出的那样,INFORMATION_SCHEMA是SQL-92标准的一部分。一些供应商可能不支持它,但它是标准的一部分。 - Tom H

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接