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


8

Я пытаюсь написать сценарий, который позволяет пользователю выбрать, какие манипуляции ему нужно сделать на столе. Я хочу проверить, существует ли таблица или нет. Если он существует, я продолжу другие действия, иначе я выйду, сказав, что таблица не существует. Как я могу достичь этого.

Ответы:


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 пропустить имена столбцов
  • -s для нетабулярного вывода

2
Чтобы ваш скрипт входил в MySQL, не останавливаясь и не запрашивая пароль, вы можете создать .my.cnfфайл в вашем домашнем каталоге и добавить [client]блок, содержащий password="my_password". Посмотрите раздел о пользовательских файлах опций в руководстве.
Ладададада

4

В MySQL вы можете использовать -e из оболочки

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?

3

Если вам нужен метод, который не включает запуск клиента 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). Если вы ошибетесь, вы, скорее всего, получите ложный минус.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.