แบบสอบถามเพื่อนับจำนวนตารางที่ฉันมีใน MySQL


130

ฉันมีจำนวนตารางเพิ่มขึ้นและบางครั้งฉันก็อยากรู้อยากเห็นเพียงแค่ทำแบบสอบถามบรรทัดคำสั่งอย่างรวดเร็วเพื่อนับจำนวนตารางในฐานข้อมูลของฉัน เป็นไปได้หรือไม่ ถ้าเป็นเช่นนั้นแบบสอบถามคืออะไร?

คำตอบ:


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

แหล่ง

นี่เป็นของฉัน:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

ฉันได้ลอง 2 วิธีข้างต้นแล้วจำนวนตารางที่ส่งคืนเมื่อฉันใช้FOUND_ROWS()มากกว่าจำนวนตารางที่ส่งคืนเมื่อฉันใช้วิธีแรก
Amr

นอกจากนี้ยังนับจำนวนการดูหากคุณต้องการเฉพาะตารางให้เพิ่มAND table_type = 'BASE TABLE'
Thomasleveil

เพียงหมายเหตุเกี่ยวกับuse databasename;คำสั่ง หากฐานข้อมูลมีขนาดใหญ่มากคำสั่งสามารถดำเนินการโดยใช้เวลารอนาน ในกรณีนี้ควรทำการล็อกอินด้วยอ็อพชัน -A คือ: mysql -uroot -p -Aและคำสั่งจะทำงานได้อย่างรวดเร็ว
azurecorn

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
ฉันทำให้มันใช้งานได้เมื่อฉันใช้เฉพาะแบบสอบถามย่อยเท่านั้น มีข้อผิดพลาดทางไวยากรณ์ถ้าฉันพยายามเรียกใช้แบบสอบถาม / แบบสอบถามย่อยทั้งหมด
Gaia

2
@ Gaia ขออภัยฉันลืมว่าฐานข้อมูลเป็นคำสงวน ดังนั้นฉันจึงล้อมรอบด้วยคำพูดคู่
RolandoMySQLDBA

@RolandoMySQLDBA นี่มันหวานคุณมีอันไหนที่จะแสดงขนาดฐานข้อมูลทั้งหมดของ db ทั้งหมดด้วย?
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

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

1
นี่ควรเป็นคำตอบเนื่องจากไม่รวมยอดวิว! +1
Testo Testini

4

สิ่งนี้จะให้ชื่อและจำนวนตารางของฐานข้อมูลทั้งหมดใน mysql ของคุณ

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

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_ely

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

สิ่งนี้ไม่ตอบคำถาม
Mike

1

จากบรรทัดคำสั่ง:

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

ในตัวอย่างข้างต้นรูทคือชื่อผู้ใช้และรหัสผ่านโฮสต์บน localhost




-1

หวังว่านี่จะช่วยได้และส่งคืนเฉพาะจำนวนตารางในฐานข้อมูล

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tablesไม่มีอยู่ในmysql
Grisha Weintraub
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.