Existe uma maneira de verificar se existe uma tabela sem selecionar e verificar valores nela?
Ou seja, eu sei que posso SELECT testcol FROM testtable
verificar a contagem de campos retornados, mas parece que deve haver uma maneira mais direta / elegante de fazer isso.
Respostas:
Se você deseja estar correto, use INFORMAÇÕES_SCHEMA .
Como alternativa, você pode usar
SHOW TABLES
Se houver uma linha no conjunto de resultados, a tabela existe.
fonte
SELECT...FROM
sintaxe ... Eu estava meio que procurando por algo comoEXISTS testtable
se você receber uma contagem diferente de zero, a tabela existe.
fonte
TEMPORARY TABLE
isso não está funcionando.Uma comparação de desempenho:
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');
Observe que se você estiver executando muito isso - como em muitas solicitações de HTML em um curto período - o segundo será muito mais rápido, pois será armazenado em cache em média 200 ms ou mais.
fonte
Você pode consultar a
tables
visualização do sistema INFORMATION_SCHEMA :Se nenhuma linha retornou, a tabela não existe.
fonte
Depois de ler todas as opções acima, prefiro a seguinte declaração:
Indica exatamente o que você deseja fazer e, na verdade, retorna um 'booleano'.
fonte
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Em vez de depender de erros, você pode consultar
INFORMATION_SCHEMA.TABLES
para ver se a tabela existe. Se houver um registro, ele existe. Se não houver registro, ele não existe.fonte
SELECT FROM
. :-)Aqui está uma tabela que não é um SELECT * FROM
Entendi isso de um profissional de banco de dados, aqui está o que me disseram:
fonte
Esta solução modificada acima não requer conhecimento explícito do banco de dados atual. É então mais flexível.
fonte
Apenas para adicionar uma maneira extra de fazer isso, e dependendo do que você precisar, você poderá usar um manipulador para o erro er_no_such_table : 1146 como este:
fonte
mostrar tabelas como 'table_name'
se isso retornar linhas> 0, a tabela existe
fonte
Você pode fazer algo como abaixo:
fonte
Expandindo esta resposta , pode-se escrever ainda uma função que retorna TRUE / FALSE com base na existência ou não de uma tabela:
fonte
Este método compacto retorna 1 se existir 0 se não existir.
Você pode colocar em uma função mysql
e chame
retornar 1 se existir 0 se não existir.
fonte
Eu uso isso em php.
fonte
Há vários problemas a serem observados com as respostas aqui:
1)
INFORMATION_SCHEMA.TABLES
faz não incluem tabelas temporárias.2) Usando qualquer tipo de
SHOW
consulta, ou seja,SHOW TABLES LIKE 'test_table'
, forçará o retorno de um conjunto de resultados ao cliente, o que é um comportamento indesejável para verificar se existe uma tabela no lado do servidor, de dentro de um procedimento armazenado que também retorna um conjunto de resultados.3) Como alguns usuários mencionaram, você deve ter cuidado com o uso
SELECT 1 FROM test_table LIMIT 1
.Se você fizer algo como:
Você não obterá o resultado esperado se a tabela tiver zero linhas.
Abaixo está um procedimento armazenado que funcionará para todas as tabelas (mesmo TEMPORARY).
Pode ser usado como:
O código:
fonte
Este foi o meu procedimento EXISTS 'go-to' que verifica as tabelas temporárias e normais. Este procedimento funciona no MySQL versão 5.6 e superior. O parâmetro @DEBUG é opcional. O esquema padrão é assumido, mas pode ser concatenado para a tabela na instrução @s.
Aqui está o exemplo de instrução de chamada com @debug on:
A variável @tblExists retorna um booleano.
fonte
Nenhuma das opções, exceto SELECT, não permite o nome do banco de dados conforme usado no SELECT, então escrevi isso:
fonte