SQL для проверки, если база данных пуста (нет таблиц) - PullRequest
8 голосов
/ 18 июня 2009

Мне нужно проверить, является ли база данных полностью пустой (без таблиц), используя SQL-запрос. Как это можно сделать?

Спасибо за помощь!

Ответы [ 10 ]

14 голосов
/ 18 июня 2009
select count(*)
  from information_schema.tables
 where table_type = 'BASE TABLE'
   and table_schema = 'your_database_name_here'
12 голосов
/ 18 июня 2009
SELECT COUNT(DISTINCT `table_name`) FROM `information_schema`.`columns` WHERE `table_schema` = 'your_db_name'

вернет фактическое количество таблиц (или просмотров) в вашей БД. Если это число равно 0, то нет таблиц.

6 голосов
/ 18 июня 2009

В MYSQL:

use DATABASE;
show tables;
4 голосов
/ 03 сентября 2013

Чтобы получить список всех баз данных без таблиц в 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
;

Ура, христианин

1 голос
/ 18 июня 2009

Реализация SQLServer:

USE database_name
SELECT COUNT(*) from information_schema.tables 
WHERE table_type = 'base table' 
1 голос
/ 18 июня 2009

Если вы используете SQL Server 2005 или более позднюю версию, вы можете использовать одно из системных представлений, чтобы получить это для текущей базы данных:

select Count(*)
from sys.tables
where [type] = 'U'
0 голосов
/ 10 августа 2016

В Баш:

db_name='my_db'
mysql -s --skip-column-names -e "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '$db_name'"
0 голосов
/ 09 февраля 2012

Мне нужно было что-то, что дало бы мне код выхода для использования в 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 $?
0 голосов
/ 18 июня 2009

в Oracle: выберите Count (*) из user_tables

0 голосов
/ 18 июня 2009

"select * from information_schema.tables" предоставит вам список таблиц в большинстве баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...