Estou tentando escrever um script que permita ao usuário selecionar a manipulação que ele precisa fazer em uma tabela. Quero verificar se a tabela existe ou não. Se existir vou continuar as outras coisas ou então saio dizendo que a tabela não existe. Como posso conseguir isso.
Responder1
if [ $(mysql -N -s -u root -p -e \
"select count(*) from information_schema.tables where \
table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
do something
else
echo "table <table_name> does not exist"
exit 1
fi
-N
para pular os nomes das colunas-s
para saída não tabular
Responder2
No MySQL você pode usar -e do shell
mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
Responder3
Se você deseja um método que não envolva a execução de um cliente mysql e o login no servidor mysql, você pode fazer o seguinte:
if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
echo Table exists
else
echo Table does not exist
fi
Você terá que substituir o caminho do seu diretório de dados, o nome do seu banco de dados e o nome da sua tabela na primeira linha.
Ressalvas:
- Isso não funcionará se você estiver usando InnoDB e estivernãousando innodb-file-per-table. ou seja, o script pode dizer que a tabela não existe, mesmo que exista.
- É possível que esse arquivo exista por vários motivos, incluindo copiar tabelas usando o sistema de arquivos ou mudar de MyISAM para InnoDB. ou seja, o script pode dizer que a tabela existe mesmo que não exista.
Não é tão confiável quanto os outros métodos já apresentados pelos motivos acima, mas evita o cliente mysql, então ainda pode valer a pena.
Observe que todos os métodos apresentados aqui dependem de você obter suas próprias permissões (sistema de arquivos ou MySQL) corretas. Se você errar, provavelmente obterá um falso negativo.