De um script de shell, como posso verificar se existe ou não uma tabela no banco de dados MySQL?

8

Estou tentando escrever um script que permita ao usuário selecionar qual manipulação ele precisa fazer em uma tabela. Eu quero verificar se a tabela existe ou não. Se existir, continuarei as outras coisas ou sairei dizendo que a tabela não existe. Como posso conseguir isso?

    
por RathanKalluri 24.11.2011 / 06:47

3 respostas

12

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 ignorar os nomes das colunas
  • -s para saída não-raiz
por 24.11.2011 / 07:30
4

No MySQL você pode usar -e a partir do shell

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
    
por 24.11.2011 / 06:56
3

Se você quer um método que não envolve a execução de um cliente mysql e o login no servidor mysql, você pode fazer isso:

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 para o diretório de dados, o nome do banco de dados e o nome da sua tabela na primeira linha.

Advertências:

  1. Isso não funcionará se você estiver usando o InnoDB e não estiver usando o innodb-file-per-table. Ou seja, o script pode dizer que a tabela não existe, embora exista.
  2. É possível que esse arquivo exista por vários motivos, incluindo a cópia de tabelas usando o sistema de arquivos ou a mudança do MyISAM para o 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 por causa das razões acima, mas evita o cliente mysql, então ainda pode valer a pena.

Note que todos os métodos apresentados aqui dependem de você ter suas próprias permissões (sistema de arquivos ou MySQL) corretas. Se você errar, provavelmente terá um falso negativo.

    
por 24.11.2011 / 08:41