我正在尝试编写一个脚本,让用户选择他需要对表执行的操作。我想检查表是否存在。如果存在,我将继续执行其他操作,否则我退出并提示表不存在。我该如何实现这一点。
答案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 中,你可以从 shell 中使用 -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)。如果您获得错误的权限,则很可能得到假阴性结果。