MySQL'de sahip olduğum tabloların sayısını saymak için sorgu


130

Sahip olduğum tabloların sayısını artırıyorum ve bazen veritabanımdaki tabloların sayısını saymak için hızlı bir komut satırı sorgusu yapmayı merak ediyorum. Mümkün mü? Eğer öyleyse, sorgu nedir?

Yanıtlar:


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

Kaynak

Bu benim:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

Yukarıdaki 2 yöntemi denedim ve kullandığım FOUND_ROWS()zaman dönen tabloların sayısı, ilk yöntemi kullandığımda dönen tablo sayısından daha fazlaydı.
Amr

bu aynı zamanda görüntülemeleri de sayar, sadece tablo istiyorsanız ekleyinAND table_type = 'BASE TABLE'
Thomasleveil

Komutla ilgili bir not use databasename;. Veritabanı gerçekten büyükse, komut uzun bir bekleme süresiyle çalışabilir. Bu durumda, -A seçeneği ile oturum açılmalıdır, yani: mysql -uroot -p -Ave komut hızlı çalışacaktır.
gök mavisi

24

Tüm veritabanlarının bir sayımını ve bir özetini isterseniz, lütfen şunu deneyin:

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;

İşte bir örnek çalışma:

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)

Bir şans ver !!!


1
Yalnızca alt sorguyu kullandığım zaman çalıştırdım. Tüm sorguyu / alt sorguyu çalıştırmaya çalışırsam bir sözdizimi hatası oluştu.
Gaia

2
@Gaia Üzgünüm, Veritabanının rezerve edilmiş bir kelime olduğunu unuttum. Bu yüzden kelimeyi Çift Tırnak ile çevreledim.
RolandoMySQLDBA

@RolandoMySQLDBA Bu çok tatlı, tüm db'lerin toplam db boyutunu da gösterecek bir tane var mı?
J. Scott Elblein

J.ScottElblein @ benim DBA.SE yazı deneyin: dba.stackexchange.com/questions/31801/...
RolandoMySQLDBA

Maddedeki alt sorgu neden FROM? Neden sadece değil 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

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

1
Görüşleri içermediği için cevap bu olmalıdır! +1
Testo Testini

4

Bu size mysql'deki tüm veritabanlarının adlarını ve tablo sayısını verecektir.

SELECT TABLE_SCHEMA,COUNT(*) FROM information_schema.tables group by TABLE_SCHEMA;

3

Tablo sayısını saymak için şunu yapın:

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

Bazen işi kolay şeyler yapar.


5 yıl önce eklenen kabul edilen cevapta tam olarak budur.

iyi ve benzersiz cevap ve şey çok kolay komut. perfect
Ajay2707

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

Bu, bu sorguya aşina olanlar için oldukça açıklayıcıdır, ancak olmayanlar için, biraz açıklama bu yanıta büyük bir eşlik edecektir.
mickmackusa

Bu, mevcut cevabın sadece bir tekrarı gibi görünüyor .
Pang

Kayıt için: Toplam elementosun Veritabanı nesneleri olarak Tablolar ve Görünümler içerdiğini unutmayın.
marcode_ely

1

Bir veritabanının tablolarını saymanın birden çok yolu olabilir. Benim favorim şu:

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';

Bu soruya cevap vermiyor.
Mike

1

komut satırından:

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

Yukarıdaki örnekte, root localhost'ta barındırılan kullanıcı adı ve paroladır.


0
SELECT COUNT(*) FROM information_schema.tables

bu DB'lerdeki tüm tablolar için mi?


-1

Umarım bu yardımcı olur ve bir veritabanında yalnızca birkaç tablo döndürür

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tablesiçinde mevcut değilmysql
Grisha Weintraub
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.