查询以计数我在MySQL中拥有的表数


129

我正在增加表的数量,有时我很好奇,只是想做一个快速的命令行查询来计算数据库中表的数量。那可能吗?如果是这样,查询是什么?

Answers:


296
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName';

资源

这是我的:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

我尝试了上述2种方法,使用时返回FOUND_ROWS()的表数大于使用第一种方法时返回的表数。
阿姆鲁

如果您只想要表,这也算视图,添加AND table_type = 'BASE TABLE'
Thomasleveil 19/12/30

只是有关use databasename;命令的注释。如果数据库确实很大,该命令将需要很长的等待时间才能执行。在这种情况下,应使用选项-A(即:)完成登录mysql -uroot -p -A,该命令将快速运行。
天青石

24

如果您想计算所有数据库以及摘要,请尝试以下操作:

SELECT IFNULL(table_schema,'Total') "Database",TableCount 
FROM (SELECT COUNT(1) TableCount,table_schema 
      FROM information_schema.tables 
      WHERE table_schema NOT IN ('information_schema','mysql') 
      GROUP BY table_schema WITH ROLLUP) A;

这是一个示例运行:

mysql> SELECT IFNULL(table_schema,'Total') "Database",TableCount
    -> FROM (SELECT COUNT(1) TableCount,table_schema
    ->       FROM information_schema.tables
    ->       WHERE table_schema NOT IN ('information_schema','mysql')
    ->       GROUP BY table_schema WITH ROLLUP) A;
+--------------------+------------+
| Database           | TableCount |
+--------------------+------------+
| performance_schema |         17 |
| Total              |         17 |
+--------------------+------------+
2 rows in set (0.29 sec)

试试看 !!!


1
仅在仅使用子查询时,它才起作用。如果我尝试运行整个查询/子查询,则会出现语法错误。
盖亚

2
@Gaia对不起,我忘记了Database是保留字。因此,我用双引号将单词括起来。
RolandoMySQLDBA

@RolandoMySQLDBA这很不错,您是否还可以显示所有数据库的总数据库大小?
J. Scott Elblein

@ J.ScottElblein试试我DBA.SE后:dba.stackexchange.com/questions/31801/...
RolandoMySQLDBA

为什么在FROM子句中使用子查询?为什么不只是SELECT IFNULL(table_schema, 'Total') Database, COUNT(*) TableCount FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') GROUP BY table_schema WITH ROLLUP呢?
eggyal 2015年

10
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbo' and TABLE_TYPE='BASE TABLE'

1
这应该是答案,因为它不包含视图!+1
Testo Testini


3

要计算表数,只需执行以下操作:

USE your_db_name;    -- set database
SHOW TABLES;         -- tables lists
SELECT FOUND_ROWS(); -- number of tables

有时简单的事情会起作用。


这正是5年前添加的公认答案中的内容。

好的和独特的答案,这是非常容易的命令。完美
Ajay2707

3
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'database_name';

对于那些熟悉此查询的人来说,这是不言而喻的,但是对于不熟悉此查询的人,对此答案进行一些解释将是一个很好的伴奏。
mickmackusa

这似乎只是现有答案的重复。

作为记录:请记住,总元素包括表和视图作为数据库对象。
marcode_ely19年

1

计数数据库表的方法可能有多种。我最喜欢的是:

SELECT
    COUNT(*)
FROM
    `information_schema`.`tables`
WHERE
    `table_schema` = 'my_database_name'
;

1
select name, count(*) from DBS, TBLS 
where DBS.DB_ID = TBLS.DB_ID 
group by NAME into outfile '/tmp/QueryOut1.csv' 
fields terminated by ',' lines terminated by '\n';

这不能回答问题。
迈克,

1

从命令行:

mysql -uroot -proot  -e "select count(*) from 
information_schema.tables where table_schema = 'database_name';"

在上面的示例中,root是username和password,托管在localhost上。


0
SELECT COUNT(*) FROM information_schema.tables

这适用于数据库中的所有表吗?


-1

希望这会有所帮助,并且仅返回数据库中的表数

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tables中不存在mysql
Grisha Weintraub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.