Задача
Вы хотите знать, существует ли таблица.
Решение
Используйте предложение SHOW TABLES, чтобы посмотреть, присутствует ли таблица в списке.
Обсуждение
Вы можете использовать предложение SHOW TABLES для проверки существования определенной таблицы, добавив инструкцию LIKE с именем таблицы:
SHOW TABLES LIKE 'имя_таблицы';
SHOW TABLES FROM имя_БД LIKE 'имя_таблицы';
Если строка возвращается, таблица существует. Если нет, то не существует.
Рассмотрим функцию на Perl, осуществляющую проверку наличия таблицы:
sub table_exists
{
my ($dbh, $tbl_name) = @_;
my $db_clause = "";
($db_clause, $tbl_name) = (" FROM $1", $2) if $tbl_name =~ /(.*)\.(.*)/;
$tbl_name =~ s/([%_])/\\$1/g; # экранировать любые специальные символы
return ($dbh->selectrow_array ("SHOW TABLES $db_clause LIKE '$tbl_name'"));
}
Функция проверяет аргумент имени таблицы на соответствие формату имя_БД.имя_таблицы. Если формат такой, то функция извлекает имя таблицы и добавляет в предложение инструкцию FROM. В противном случае производится проверка для текущей базы данных. Обратите внимание на то, что функция возвращает «ложь», если таблица существует, но у вас нет прав на доступ к ней.
Есть и другие способы проверки существования таблицы. Любое из приведенных ниже предложений SELECT выполнится успешно, если таблица существует, и не выполнится, если она не существует:
SELECT * FROM имя_таблицы WHERE 1=0;
SELECT COUNT(*) FROM имя_таблицы;
Чтобы использовать такие предложения в программе, сначала настройте режим диагностирования ошибок вашего API так, чтобы он не прерывалвыполнение программы в случае обнаружения ошибки. Затем попробуйте выполнить предложение и посмотреть, выполнится ли оно.