Из сценария оболочки, как я могу проверить, существует ли таблица в базе данных MySQL или нет?

С хостом Linux существует много способов изрубить это.

Один из самых опрятных должен был бы использовать OpenVSwitch для управления сетями, затем Вы просто создаете частный VLAN.

Другой должен просто соединить зарубки мостом и просто не имеет хоста, присваивают IP-адрес (Если Вам нужен IPv6, также необходимо бездельничать немногому для отключения создания адреса ipv6, но если, как большинство, Вы не заботитесь о ipv6 затем, Вы не должны волноваться).

8
задан 24 November 2011 в 10:17
3 ответа
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 , чтобы пропустить имена столбцов
  • -s для нестандартных выходных данных
12
ответ дан 2 December 2019 в 22:47

Если вам нужен метод, который не требует запуска клиента mysql и входа на сервер mysql, вы можете сделать это:

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

Вам нужно будет заменить путь к вашим данным каталог, имя вашей базы данных и имя вашей таблицы в первой строке.

Предостережения:

  1. Это не будет работать, если вы используете InnoDB и не используете innodb-file-per-table. т.е. сценарий может сказать, что таблица не существует, даже если она существует.
  2. Этот файл может существовать по разным причинам, включая копирование таблиц с использованием файловой системы или переключение с MyISAM на InnoDB. т.е. сценарий может сказать, что таблица действительно существует, хотя это не так.

Это не так надежно, как другие уже представленные методы по причинам, указанным выше, но он избегает клиента mysql, поэтому он все еще может быть полезен.

Обратите внимание, что все методы, представленные здесь, зависят от правильности получения вами собственных разрешений (файловой системы или MySQL). Если вы ошибетесь, скорее всего, получите ложноотрицательный результат.

3
ответ дан 2 December 2019 в 22:47

In MySQL you can use -e from the shell

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
4
ответ дан 2 December 2019 в 22:47

Теги

Похожие вопросы