从 shell 脚本中,如何检查 MySQL 数据库中的表是否存在?

从 shell 脚本中,如何检查 MySQL 数据库中的表是否存在?

我正在尝试编写一个脚本,让用户选择他需要对表执行的操作。我想检查表是否存在。如果存在,我将继续执行其他操作,否则我退出并提示表不存在。我该如何实现这一点。

答案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

您必须在第一行替换数据目录的路径、数据库名称和表名。

注意事项:

  1. 如果您正在使用 InnoDB,则此方法将不起作用,并且不是使用 innodb-file-per-table。即脚本可以说表不存在,即使它确实存在。
  2. 该文件可能由于多种原因而存在,包括使用文件系统复制表或从 MyISAM 切换到 InnoDB。即,脚本可以说该表确实存在,即使它不存在。

由于上述原因,它不如已经提出的其他方法可靠,但它避免了 mysql 客户端,因此仍然值得。

请注意,此处介绍的所有方法都依赖于您获得正确的权限(文件系统或 MySQL)。如果您获得错误的权限,则很可能得到假阴性结果。

相关内容