2009-06-18 50 views
8

我需要使用SQL查詢來檢查數據庫是否全空(無表)。如何才能做到這一點?用於檢查數據庫是否爲空的SQL(無表)

感謝您的幫助!

+1

據推測,你的意思是「沒有用戶定義表或視圖「,因爲系統目錄將存在。 – 2009-06-18 14:37:03

回答

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

將返回數據庫中實際的表(或視圖)數量。如果這個數字是0,那麼沒有表格。

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

嗯,我認爲這個SQL有什麼問題。我正在使用MySQL,並在其中有表的數據庫上獲得0。 – EdanB 2009-06-18 14:23:06

+1

你是對的。 'TABLE'應該是'BASE TABLE'。 – longneck 2009-06-18 14:31:42

+0

它的工作很適合我: 但我幾乎沒有發現如何調用 首先我寫的結果= cmd.ExecuteNonQuery返回-1 後來我一發現 結果= int.Parse(cmd.ExecuteScalar()的ToString()) ; 如果沒有表,則返回零。 – 2017-08-03 00:43:33

0

「select * from information_schema.tables」會給你一個大多數數據庫表的列表。

6

在MYSQL:

use DATABASE; 
show tables; 
+0

或者只是`從DATABASE顯示錶格;` – dinvlad 2015-11-14 05:08:30

1

如果你使用SQL Server 2005或更高版本,可以使用的系統視圖,以達致這爲當前DB:

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

在Oracle: SELECT COUNT(*)FROM USER_TABLES

0

我需要的東西,這將使我的退出代碼在Bash使用。這構建了@ longneck堅實的答案。如果數據庫中有表格,則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

在bash:

db_name='my_db' 
mysql -s --skip-column-names -e "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '$db_name'"