Есть ли способ проверить, существует ли таблица, не выбирая и не проверяя значения из нее?
То есть я знаю, что могу пойти SELECT testcol FROM testtable
и проверить количество возвращаемых полей, но, похоже, должен быть более прямой / элегантный способ сделать это.
Ответы:
Если вы хотите быть правы, используйте INFORMATION_SCHEMA .
Кроме того, вы можете использовать
SHOW TABLES
Если в наборе результатов есть строка, таблица существует.
источник
SELECT...FROM
синтаксис ... Я искал что-то вродеEXISTS testtable
если вы получите ненулевой счет, таблица существует.
источник
TEMPORARY TABLE
это не работает.Сравнение производительности:
322ms:
show tables like 'table201608';
691ms:
select 1 from table201608 limit 1;
319ms:
SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');
Обратите внимание, что если вы выполняете это много - например, по многим HTML-запросам за короткий период - второй будет намного быстрее, поскольку он будет кэшироваться в среднем 200 мс или быстрее.
источник
Вы можете запросить
tables
системное представление INFORMATION_SCHEMA :Если строки не возвращены, то таблица не существует.
источник
Прочитав все вышеизложенное, я предпочитаю следующее утверждение:
Он точно указывает, что вы хотите сделать, и фактически возвращает «логическое значение».
источник
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Вместо того, чтобы полагаться на ошибки, вы можете запросить,
INFORMATION_SCHEMA.TABLES
существует ли таблица. Если есть запись, она существует. Если нет записи, ее не существует.источник
SELECT FROM
. :-)Вот таблица, которая не является SELECT * FROM
Получил это из базы данных про, вот что мне сказали:
источник
Это модифицированное решение сверху не требует явного знания текущей базы данных. Это тогда более гибко.
источник
Просто чтобы добавить дополнительный способ сделать это, и в зависимости от того, что вам нужно, вы можете использовать обработчик для ошибки er_no_such_table : 1146 вот так:
источник
показывать таблицы вроде 'table_name'
если это возвращает строки> 0, таблица существует
источник
Вы можете сделать что-то вроде ниже:
источник
Развернув этот ответ , можно дополнительно написать функцию, которая возвращает TRUE / FALSE в зависимости от того, существует таблица или нет:
источник
Этот компактный метод возвращает 1, если существует 0, если не существует.
Вы можете вставить в функцию MySQL
и назовите это
вернуть 1, если существует 0, если не существует.
источник
Я использую это в php.
источник
Здесь есть несколько вопросов, на которые следует обратить внимание:
1)
INFORMATION_SCHEMA.TABLES
вовсе не включают в себя временные таблицы.2) Использование любого типа
SHOW
запроса, т.е.SHOW TABLES LIKE 'test_table'
вызовет возврат набора результатов клиенту, что является нежелательным поведением для проверки, существует ли таблица на стороне сервера, из хранимой процедуры, которая также возвращает набор результатов.3) Как упоминали некоторые пользователи, вы должны быть осторожны с тем, как вы используете
SELECT 1 FROM test_table LIMIT 1
.Если вы делаете что-то вроде:
Вы не получите ожидаемый результат, если таблица имеет ноль строк.
Ниже представлена хранимая процедура, которая будет работать для всех таблиц (даже ВРЕМЕННЫХ).
Может использоваться как:
Код:
источник
Это была моя процедура 'EXISTS' для проверки как временных, так и обычных таблиц. Эта процедура работает в версии MySQL 5.6 и выше. Параметр @DEBUG является необязательным. Предполагается схема по умолчанию, но ее можно объединить с таблицей в операторе @s.
Вот пример оператора вызова с @debug:
Переменная @tblExists возвращает логическое значение.
источник
Ни один из параметров, кроме SELECT, не позволяет использовать имя базы данных, используемое в SELECT, поэтому я написал это:
источник