2009-06-18 12 views
8

मुझे यह जांचने की आवश्यकता है कि एक SQL क्वेरी का उपयोग कर डेटाबेस पूरी तरह खाली है (कोई टेबल नहीं)। यह कैसे किया जा सकता है?एसक्यूएल यह जांचने के लिए कि क्या डेटाबेस खाली है (कोई टेबल नहीं)

सहायता के लिए धन्यवाद!

+1

मुमकिन है, क्या आपका मतलब है 'नहीं उपयोगकर्ता परिभाषित टेबल कैटलॉग या विचार 'सिस्टम कैटलॉग मौजूद होगा। –

उत्तर

10
SELECT COUNT(DISTINCT `table_name`) FROM `information_schema`.`columns` WHERE `table_schema` = 'your_db_name' 

आपके डीबी में तालिकाओं (या विचारों) की वास्तविक संख्या लौटाएगा। यदि वह संख्या 0 है, तो कोई टेबल नहीं है।

+0

इससे विचारों की संख्या भी वापस आ जाएगी। – longneck

+1

लेकिन यदि वह संख्या 0 से अधिक है? शायद कोई टेबल नहीं है, लेकिन विचार हैं? –

+0

@AlexKuznetsov हाँ, लेकिन मुझे विश्वास नहीं है कि आप इसे आधार के आधार पर बिना किसी टेबल के दृश्य देख सकते हैं? – MiffTheFox

12
select count(*) 
    from information_schema.tables 
where table_type = 'BASE TABLE' 
    and table_schema = 'your_database_name_here' 
+0

हम्म, मुझे लगता है कि इस एसक्यूएल में कुछ गड़बड़ है। मैं MySQL का उपयोग कर रहा हूं और इसमें डेटाबेस के साथ डेटाबेस प्राप्त कर रहा हूं। – EdanB

+1

आप सही हैं। इसके बजाय 'टेबल' होना चाहिए 'आधार तालिका'। – longneck

+0

यह मेरे लिए अच्छी तरह से काम: लेकिन मैं शायद ही पहले कैसे कॉल करने के लिए मैं परिणाम लिखा पाया = cmd.ExecuteNonQuery जो रिटर्न -1 तब के बाद मैं परिणाम नहीं मिला = int.Parse (। Cmd.ExecuteScalar() ToString()) ; यदि कोई तालिका नहीं है तो शून्य लौटाता है। –

0

"info_schema.tables से * चुनें" आपको अधिकांश डेटाबेस पर तालिकाओं की एक सूची देगा।

6

MySQL में:

use DATABASE; 
show tables; 
+0

या बस डेटाबास से टेबल दिखाएं; ' – dinvlad

1

आप SQL सर्वर 2005 या अधिक से अधिक है, तो आप प्रणाली दृश्यों में से एक का उपयोग कर सकते मौजूदा डाटाबेस के लिए इस हासिल करने के लिए उपयोग कर रहे हैं:

select Count(*) 
from sys.tables 
where [type] = 'U' 
1

SQLServer कार्यान्वयन:

USE database_name 
SELECT COUNT(*) from information_schema.tables 
WHERE table_type = 'base table' 
0

ओरेकल में: चयन गणना (*) user_tables

0

से मैं कुछ है कि मुझे बैश में उपयोग करने के लिए एक निकास कोड देना होगा की जरूरत है। यह @ लांगनेक के ठोस उत्तर से बना है। यदि डेटाबेस में टेबल हैं, तो select कथन contents कॉलम को "टेबल है" के रूप में सेट करेगा। इस मामले में Grep एक सफल 0 लौटाएगा, अन्यथा यह एक गैर-शून्य लौटाएगा।

#!/bin/bash 
user=username 
pw=passwd 
db=database 
mysql -u ${user} -p"${pw}" -D ${db} --execute="SELECT CASE COUNT(*) WHEN '0' THEN 'empty database' ELSE 'has tables' END AS contents FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema = '${db}';" | grep 'has tables' 
echo $? 
4

MySQL में तालिकाओं के बिना सभी डेटाबेस की एक सूची प्राप्त करने के लिए:

use information_schema 

select schema_name from `schemata` s 
    left join `tables` t on s.schema_name = t.table_schema 
    where t.table_name is null 
; 

चीयर्स, ईसाई

+0

यदि आप सभी खाली डेटाबेस प्राप्त करना चाहते हैं तो यह बिल्कुल सही तरीका है। धन्यवाद @ क्रिस्टियन! –

0

बैश में:

db_name='my_db' 
mysql -s --skip-column-names -e "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '$db_name'" 
संबंधित मुद्दे