Я пытаюсь написать скрипт, который позволяет пользователю выбирать, какие манипуляции ему нужно выполнить со столом. Я хочу проверить, существует ли таблица или нет. Если она существует, я продолжу другие вещи, иначе я выйду, сказав, что таблица не существует. Как я могу этого добиться.
решение1
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 вы можете использовать -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
Вам придется заменить путь к каталогу данных, имя базы данных и имя таблицы в первой строке.
Предостережения:
- Это не сработает, если вы используете InnoDB инетс использованием innodb-file-per-table. т.е. скрипт может сказать, что таблица не существует, даже если она существует.
- Этот файл может существовать по разным причинам, включая копирование таблиц с использованием файловой системы или переключение с MyISAM на InnoDB. То есть скрипт может сказать, что таблица существует, даже если это не так.
По указанным выше причинам он не так надежен, как другие представленные методы, но он позволяет избежать использования клиента MySQL, поэтому его все равно можно использовать.
Обратите внимание, что все представленные здесь методы основаны на том, что вы правильно настроили свои собственные разрешения (файловая система или MySQL). Если вы сделаете их неправильно, вы, скорее всего, получите ложный отрицательный результат.